Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >预测随机机器学习算法实验的重复次数

预测随机机器学习算法实验的重复次数

作者头像
AiTechYun
发布于 2018-03-02 08:03:12
发布于 2018-03-02 08:03:12
2K00
代码可运行
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号
运行总次数:0
代码可运行

许多随机机器学习算法的一个问题是同一数据上相同算法的不同运行会返回不同的结果。 这意味着,当进行实验来配置随机算法或比较算法时,必须收集多个结果,并使用平均表现来总结模型的技能。 这就提出了一个问题,即一个实验的重复次数是否足以充分描述一个给定问题的随机机器学习算法的技巧。 通常建议使用30个或更多个重复,甚至100个。一些从业者使用数千个重复,似乎超出了收益递减的想法。 在本教程中,您将探索统计方法,您可以使用它们来估计正确的重复次数,以有效地表征随机机器学习算法的性能。 本教程假定您有一个工作的Python 2或3 SciPy环境安装NumPy,熊猫和Matplotlib。

1.生成数据

第一步是生成数据。 我们将假设我们将一个神经网络或其他随机算法放入一个训练数据集1000次,并在数据集上收集了最终的RMSE分数。我们将进一步假设数据是正态分布的,这是我们将在本教程中使用的分析类型的要求。 检查您的结果分布; 结果往往是高斯分布。 我们将会分析产生的结果。这是有用的,因为我们将知道真正的人口平均数和标准误差,这是我们在真实的情况下不知道的。 我们将使用60为平均分,标准偏差是10。 以下代码生成1000个随机结果的样本,并将其保存到名为results.csv的CSV文件中。 我们使用seed()函数来生成随机数生成程序,以确保每次运行这个代码时总是得到相同的结果。然后我们使用normal()函数生成高斯随机数,并使用savetxt()函数保存ASCII格式的数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from numpy.random import seed
from numpy.random import normal
from numpy import savetxt
# define underlying distribution of results
mean = 60
stev = 10
# generate samples from ideal distribution
seed(1)
results = normal(mean, stev, 1000)
# save to ASCII file
savetxt('results.csv', results)

您现在应该有一个名为results.csv的文件,其中包含我们假装随机算法测试工具的1000个最终结果。 以下是文件的最后10行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
6.160564991742511864e+01
5.879850024371251038e+01
6.385602292344325548e+01
6.718290735754342791e+01
7.291188902850875309e+01
5.883555851728335995e+01
3.722702003339634302e+01
5.930375460544870947e+01
6.353870426882840405e+01
5.813044983467250404e+01

2.基础分析

当我们有一个成果的人口后第一步是做一些基本的统计分析,看看我们有什么。 三个基本分析的有用工具包括: 1.计算汇总统计,如平均值,标准偏差和百分位数。 2.使用框须图来查看数据的传播。 3.使用直方图查看数据的分布。 下面的代码执行这个基本的分析。首先加载results.csv,计算汇总统计量,并显示图表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import DataFrame
from pandas import read_csv
from numpy import mean
from numpy import std
from matplotlib import pyplot
# load results file
results = read_csv('results.csv', header=None)
# descriptive stats
print(results.describe())
# box and whisker plot
results.boxplot()
pyplot.show()
# histogram
results.hist()
pyplot.show()

运行示例:首先打印统计信息。 我们可以看到,该算法的平均成绩约为60.3个单位,标准偏差约为9.8。 如果我们假设分数是最小化分数,如RMSE,我们可以看到最差的成绩是99.5,最好的成绩是大约29.4。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
count  1000.000000
mean     60.388125
std       9.814950
min      29.462356
25%      53.998396
50%      60.412926
75%      67.039989
max      99.586027

创建框须图来总结数据的传播,显示中间的50%(框),离群值(点)和中位数(绿线)。 我们可以看到,即使在中位数附近,结果的散布也是合理的。

最后,创建结果的直方图。我们可以看到高斯分布的贝尔曲线形状,这是一个好兆头,因为它意味着我们可以使用标准的统计工具。 我们看不到任何明显的分配偏差; 它似乎以60左右为中心。

3.重复次数的影响

我们有很多的结果,准确的说有1000个。 这可能远远超过我们需要的结果,但是还是不够的。 我们怎么知道? 我们可以通过将实验的重复次数与这些重复的平均分数进行比较来获得一个初步的想法。 我们预计随着实验重复次数的增加,平均得分将迅速稳定。它应该经历一个最初混乱但最后趋于稳定的过程。 以下是代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import DataFrame
from pandas import read_csv
from numpy import mean
from matplotlib import pyplot
import numpy
# load results file
results = read_csv('results.csv', header=None)
values = results.values
# collect cumulative stats
means = list()
for i in range(1,len(values)+1):
data = values[0:i, 0]
mean_rmse = mean(data)
means.append(mean_rmse)
# line plot of cumulative values
pyplot.plot(means)
pyplot.show()

