# 在机器学习中拥抱随机性

> 原文： [https://machinelearningmastery.com/randomness-in-machine-learning/](https://machinelearningmastery.com/randomness-in-machine-learning/)

### _为什么你会得到不同的结果_
_算法的不同运行_ _具有相同的数据？_

应用机器学习是一个突破和思维方式转变的挂毯。

了解随机性在机器学习算法中的作用是其中一项突破。

一旦你得到它，你会看到不同的东西。全新的亮点。比如在一种算法和另一种算法之间进行选择，超参数调整和报告结果。

你也会开始看到各地的滥用行为。犯罪无支持的表现声明。

在这篇文章中，我想轻轻地睁开你的眼睛，看看随机数在机器学习中的作用。我想给你一些工具来接受这种不确定性。给你一个突破。

让我们潜入。

（_特别感谢徐章和Nil Fero推荐这篇文章_）

![Embrace Randomness in Applied Machine Learning](img/f2cca9b91c060aff80b9963099544ec8.jpg)

在应用机器学习中拥抱随机性
[Peter Pham](https://www.flickr.com/photos/136807076@N07/24137339992) 的照片，保留一些权利。

## 为什么结果与同一数据不同？

很多人都会问这个问题或者这个问题的变体。

**你并不孤单！**

我每周都会收到一封电子邮件。

以下是发布到Q＆amp; A网站的类似问题：

*   [为什么每次运行算法时都会得到不同的结果？](http://stats.stackexchange.com/questions/56362/why-do-i-get-different-results-each-time-i-run-my-algorithm)
*   [交叉验证对同一数据](http://stats.stackexchange.com/questions/144387/cross-validation-gives-different-result-on-the-same-data)给出不同的结果
*   [人工智能中的随机性＆amp;机器学习](http://stackoverflow.com/questions/5891727/randomness-in-artificial-intelligence-machine-learning)
*   [为什么收敛后每次运行的权重都不同？](https://www.researchgate.net/post/Why_are_the_weights_different_in_each_running_after_convergence)
*   [两台计算机上具有相同学习数据和相同测试数据的相同神经网络会产生不同的结果吗？](https://www.quora.com/Does-the-same-neural-network-with-the-same-learning-data-and-same-test-data-in-two-computers-give-different-results)

## 机器学习算法使用随机数

机器学习算法利用随机性。

### 1.数据收集的随机性

通过训练不同的数据，机器学习算法将构建不同的模型。这取决于算法。模型与不同数据的差异称为模型方差（如[偏方差权衡](http://machinelearningmastery.com/gentle-introduction-to-the-bias-variance-trade-off-in-machine-learning/)）。

因此，数据本身就是随机性的来源。数据集合中的随机性。

### 2.观察顺序的随机性

观察结果暴露于模型的顺序会影响内部决策。

有些算法特别容易受此影响，如神经网络。

在每次训练迭代之前随机混合训练数据是一种好习惯。即使你的算法不易受影响。这是一种最佳实践。

### 3.算法中的随机性

算法利用随机性。

可以将算法初始化为随机状态。例如人工神经网络中的初始权重。

在确定性方法的训练期间以平局（和其他内部决策）结束的投票可能依赖于随机性来解决。

### 4.采样的随机性

我们可能有太多的数据无法合理使用。

在这种情况下，我们可以使用随机子样本来训练模型。

### 5.重采样的随机性

我们在评估算法时进行采样。

我们使用诸如将数据分成随机训练和测试集之类的技术，或者使用k-fold交叉验证来对数据进行k随机分割。

结果是对看不见的数据的模型（以及用于创建它的过程）的表现估计。

### 毫无疑问

毫无疑问，随机性在应用机器学习中起着重要作用。

**应该控制我们可以控制的随机性。**

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

## 随机种子和可重复的结果

在数据集上运行算法并获取模型。

如果给出相同的数据，你能再次获得相同的模型吗？

你应该能够。它应该是建模项目列表中的高要求。

通过使用与随机数完全相同的**代码**，**数据**和**序列，我们实现了应用机器学习的再现性。**

使用假装随机数生成器在软件中生成随机数。这是一个简单的数学函数，可以为大多数应用程序生成一系列随机数。

这个数学函数是确定性的。如果它使用相同的起始点称为种子数，它将给出相同的随机数序列。

**问题解决了。**
**主要是。**

通过在我们构建的每个模型之前修复随机数生成器的种子，我们可以获得可重现的结果。

实际上，这是一种最佳实践。

我们应该这样做，如果还没有。

实际上，我们应该为每个我们比较的算法和我们尝试的每种技术提供相同的随机数序列。

它应该是我们运行的每个实验的默认部分。

## 机器学习算法是随机的

如果机器学习算法给出了具有不同随机数序列的不同模型，那么我们选择哪种模型？

哎哟。有磨擦。

我不时被问到这个问题，我喜欢它。

这是一个迹象，有人真正了解所有这些应用机器学习的东西 - 或即将到来。

*   运行不同的算法...
*   不同的随机数给...
*   不同的型号......
*   不同的表现特征......

但差异在一定范围内。

这种差异的奇特名称或范围内的随机行为是随机的。

机器学习算法在实践中是随机的。

*   期待它们是随机的。
*   期望有一系列模型可供选择，而不是单一模型。
*   期望表现是范围而不是单个值。

**这些是你必须在实践中解决的非常真实的期望。**

你能想到什么策略来解决这些期望？

![Machine Learning Algorithms Use Random Numbers](img/03c0ec5512e7fab5509cac540dddc10a.jpg)

机器学习算法使用随机数
照 [Pete](https://www.flickr.com/photos/comedynose/3786642240/) ，保留一些权利。

## 解决随机算法不确定性的策略

值得庆幸的是，学术界长期以来一直在努力应对这一挑战。

您可以使用两种简单的策略：

1.  减少不确定性。
2.  报告不确定性。

### 减少不确定性的策略

如果我们在每次运行算法时都得到不同的模型，我们能做什么？

我们多次尝试运行算法并收集一系列表现指标。

如果我们使用`k`- 交叉验证，我们已经这样做了。我们构建`k`不同的模型。

我们可以增加`k`并构建更多模型，只要每个折叠中的数据仍然代表问题。

我们还可以重复我们的评估过程`n`次，以便在我们的绩效衡量指标中获得更多数字。

**这种策略称为随机重复或随机重启。**

随机优化和神经网络更为普遍，但一般情况下也是如此。试试吧。

### 报告不确定性的策略

切勿使用单个数字报告机器学习算法的表现。

如果你这样做，你很可能犯了一个错误。

你已经收集了大量的绩效指标。使用此人口的统计量。

**这种策略称为报告摘要统计。**

结果的分布很可能是高斯分布，因此一个很好的开始是报告表现的均值和标准差。包括观察到的最高和最低表现。

In fact, this is a best practice.

然后，您可以在执行模型选择时比较结果度量的总体。如：

*   在算法之间进行选择。
*   在一种算法的配置之间进行选择。

您可以看到这对您遵循的流程有重要影响。例如：选择在问题上使用哪种算法，以及调整和选择算法超参数。

倾向于统计显着性检验。统计测试可以确定一组结果测量值之间的差异是否与第二组结果显着不同。

同时报告其重要性。

这也是一种最佳实践，遗憾的是没有足够的采用。

## 等等，最终模型选择怎么样？

一旦我们选择了算法和配置，最终模型就是在整个训练数据集上准备的模型。

这是我们打算用于预测或部署到运营中的模型。

我们还得到了具有不同随机数序列的不同最终模型。

我有一些学生问：

> 我应该创建许多最终模型，并在保留验证数据集中选择具有最佳精度的模型。

“_没有_”我回答说。

这将是一个脆弱的过程，高度依赖于所提出的验证数据集的质量。您正在选择针对少量数据样本进行优化的随机数。

**听起来像是过拟合的秘诀。**

总的来说，我会依赖从上述策略中获得的减少和报告不确定性的信心。我经常拿第一个模型，它和其他模型一样好。

有时您的应用程序域会让您更加关心。

在这种情况下，我会告诉你建立一个模型集合，每个模型都使用不同的随机数种子进行训练。

使用简单的投票合奏。每个模型做出预测，并将所有预测的平均值报告为最终预测。

使合奏尽可能大。我认为10,30或100是很好的圆形数字。

也许继续添加新模型，直到预测变得稳定。例如，继续直到预测的方差在某些保持集上收紧。

## 摘要

在这篇文章中，您发现了随机数为应用机器学习不可或缺的原因。你无法逃脱它们。

您了解了可用于确保结果可重复的策略。

您了解了在选择模型和报告结果时可以用来接受机器学习算法的随机性的技术。

有关可重复使用的结果在机器学习和技术中的重要性的更多信息，请参阅帖子：

*   [默认重现机器学习结果](http://machinelearningmastery.com/reproducible-machine-learning-results-by-default/)

您对机器学习中的随机数或此帖有任何疑问吗？

在评论中提出您的问题，我会尽力回答。