在机器学习中的随机性
理解随机性在机器学习算法中的作用是一种突破。
一旦你理解了,你会看到不同的事情。从一个全新的角度来看。例如在一种算法和另一种算法之间进行选择、超参数调整和报告结果。
在这篇文章中,我想稍微地让你看到随机数在机器学习中的作用。我想给你们一些工具来接受这种不确定性。给你一个突破。
我们开始吧。
机器学习算法利用随机性
1.数据收集的随机性
机器学习算法用不同的数据训练,会构造不同的模型。这取决于算法。具有不同数据的模型的不同程度称为模型方差(就像在偏差——方差权衡中一样)。
因此,数据本身就是随机性的来源。数据收集的随机性。
2.观察顺序的随机性
观测向模型公开的顺序会影响内部决策。
有些算法特别容易受此影响,比如神经网络。
在每次训练迭代之前随机调整训练数据是很好的做法。即使你的算法不受影响。这是最好的做法。
3.算法的随机性
算法利用随机性。
可以将算法初始化为随机状态。例如人工神经网络中的初始权重。
在确定性方法的训练期间,以平局(和其他内部决定)结束的投票可能依赖于随机性来解决。
4.抽样的随机性
我们可能有太多的数据无法合理处理。
在这种情况下,我们可以使用随机子样本来训练模型。
5.重采样的随机性
我们在评估算法时会抽样。
我们使用诸如将数据拆分成随机训练和测试集之类的技术,或者使用k-fold交叉验证来对数据进行k次随机拆分。
结果是对模型(以及用于创建该模型的过程)在不可见数据上的性能的估计。
确实是这样
毫无疑问,随机性在应用机器学习中扮演着重要角色。
随机seed和可重复结果
在数据集上运行算法并获得模型。
在给定相同的数据的情况下,你能再次获得相同的模型吗?
你应该能做到。这应该是你的建模项目的首要要求。
通过使用完全相同的代码、数据和随机数序列,我们实现了应用机器学习的重复性。
随机数是使用伪随机数生成器在软件中生成的。这是一个简单的数学函数,可以生成一个对大多数应用程序来说足够随机的数字序列。
这个数学函数是确定性的。如果它使用相同的起始点(称为seed数),则它将给出相同的随机数序列。
问题解决了。
基本上都是。
在我们构建的每个模型之前,通过固定随机数生成器的种子可以得到可重复性的结果。
事实上,这是一种最佳实践。
如果还没有的话,我们应该开始做这件事了。
事实上,我们应该给我们比较的每种算法和我们尝试的每种技术提供相同的随机数序列。
它应该是我们运行的每个实验的默认部分。
机器学习算法是随机的
如果机器学习算法给出具有不同随机数序列的不同模型,那么我们会选择哪种模型呢?
这就是问题所在。
我经常被问到这个问题,我很喜欢这个问题。
这是一个迹象,表明有人真的进入了所有这些应用机器学习的核心——或者即将进入核心。
- 用……实现算法的不同运行。
- 不同的随机数给出了……
- 带……的不同模型。
- 不同的性能特征……
但差异是在一定范围内的。
这一差异或范围内的随机行为的花哨名称是随机的。
机器学习算法在实践中是随机的。
- 希望它们是随机的。
- 预计会有一系列模型可供选择,而不是单一模型。
- 期望性能是一个范围,而不是单个值。
这些都是非常真实的期望,你必须在实践中加以解决。
你能想出什么策略来满足这些期望呢?
解决随机算法不确定性的策略
值得庆幸的是,学者们已经与这一挑战斗争了很长一段时间。
你可以使用两种简单的策略:
- 减少不确定性。
- 报告不确定性。
减少不确定性的策略
如果我们每次运行算法都得到不同的模型,我们能做什么呢?
不如我们尝试多次运行该算法,并收集一组性能度量。
如果我们使用k-折交叉验证,我们已经这样做了。我们建造了k个不同的模型。
只要每个文件夹中的数据仍然具有问题的代表性,我们就可以增加k并构建更多的模型。
我们还可以重复我们的评估过程n次,以在我们的绩效度量群体中获得更多的数字。
这种策略称为随机重复或随机重新启动。
它在随机优化和神经网络中更为普遍,但通常也同样相关。试试看。
报告不确定性的策略
千万不要用一个数字来报告机器学习算法的性能。
如果你这样做了,那么你很可能犯了一个错误。
你已经收集了一大批绩效衡量标准。使用有关此人口的统计数据。
此策略称为报告摘要统计信息。
结果的分布很可能是高斯分布,因此报告性能的平均和标准偏差将是一个很好的开始。包括观察到的最高和最低性能。
事实上,这是一种最佳实践。
然后,你可以在执行模型选择时比较结果度量的总体。例如:
- 在算法之间进行选择。
- 在一种算法的配置之间进行选择。
你可以看到,这对你遵循的流程有重要影响。例如:选择要对你的问题使用哪种算法,以及用于调整和选择算法超参数。
依靠统计显著性检验。统计测试可以确定结果度量的一个总体之间的差异是否与第二个结果总体之间的差异显着不同。
同时报告其重要性。
这也是一个最佳实践,遗憾的是没有得到足够的采用。
等等,最后的模型选择怎么样?
一旦我们选择了算法和配置,最终的模型就是在整个训练数据集上准备的模型。
这是我们打算用来进行预测或部署到运营中的模型。
对于不同的随机数序列,我们也得到了不同的最终模型。
我有一些学生问我:
我是否应该创建多个最终模型,并在坚持验证数据集上选择精度最高的模型。
“不,”我回答说。
这将是一个脆弱的过程,高度依赖于待定验证数据集的质量。你选择的是针对小样本数据进行优化的随机数。
听起来像是契合的秘诀。
总体而言,我将依赖于从上述策略中获得的信心,以减少和报告不确定性。我经常只使用第一个模型,它和其他型号一样好。
有时,你应该更加关心你的应用程序域。
在这种情况下,我会告诉你构建一个模型集合,每个模型都使用不同的随机数种子进行训练。
使用简单的投票组合。每个模型都进行预测,所有预测的平均值被报告为最终预测。
把整体做得尽可能大。我认为10、30或100是不错的整数。
也许会不断增加新的模型,直到预测变得稳定。例如,继续下去,直到预测的方差在某些保持集上变得更紧为止。
摘要
在这篇文章中,你发现了为什么随机数是应用机器学习不可或缺的一部分。你不可能真的逃避他们。
你了解了可以用来确保结果可重现的策略。
你了解了在选择模型和报告结果时可以用来接受机器学习算法的随机性的技术。