这个段期间会得到一些混乱没有规律的平均结果,经过前200次重复,它变得稳定。在600次重复之后,它似乎变得更加稳定。

我们可以放大图表中前500次重复,看看能否更好地了解发生了什么。 我们还可以叠加最终的平均分数(来自所有1000次运行的平均值),并尝试找到收益递减点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import DataFrame
from pandas import read_csv
from numpy import mean
from matplotlib import pyplot
import numpy
# load results file
results = read_csv('results.csv', header=None)
values = results.values
final_mean = mean(values)
# collect cumulative stats
means = list()
for i in range(1,501):
data = values[0:i, 0]
mean_rmse = mean(data)
means.append(mean_rmse)
# line plot of cumulative values
pyplot.plot(means)
pyplot.plot([final_mean for x in range(len(means))])
pyplot.show()

橙色线显示所有1000次运行的平均值。 我们可以看到,100次运行可能是停止的一个好点,在400次可能会有一个更精致的结果,但只更精确一点点。

4.计算标准误差

标准误差是计算“样本平均值”与“总体均值”的差异。 这与描述样本中观察值的平均变化量的标准偏差不同。 标准误差可以计算如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
standard_error = sample_standard_deviation / sqrt(number of repeats)

在这种情况下,模型得分的样本的标准偏差除以总重复次数的平方根。 我们期望标准误差随着实验的重复次数减少。 给出结果,我们可以从每个重复序列的总体平均值计算样本平均值的标准误差。以下提供完整的代码清单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import read_csv
from numpy import std
from numpy import mean
from matplotlib import pyplot
from math import sqrt
# load results file
results = read_csv('results.csv', header=None)
values = results.values
# collect cumulative stats
std_errors = list()
for i in range(1,len(values)+1):
data = values[0:i, 0]
stderr = std(data) / sqrt(len(data))
std_errors.append(stderr)
# line plot of cumulative values
pyplot.plot(std_errors)
pyplot.show()

创建标准误差与重复次数的折线图。 我们可以看到,正如预期的那样,随着重复次数的增加,标准误差降低。我们也可以看到有一个可以接受的错误点,比如说一两个单位。 标准误差的单位与模型技能的单位相同。

我们可以重新创建上面的图表,并绘制0.5和1个单位作为指导,可以用来找到一个可以接受的错误级别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import read_csv
from numpy import std
from numpy import mean
from matplotlib import pyplot
from math import sqrt
# load results file
results = read_csv('results.csv', header=None)
values = results.values
# collect cumulative stats
std_errors = list()
for i in range(1,len(values)+1):
data = values[0:i, 0]
stderr = std(data) / sqrt(len(data))
std_errors.append(stderr)
# line plot of cumulative values
pyplot.plot(std_errors)
pyplot.plot([0.5 for x in range(len(std_errors))], color='red')
pyplot.plot([1 for x in range(len(std_errors))], color='red')
pyplot.show()

我们可以看到,如果1的标准误差是可以接受的,那么大约100次重复就足够了。如果0.5的标准误差是可以接受的,则可能有300-350次重复就足够了。

我们也可以使用标准误差作为平均模型技能的置信区间。 例如,未知人口平均模型的性能有95%的可能性在上限和下限之间。 请注意,此方法仅适用于适度和大量的重复,例如20或更多。 置信区间可以定义为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sample mean +/- (standard error * 1.96)

我们可以计算该置信区间,并将其添加到每个重复序列的样本平均值作为误差线。 以下提供完整的代码清单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import read_csv
from numpy import std
from numpy import mean
from matplotlib import pyplot
from math import sqrt
# load results file
results = read_csv('results.csv', header=None)
values = results.values
# collect cumulative stats
means, confidence = list(), list()
n = len(values) + 1
for i in range(20,n):
data = values[0:i, 0]
mean_rmse = mean(data)
stderr = std(data) / sqrt(len(data))
conf = stderr * 1.96
means.append(mean_rmse)
confidence.append(conf)
# line plot of cumulative values
pyplot.errorbar(range(20, n), means, yerr=confidence)
pyplot.plot(range(20, n), [60 for x in range(len(means))], color='red')
pyplot.show()

被创建的线条图显示每个重复次数的平均样本值,并显示每个平均值的置信区间,以收集未知的底层人口平均值。 一条读线显示实际的人口平均值(仅因为我们在本教程开始时设计了模型技巧得分)。 作为总体均值的代理,你可以在1000次重复或更多的情况下添加最后一个样本均值。 误差条模糊了平均分数的线。我们可以看到平均值高估了总体均值,但95%置信区间掌握了总体均值。 请注意,95%置信区间意味着,在100个样本中,95%的时间间隔将会捕获总体均值,而5个样本均值和置信区间则不会。 我们可以看到,随着标准误差的减小,95%置信区间确实会随着重复的增加而增加,但可能会有超过500次重复的收益递减。

