开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?

AI科技评论按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI科技评论编译。

Jason Brownlee

许多随机机器学习算法存在同样的问题:相同的算法、相同的数据,得到的计算结果却每次都不同。这意味着在进行随机算法检验或者算法比较的时候,必须重复试验很多次,然后用它们的平均值来评价模型。

那么对于给定问题,随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?

一般建议重复30次以上甚至100次左右。有人甚至重复几千次,完全无视边际递减效应。

对于衡量随机机器学习算法性能所需的重复试验次数,在本教程中,我将教会大家如何用统计学方法来正确预估。

教程概述

本教程分以下4部分:

  1. 数据生成
  2. 基本分析
  3. 重复次数的影响分析
  4. 标准误差计算

本教程使用Python语言,版本 2或者3均可,为顺利运行示例代码,请务必安装SciPy 、NumPy、Pandas和Matplotlib库。

下面正式开始我们的教程

1.数据生成

第一步是生成可用的数据。

假设我们将一个神经网络模型或其它随机算法,在数据的训练集上重复训练了1000次,并且记录了模型在测试集上的均方根误差(RMSE)。作为本教程后续分析的前提,假设我们所用的数据呈正态分布。

务必查看一下结果的分布形态,通常结果会呈高斯分布(即正态分布)。

我们会预先生成研究用的样本总体,这么做对后续研究非常有帮助,因为程序生成的样本总体其均值和标准差就确定下来,而这在实际应用中常常是无法得知的。

我们用均值=60,标准差=10作为参数生成试验数据。

下面是生成1000个随机数的代码,将结果保存为results.csv文件.

代码中我们用seed()作为随机数生成器种子函数,来确保每次运行代码后得到的数据都一致。使用normal()函数生成正态分布随机数,用savetxt()函数将数据保存为ASCII格式。

运行这段代码后,我们得到一个名为results.csv的文件,里面保存了1000个随机数,它们代表了随机算法重复运行的模拟结果。

下面是该文件的最后十行数据。

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数据文件,然后进行统计计算,并绘图显示。

可以看出,算法的平均性能约为60.3,标准差约为9.8。

假定数据表示的是类似均方根误差一样的最小值,从统计结果看,最大值为99.5,而最小值为29.4。

下面的箱线图中展示了数据的散布程度,其中箱形部分是样本中段(上下四分位之间)数据(约占样本的50%),圆点代表异常值,绿线表示中位数。

由图可知,结果围绕中值分布合理。

最后生成的是数据的直方图,图中显示出了正态分布的贝尔曲线(钟形曲线),这意味着我们在进行数据分析工作时,可以使用标准的统计分析工具。

由图可知,数据以60为对称轴,左右几乎没有偏斜。

3.重复次数的影响分析

之前我们生成了1000个结果数据。对于问题的研究来说可能多了,也可能不够。

该如何判断呢?

第一个想法就是画出试验重复次数和这些试验结果均值之间的曲线图。我们希望随着重复次数的增加,结果的均值能很快稳定。绘制成曲线后,看起来起始段波动较大且短,而中后部平稳且长。

利用下面的代码绘制出该曲线。

由图可以看出,前200次数据均值波动较大, 600次后,均值趋于稳定,曲线波动较小。

为了更好的观察曲线,将其放大,只显示前500次重复试验结果。

同时将1000次试验结果的均值线叠加上,以便找到两者之间的偏差关系。

图中橙色直线就是1000重复试验结果的均值线。

同时也能看到重复100次时,结果与均值较近,重复次数达到400时,结果更理想,但是提升不明显。

是不是很棒?不过会不会还有更好的办法呢?

4.计算标准误差

标准误差用来计算样本均值偏离总体均值的多少。它和标准差不同,标准差描述了样本观察值的平均变化量。标准误差能够根据样本均值的误差量或者误差散布来估计总体均值。

标准误差可以通过下式计算:

standard_error = sample_standard_deviation / sqrt(number of repeats)

即标准误差等于样本的标准差除以重复次数的均方根。

我们希望标准误差会随着试验次数的增加而减小。通过下面的代码,计算每个重复试验次数对应的样本均值的标准误差,并绘制标准误差图。

运行代码后,会绘制出标准误差与重复次数的关系曲线。

和预期的一样,随着重复试验次数的增加,标准误差快速减小。标准误差下降到一定程度后,趋于稳定,通常把1~2个单位内的值,称为可接受误差。

