机器学习入门系列②|如何在Python中生成随机数
从人工神经网络中权重的随机初始化,到将数据分成随机训练集和测试集,再到随机梯度下降中训练数据集的随机混洗,生成随机数和利用随机性是一项必备技能。
本文讲解了如何在 Python 中生成和使用随机数。完成本教程后,你能够了解:
这种随机性可以通过使用伪随机数生成器应用于程序中。
如何通过Python标准库生成随机数和使用随机性。
如何通过NumPy库生成随机数数组。
大家先来看下本教程的目录:
1.伪随机数发生器
2.Python 标准库中的随机数
种子随机数生成器
随机浮点值
随机整数值
随机高斯值
从列表中随机选择
列表中的随机子样本
随机打乱列表
3.使用NumPy处理随机数
种子随机数生成器
随机浮点值数组
随机整数值数组
随机高斯值数组
随机排列NumPy数组
以后自己敲代码用到这个知识点的时候,按着这个学习思路回忆一遍整个知识点,加强记忆,能够培养代码思维能力。
1. 伪随机数发生器
我们注入程序和算法的随机性来源是一种称为伪随机数生成器的数学技巧。
随机数生成器是一种从真正的随机源生成随机数的系统。通常是物理的东西,比如盖革计数器,结果会变成随机数。我们在机器学习中不需要真正的随机性。相反,我们可以使用伪随机性。伪随机性是一个看起来接近随机的数字样本,但它是使用确定性过程生成的。
混洗数据和用随机值初始化系数使用伪随机数生成器。这些小程序通常是一个可以调用的函数,它会返回一个随机数。再次调用,他们将返回一个新的随机数。包装函数通常也可用,并允许你将随机性作为整数、浮点数、特定分布内、特定范围内等。
数字是按顺序生成的。该序列是确定性的,并以初始数字作为种子。如果你没有明确地为伪随机数生成器设置种子(seed),那么它可能会使用以秒或毫秒为单位的当前系统时间作为种子(seed)。
种子的价值并不重要。选择任何你想要的。重要的是该过程的相同种子将导致相同的随机数序列。
2. Python 标准库中的随机数
Python标准库提供了一个名为random的模块,该模块提供了一套用于生成随机数的函数。
Python使用一种流行且强大的伪随机数生成器,称为Mersenne Twister。
在本节中,我们将查看一些使用标准Python API生成和使用随机数和随机性的用例。
种子随机数生成器
伪随机数生成器是一个数学函数,它生成一个几乎随机数的序列。
它需要一个参数来启动序列,称为种子。该函数是确定性的,这意味着给定相同的种子,它每次都会产生相同的数字序列。种子的选择并不重要。
seed()函数将播种的伪随机数发生器,以整数值作为参数,如1或7。如果seed()函数之前没有使用随机性调用时,默认是使用当前系统时间中从epoch (1970) 开始的毫秒数。
下面的示例演示了为伪随机数生成器设置种子,生成一些随机数,并显示为生成器重新设置种子将导致生成相同的数字序列。
运行示例为伪随机数生成器设置值为1的种子,生成3个随机数,重新设置生成器的种子,并显示生成了相同的三个随机数。
通过设置种子来确保你的代码每次产生相同的结果来控制随机性非常有用,例如在生产模型中。
对于使用随机化来控制混杂变量的运行实验,可以为每个实验运行使用不同的种子。
随机浮点值
可以使用random()函数生成随机浮点值。值将在0和1之间的范围内生成,特别是在区间 [0,1] 中。
值是从均匀分布中抽取的,这意味着每个值被抽取的机会均等。
下面的示例生成10个随机浮点值。
运行示例生成并打印每个随机浮点值。
通过将浮点值乘以新范围的大小并添加最小值,可以将浮点值重新缩放到所需范围,如下所示:
其中min和max分别是所需范围的最小值和最大值,value是在0和1之间的范围内随机生成的浮点值。
随机整数值
可以使用randint()函数生成随机整数值。
此函数采用两个参数:生成的整数值范围的开始和结束。随机整数是在范围值的开始和结束之内生成的,特别是在区间 [start, end] 中。随机值取自均匀分布。
下面的示例生成0到10之间的10个随机整数值。
运行示例生成并打印10个随机整数值。
随机高斯值
可以使用gauss()函数从高斯分布中提取随机浮点值。
该函数采用两个参数,分别对应于控制分布大小的参数,特别是均值和标准差。
下面的示例从均值为0.0且标准差为1.0的高斯分布中生成10个随机值。
请注意,这些参数不是值的界限,值的分布将由分布的钟形控制,在这种情况下,按比例可能高于和低于0.0。
运行示例生成并打印10个高斯随机值。
从列表中随机选择
随机数可用于从列表中随机选择一个项目。
例如,如果一个列表有10个索引在0到9之间的项目,那么你可以生成一个0到9之间的随机整数,并使用它从列表中随机选择一个项目。该choice()函数实现这种行为。以统一的可能性进行选择。
下面的示例生成一个包含20个整数的列表,并给出了从列表中随机选择一项的五个示例。
运行该示例首先打印整数值列表,然后是从列表中选择和打印随机值的五个示例。
列表中的随机子样本
我们可能对重复从列表中随机选择项目以创建随机选择的子集感兴趣。
重要的是,一旦从列表中选择了一个项目并将其添加到子集中,就不应再次添加。这称为无替换选择,因为一旦从列表中为子集选择了一个项目,它就不会被添加回原始列表(即不能用于重新选择)。
此行为在sample()函数中提供,该函数从列表中随机选择一个样本而无需替换。该函数将列表和子集的大小作为参数进行选择。请注意,项目实际上并未从原始列表中删除,只是选择到列表的副本中。
下面的示例演示从20个整数列表中选择五个项目的子集。
运行该示例首先打印整数值列表,然后选择并打印随机样本进行比较。
随机打乱列表
随机性可用于洗牌项目列表,例如shuffling。
该shuffle()函数可用于洗牌的列表。shuffle就地执行,这意味着作为参数提供给shuffle()函数的列表被打乱,而不是被创建和返回的列表的打乱副本。
下面的示例演示了随机打乱整数值列表。
运行该示例首先打印整数列表,然后在随机打乱后打印相同的列表。
3. NumPy的随机数
在机器学习中,你可能会使用scikit-learn和Keras等库。
这些库在幕后使用了NumPy,该库可以非常高效地处理数字的向量和矩阵。
NumPy也有自己的伪随机数生成器和便利包装函数的实现。
NumPy还实现了Mersenne Twister伪随机数生成器。
让我们看几个生成随机数和将随机性与NumPy数组结合使用的示例。
种子随机数生成器
NumPy伪随机数生成器不同于Python标准库伪随机数生成器。
重要的是,在Python伪随机数生成器中添加种子不会影响NumPy伪随机数生成器。它必须单独播种和使用。
seed()函数可以被用于接种的NumPy的伪随机数发生器,将整数作为seed值。
下面的示例演示了如何为生成器设置seed以及为生成器重新设置seed将如何导致生成相同的随机数序列。
运行示例为伪随机数生成器提供种子,打印随机数序列,然后为生成器重新设置种子,显示生成的随机数序列完全相同。
随机浮点值数组
可以使用rand()NumPy函数生成随机浮点值数组。
如果未提供参数,则创建单个随机值,否则可以指定数组的大小。
下面的示例创建了一个从均匀分布中提取的10个随机浮点值的数组。
运行该示例会生成并打印随机浮点值的NumPy数组。
随机整数值数组
可以使用randint() NumPy函数生成随机整数数组。
此函数接受三个参数,范围的下限、范围的上限以及要生成的整数值的数量或数组的大小。随机整数将从包括较低值和不包括较高值的均匀分布中抽取,例如在区间 [lower, upper) 中。
下面的示例演示了生成随机整数数组。
运行该示例会生成并打印一个由0到10之间的20个随机整数值组成的数组。
随机高斯值数组
可以使用randn()NumPy函数生成随机高斯值数组。
此函数采用单个参数来指定结果数组的大小。高斯值取自标准高斯分布;这是一个均值为 0.0 且标准差为 1.0 的分布。
下面的示例显示了如何生成随机高斯值数组。
运行示例生成并打印来自标准高斯分布的 10 个随机值数组。
来自标准高斯分布的值可以通过将值乘以标准偏差并添加来自所需缩放分布的平均值来缩放。例如:
其中mean and stdev是用于期望缩放高斯分布的均值和标准差和值是从一个标准高斯分布的随机生成值。
随机排列NumPy数组
NumPy数组可以使用shuffle() NumPy函数就地随机打乱。
下面的示例演示了如何打乱NumPy数组。
运行该示例首先生成一个包含20个整数值的列表,然后打乱并打印打乱后的数组。
如有部分翻译问题请多担待咩哈哈哈哈!
原文链接:
https://machinelearningmastery.com/how-to-generate-random-numbers-in-python/
本篇文章又很多交叉的知识,有问题可以去差一些资料学习除本篇文章讲解之外的知识点。如果你有什么问题就在公众号后台给学姐留言吧!
