python机器学习随机数生成器

随机性是机器学习的重要组成部分。

随机性被用作准备数据和学习算法的工具或特征,这些算法将输入数据映射到输出数据以进行预测。

为了了解机器学习中统计方法的需求,您必须了解机器学习中随机性的来源。机器学习中随机性的来源是一种称为伪随机数生成器的数学技巧。

在本教程中,您将发现伪随机数生成器以及何时控制和控制机器学习中的随机性。

完成本教程后,您将了解:

1.应用机器学习中的随机性来源,重点是算法。

2.什么是伪随机数生成器以及如何在 Python 中使用它们。

3.何时控制随机数序列以及何时控制随机性。

教程概述

本教程分为5部分;他们是:

1.机器学习中的随机性

2.伪随机数生成器

3.何时为随机数生成器播种Seed

4.如何控制随机性

5.常见问题

1.机器学习中的随机性

应用机器学习中有许多随机性来源。

随机性被用作帮助学习算法更加稳健的工具,并最终产生更好的预测和更准确的模型。

数据的随机性

我们从用于训练和评估模型的领域收集的数据样本中有一个随机元素。数据可能有错误或错误。更深入地说,数据包含噪声,可能会模糊输入和输出之间清晰的关系。

评估的随机性

我们无法访问该领域的所有观察结果。我们仅使用一小部分数据样本。因此,我们在评估模型时利用随机性,例如使用 k 折交叉验证在可用数据集的不同子集上拟合和评估模型。

我们这样做是为了了解模型的平均工作情况,而不是针对一组特定的数据。、

算法中的随机性

机器学习算法在从数据样本中学习时使用随机性。

这是一个功能,其中随机性允许算法比不使用随机性时实现更好的数据映射性能。随机性是一种特征,它允许算法尝试避免过度拟合小型训练集并推广到更广泛的问题。

使用随机性的算法通常称为stochastic algorithms而不是random algorithms。这是因为虽然使用了随机性,但所得模型仅限于更窄的范围,例如比如有限的随机性。

机器学习算法中使用随机性的一些明显示例包括:

  • 在随机梯度下降的每个训练周期之前对训练数据进行改组。

  • 在随机森林算法中为吐出点选择的输入特征的随机子集。https://machinelearningmastery.com/random-forest-ensemble-in-python/

  • 人工神经网络中的随机初始权重。

我们可以看到,既有我们必须控制的随机性来源,例如数据中的噪声,也有我们可以控制的随机性来源,例如算法评估和算法本身。

接下来,让我们看看我们在算法和程序中使用的随机性来源。

2.伪随机数生成器

我们注入程序和算法中的随机性来源是一种称为伪随机数生成器的数学技巧。

随机数生成器是一个从真正的随机源生成随机数的系统。通常是物理的东西,例如盖革Geiger 计数器,其结果被转换为随机数。

我们在机器学习中不需要真正的随机性。相反,我们可以使用伪随机性。伪随机性是看起来接近随机的数字样本,但却是使用确定性过程生成的。

使用伪随机数生成器对数据进行混洗并用随机值初始化系数。这些小程序通常是一个可以调用的函数,它会返回一个随机数。再次调用,他们将返回一个新的随机数。包装函数通常也可用,允许您以整数、浮点、特定分布、特定范围等形式获取随机性。

这些数字是按顺序生成的。该序列是确定性的,并以初始数字作为种子。如果您没有明确为伪随机数生成器设置种子,则它可能会使用当前系统时间(以秒或毫秒为单位)作为种子。

种子的价值并不重要。选择您想要的任何内容。重要的是,相同的过程播种将产生相同的随机数序列。

让我们用一些例子来具体说明这一点。

Python 中的伪随机数生成器

Python 标准库提供了一个名为 random 的模块,它提供了一套用于生成随机数的函数。

Python 使用一种流行且强大的伪随机数生成器,称为 Mersenne Twister。

伪随机数生成器可以通过调用 random.seed() 函数来播种。可以通过调用 random.random() 函数生成 0 到 1 之间的随机浮点值。