我们可以通过放大此图形来更清楚地了解发生了什么,突出显示从20到200的重复。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import read_csv
from numpy import std
from numpy import mean
from matplotlib import pyplot
from math import sqrt
# load results file
results = read_csv('results.csv', header=None)
values = results.values
# collect cumulative stats
means, confidence = list(), list()
n = 200 + 1
for i in range(20,n):
data = values[0:i, 0]
mean_rmse = mean(data)
stderr = std(data) / sqrt(len(data))
conf = stderr * 1.96
means.append(mean_rmse)
confidence.append(conf)
# line plot of cumulative values
pyplot.errorbar(range(20, n), means, yerr=confidence)
pyplot.plot(range(20, n), [60 for x in range(len(means))], color='red')
pyplot.show()

在创建的线条图中,我们可以清楚地看到样本平均值和周围的对称误差线。该图确实能够更好地显示样本平均值的偏差。

进一步阅读

没有多少资源将所需的统计数据与使用随机算法的计算实验方法联系起来。 关于我发现的主题的最好的书是: Empirical Methods for Artificial Intelligence,Cohen,1995, 如果对这篇文章感兴趣,我强烈推荐这本书。

下面是一些额外的文章,您可能会发现有用的: Standard Error Confidence Interval 68–95–99.7 rule 此文为编译作品,作者 Jason Brownlee,原网站http://machinelearningmastery.com

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
AI科技评论按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI科技评论编译。 Jason Brownlee 许多随机机器学习算法存在
AI科技评论
2018/03/13
1.2K0
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
严谨解决5种机器学习算法在预测股价的应用(代码+数据)
机器学习有很多应用,其中之一就是预测时间序列。一个最有趣(或者可能是最赚钱)的时间序列是股票价格。
量化投资与机器学习微信公众号
2019/02/26
5.9K1
机器学习实战之风功率预测
目前机器学习与气象数据的结合已经在实际生产中有了应用,比如风电场风功率预测、光伏功率预测和负荷预测。本文以风功率预测作为一个小栗子: 风功率预测是指以风电场的历史功率、历史风速、地形地貌、数值天气预报、风电机组运行状态等数据建立风电场输出功率的预测模型,以风速、功率或数值天气预报数据作为模型的输入,结合风电场机组的运行状态及运行工况,得到风电场未来的输出功率,预测时间尺度包括短期预测和超短期预测,目的是上报国家电网,利于国家电网调度。目前主流方案是结合数值天气预报和机器学习算法(LSTM、SVM等)对风功率进行时序预测,包含超短期预报(未来4个小时共16个时刻)和短期预报(未来三天共288个时刻)。 本文主要利用WRF的气象要素预报数据和LSTM算法进行风功率预测。
MeteoAI
2019/07/22
6.3K8
Python; 机器学习之项目实践
机器学习是一项经验技能,经验越多越好。在项目建立的过程中,实践是掌握机器学习的最佳手段。在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的。 预测模型项目模板 不能只通过阅读来掌握机器学习的技能,需要进行大量的练习。本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤。通过本文将学到: 端到端地预测(分类与回归)模型的项目结构。 如何将前面学到的内容引入到项目中。 如何通过这个项目模板来得到一个高准确度的模板。 机器学习是针对数据进行自动挖掘,找出数据
CSDN技术头条
2018/02/06
1.1K0
Python; 机器学习之项目实践
机器学习中回归算法的基本数学原理
假设这是一个关于广告费与网站点击量的数据集,我们需要预测投入更多的广告费网站点击量是多少。
数据STUDIO
2021/09/09
7740
基于长短期记忆神经网络LSTM的多步长时间序列预测
长短时记忆网络(LSTM)是一种能够学习和预测长序列的递归神经网络。LSTMs除了学习长序列外,还可以学习一次多步预测,这对于时间序列的预测非常有用。LSTMs的一个困难在于,它们可能难以配置,而且需要大量的准备工作才能获得适合学习的格式的数据。
代码医生工作室
2020/06/16
7K0
基于长短期记忆神经网络LSTM的多步长时间序列预测
基于深度学习模型的空气污染时序预测
Blog: http://yishuihancheng.blog.csdn.net
郭好奇同学
2022/06/07
2.2K0
基于深度学习模型的空气污染时序预测
我花了一年时间研究不确定性估算,写下了这份最全指南
为什么立下这个flag?因为我在各种大会上听腻了人们争论每个月微件(widget)的数量是上升还是下降,或者微件方法X是否比微件方法Y更有效率。
大数据文摘
2018/12/18
7620
如何建立预测大气污染日的概率预测模型
空气污染程度以地面臭氧浓度表示。根据风速和温度等气象测量结果,是否会在明天达到足以发出公众空气污染警告的高度
AiTechYun
2018/10/25
3K0
如何建立预测大气污染日的概率预测模型
机器学习中不平衡数据集分类模型示例:乳腺钼靶微钙化摄影数据集
一个典型的不平衡分类数据集是乳腺摄影数据集,这个数据集用于从放射扫描中检测乳腺癌(特别是在乳腺摄影中出现明亮的微钙化簇)。研究人员通过扫描图像,对目标进行分割,然后用计算机视觉算法描述分割对象,从而获得了这一数据集。
deephub
2020/05/09
1.7K0
机器学习中不平衡数据集分类模型示例:乳腺钼靶微钙化摄影数据集
数据科学 IPython 笔记本 六、SciPy 统计推断
为了探索量化效应量的统计量,我们将研究男女之间的身高差异。 我使用来自行为风险因素监测系统(BRFSS)的数据,来估计美国成年女性和男性的身高的平均值和标准差(cm)。
ApacheCN_飞龙
2022/05/07
8560
数据科学 IPython 笔记本 六、SciPy 统计推断
Keras中带LSTM的多变量时间序列预测
像长短期记忆(Long Short-Term Memory ) LSTM 递归神经网络这样的神经网络几乎可以完美地模拟多个输入变量的问题。
QiqiHe
2018/02/09
46.8K8
Keras中带LSTM的多变量时间序列预测
独家 | 手把手教你用Python的Prophet库进行时间序列预测
本文为大家介绍了如何在Python中使用由Facebook开发的Prophet库进行自动化的时间序列预测,以及如何评估一个由Prophet库所搭建的时间序列预测模型的性能。
数据派THU
2020/10/26
12K0
独家 | 手把手教你用Python的Prophet库进行时间序列预测
周期序预测列问题中的朴素模型——周期跟随模型(Seasonal Persistence)
在处理时间序列问题时,人们通常使用跟随算法(将前一个时间单位的观测值作为当前时间的预测值)预测的结果作为预测性能的基准。
ArrayZoneYour
2018/02/06
2.5K0
Python时间序列预测案例研究:巴尔的摩年度用水量
时间序列预测是一个过程,获得良好预测的唯一方法就是练习这个过程。
花落花飞去
2018/02/06
7.3K0
如何使用统计显着性检验来解释机器学习结果
在比较两种不同的机器学习算法或比较相同的算法与不同的配置时,收集一组结果是一个好习惯。
老人雨何
2018/02/07
3.2K0
如何使用统计显着性检验来解释机器学习结果
实例讲解:时间序列预测究竟需要多少历史数据?
编者按:本文源自美国机器学习专家 Jason Brownlee 的博客,AI 研习社编译。 时间序列预测,究竟需要多少历史数据? 显然,这个问题并没有一个固定的答案,而是会根据特定的问题而改变。 在本教程中,我们将基于 Python 语言,对模型输入大小不同的历史数据,对时间序列预测问题展开讨论,探究历史数据对 ARIMA 预测模型的性能影响。(注:ARIMA 全程是 Autoregressive Integrated Moving Average Model,即自回归积分滑动平均模型) 具体来说,在本
AI研习社
2018/03/29
7.2K0
实例讲解:时间序列预测究竟需要多少历史数据?
用Python进行时间序列分解和预测
本文介绍了用Python进行时间序列分解的不同方法,以及如何在Python中进行时间序列预测的一些基本方法和示例。
Datawhale
2021/01/07
4K0
用Python进行时间序列分解和预测
如何使用带有Dropout的LSTM网络进行时间序列预测
长短期记忆模型(LSTM)是一类典型的递归神经网络,它能够学习观察所得的序列。
风飘叶扬
2018/02/05
21.3K1
第14节:lstm原理及numpy
文章目录 lstm原理 rnn lstm实例 lstm原理 文本相关。主要应用于自然语言处理(NLP)、对话系统、情感分析、机器翻译等等领域,Google翻译用的就是一个7-8层的LSTM模型。 时序相关:就是时间序列的预测,诸如预测天气/温度/. 为何全连接层和卷积神经网络无法处理序列问题,因为缺乏记忆模块,无法记忆之前输入的内容. rnn - 简单的rnn。输入是2维的(timesteps, input_features). 这里的loop就是在timesteps上的loop:每一个时刻t,RNN
AI拉呱
2022/04/13
4390
第14节:lstm原理及numpy
推荐阅读
相关推荐
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验