标准误差的单位和样本数据的单位一致。

在上图中添加纵坐标为0.5和1的辅助线,帮助我们找到可接受的标准误差值。代码如下:

雷锋网友情提醒,图中出现的两条红色辅助线,分别代表标准误差等于0.5和1。

由图可知,如果试验重复次数等于100次左右,标误差开始小于1,如果试验重复次数等于300~350次左右,标准误差小于0.5。随着重复试验次数的增加,标准误差趋于稳定,变化较小。再次提醒大家记住,标准误差可以衡量样本均值偏离总体均值的多少。

我们也可以使用标准误差来作为均值的置信区间。比如,用总体均值的95%作为置信区间的上下界。这种方法只适合试验重复次数大于20的情况。

置信区间定义如下:

样本均值 +/- (标准误差*1.96)

下面计算置信区间,并将其作为误差线添加到重复试验次数对应的样本均值上。这是计算代码。

下图创建了带置信区间的样本均值曲线。

其中红色直线表示总体的均值(在教程开始根据给定的均值和标准差生成了总体,所以总体的均值已知),重复1000次或更多后,可以用样本均值代替总体均值。

图中误差线包裹着均值线。而且样本均值夸大或高估了总体均值,不过还是落在总体均值的95%置信区间内。

95%置信区间的含义是做100次重复试验,有95次包含了总体均值的真值,另外5次没有包括。

图中可以看出,随着重复次数的增加,由于标准误差的减小,95%置信区间也逐渐变窄。

放大上图后,这种趋势在20到200之间时尤其明显。

这是由上述代码生成的样本均值和误差线随试验次数变化的曲线。此图能更好的反映样本均值与总体均值的偏差。

小结

在这篇教程里,我们提供了一种合理选择试验重复次数的方法,这有助于我们评价随机机器学习算法的正确性。

下面是几种重复次数选择的方法:

  • 简单粗暴的直接用30、100或者1000次。
  • 绘制样本均值和重复次数的关系曲线,并根据拐点进行选择。
  • 绘制标准误差和重复次数的关系曲线,并根据误差阈值进行选择。
  • 绘制样本置信区间和重复次数的关系曲线,并根据误差散布进行选择。

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2017-05-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WD学习记录

牛客网 机器学习题目

SVM核函数:线性核函数、多项式核函数、径向基核函数、高斯核函数、幂指数核函数、拉普拉斯核函数、ANOVA核函数、二次有理核函数、多元二次核函数、逆多元二次核函...

843
来自专栏人工智能头条

数据科学与机器学习管道中预处理的重要性(一):中心化、缩放和K近邻

1653
来自专栏生信小驿站

黑箱方法 支持向量机①

支持向量机(Support Vector Machine,SVM)是Corinna Cortes和Vapnik等于1995年首先提出的,它在解决小样本、非线性及...

602
来自专栏AI研习社

以不同的思考侧重介绍卷积神经网络

关于卷积神经网络的讲解,网上有很多精彩文章,且恐怕难以找到比斯坦福的CS231n(http://t.cn/RyhpHjM)(CS231n 2017雷锋字幕组已制...

3934
来自专栏量子位

万字长文|如何直观解释卷积神经网络的工作原理?

作者:YJango 日本会津大学|人机交互实验室博士生 量子位 已获授权编辑发布 该文是对卷积神经网络的介绍,并假设你理解前馈神经网络。 如果不是,强烈建议读完...

3047
来自专栏IT派

机器学习中导数最优化方法(基础篇)

1. 前言 熟悉机器学习的童鞋都知道,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解无约束最优化问题。实现简单,codi...

35913
来自专栏AI科技评论

干货 | YJango的 卷积神经网络介绍

AI科技评论按:本文来源 知乎,作者:YJango,AI科技评论授权转载。 PS:YJango是我的网名,意思是我写的教程,并不是一种网络结构。。 关于卷积神经...

3327
来自专栏大数据挖掘DT机器学习

该怎么检测异常值?

原文作者: Jacob Joseph 原文链接:https://blog.clevertap.com/how-to-detect-outliers-u...

3729
来自专栏专知

吴恩达高徒语音专家Awni Hannun:序列模型Attention Model中的问题与挑战

【导读】注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入...

3086
来自专栏机器人网

【收藏】人工智能术语表

English Terminology中文术语neural networks神经网络activation function激活函数hyperbolic tang...

2554

扫码关注云+社区