下面的示例为伪随机数生成器播种,生成一些随机数,然后重新播种以证明生成了相同的数字序列。

#demonstrates the python pseudo-random number generator
from random import seed
from random import random
# seed the generator
seed(7)
for _ in range(5):
    print(random())
#seed the generator to get the same sequence
print('Reseeded')
seed(7)
for _ in range(5):
    print(random())
0.32383276483316237
0.15084917392450192
0.6509344730398537
0.07243628666754276
0.5358820043066892
Reseeded
0.32383276483316237
0.15084917392450192
0.6509344730398537
0.07243628666754276
0.5358820043066892

NumPy 中的伪随机数生成器

在机器学习中,您可能会使用 scikit-learn 和 Keras 等库。

这些库在幕后利用了 NumPy,该库可以非常高效地处理数字向量和矩阵。

NumPy 也有自己的伪随机数生成器和方便的包装函数的实现。

NumPy 还实现了 Mersenne Twister 伪随机数生成器。重要的是,为 Python 伪随机数生成器播种不会影响 NumPy 伪随机数生成器。它必须单独播种和使用。

下面的示例为伪随机数生成器提供种子,生成五个随机浮点值的数组,再次为生成器提供种子,并演示生成相同的随机数序列。

#demonstrates the numpy pseudo-random number generator
from numpy.random import seed
from numpy.random import rand
#seed the generator
seed(7)
print(rand(5))
print('Reseeded')
seed(7)
print(rand(5))

[0.07630829 0.77991879 0.43840923 0.72346518 0.97798951]
Reseeded
[0.07630829 0.77991879 0.43840923 0.72346518 0.97798951]

3.何时为随机数生成器播种

在预测建模项目中,有时您应该考虑播种随机数生成器。

**数据准备。**数据准备可以使用随机性,例如数据的混洗或值的选择。数据准备必须一致,以便在拟合、评估以及使用最终模型进行预测时始终以相同的方式准备数据。

**数据分割。**数据的分割(例如训练/测试分割或 k 折交叉验证)必须保持一致。这是为了确保每个算法在相同的数据子样本上以相同的方式进行训练和评估。

您可能希望在每个任务之前或在执行批量任务之前为伪随机数生成器播种一次。一般来说,哪个并不重要。

有时您可能希望算法表现一致,可能是因为它每次都使用完全相同的数据进行训练。如果该算法用于生产环境,则可能会发生这种情况。如果您在教程环境中演示算法,也可能会发生这种情况。

在这种情况下,在拟合算法之前初始化种子可能是有意义的。

4.如何控制随机性

随机机器学习算法每次在相同的数据上运行时,其学习效果都会略有不同。

这将导致模型每次训练时的性能略有不同。

如前所述,我们可以每次使用相同的随机数序列来拟合模型。在评估模型时,这是一种不好的做法,因为它隐藏了模型中固有的不确定性。

更好的方法是以报告的性能包括算法性能中测量的不确定性的方式来评估算法。

我们可以通过使用不同的随机数序列多次重复算法的评估来做到这一点。伪随机数生成器可以在评估开始时播种一次,或者可以在每次评估开始时使用不同的种子播种。

这里需要考虑两个方面的不确定性:

**数据不确定性:**根据数据的多个分割评估算法将深入了解算法性能如何随着训练和测试数据的变化而变化。

**算法不确定性:**在相同的数据分割上多次评估算法将深入了解算法性能如何单独变化。

一般来说,我建议对这两种不确定性来源进行综合报告。这是算法在每次评估运行时适合数据的不同分割并具有新的随机性序列的地方。评估过程可以在开始时为随机数生成器播种一次,并且该过程可以重复大约 30 次或更多次,以给出可以总结的性能分数群体。

5.常见问题

我可以预测随机数吗?

即使使用深度神经网络,您也无法预测随机数序列。

真正的随机数会带来更好的结果吗?

最终的模型会怎样?

最终模型是根据可用于进行预测的所有可用训练数据进行训练的所选算法和配置。该模型的性能将落在评估模型的方差之内。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值