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

简介:

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

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之间时尤其明显。

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

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

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

扩展阅读

实际上,既涉及使用随机算法的计算试验方法又涉及统计学的参考资料非常少。

我个人认为1995年科恩的书是两者结合最好的:

Empirical Methods for Artificial Intelligence(人工智能实证方法),Cohen(科恩),1995

如果你对这篇教程感兴趣,我强烈推荐此书。

另外,维基百科上还有几篇文章可能对你有帮助:

Standard Error 

Confidence Interval

68–95–99.7 rule

如果你还有其他好的相关资料,可以在评论区与大家交流。谢谢。

小结

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

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

  • 简单粗暴的直接用30、100或者1000次。

  • 绘制样本均值和重复次数的关系曲线,并根据拐点进行选择。

  • 绘制标准误差和重复次数的关系曲线,并根据误差阈值进行选择。

  • 绘制样本置信区间和重复次数的关系曲线,并根据误差散布进行选择。




====================================分割线================================

本文作者:光阴
本文转自雷锋网禁止二次转载, 原文链接
目录
相关文章
|
16天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的五大技巧
【4月更文挑战第7天】 在数据科学迅猛发展的今天,机器学习已成为解决复杂问题的重要工具。然而,构建一个既精确又高效的机器学习模型并非易事。本文将分享五种提升机器学习模型性能的有效技巧,包括数据预处理、特征工程、模型选择、超参数调优以及交叉验证。这些方法不仅能帮助初学者快速提高模型准确度,也为经验丰富的数据科学家提供了进一步提升模型性能的思路。
|
13天前
|
机器学习/深度学习 自然语言处理 算法
|
1天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的最佳实践
【4月更文挑战第23天】在数据驱动的时代,机器学习已成为创新的核心动力。本文深入探讨了构建高效机器学习模型的关键步骤,包括数据预处理、特征工程、模型选择、训练技巧以及性能评估。通过实例分析与经验总结,旨在为从业者提供一套实用的技术指南,帮助他们在复杂数据环境中提升模型的准确性和泛化能力。
|
6天前
|
算法 Serverless
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?
14 0
|
6天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
26 7
|
6天前
|
机器学习/深度学习 算法 数据处理
构建自定义机器学习模型:Scikit-learn的高级应用
【4月更文挑战第17天】本文探讨了如何利用Scikit-learn构建自定义机器学习模型,包括创建自定义估计器、使用管道集成数据处理和模型、深化特征工程以及调优与评估模型。通过继承`BaseEstimator`和相关Mixin类,用户可实现自定义算法。管道允许串联多个步骤,而特征工程涉及多项式特征和自定义变换。模型调优可借助交叉验证和参数搜索工具。掌握这些高级技巧能提升机器学习项目的效果和效率。
|
7天前
电信公司churn数据客户流失k近邻(knn)模型预测分析
电信公司churn数据客户流失k近邻(knn)模型预测分析
15 0
|
8天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从特征工程到模型调优
【4月更文挑战第16天】 在数据驱动的时代,机器学习已成为解决复杂问题的关键工具。本文旨在分享一套实用的技术流程,帮助读者构建高效的机器学习模型。我们将重点讨论特征工程的重要性、选择合适算法的策略,以及通过交叉验证和网格搜索进行模型调优的方法。文章的目标是为初学者提供一个清晰的指南,同时为有经验的实践者提供一些高级技巧。
|
8天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
13 0
|
8天前
|
算法
R语言使用随机技术差分进化算法优化的Nelson-Siegel-Svensson模型
R语言使用随机技术差分进化算法优化的Nelson-Siegel-Svensson模型
15 0