机器学习基础:通过NumPy生成随机数与样本采样
编辑在机器学习的任务中,经常需要对某一个集合进行随机采样,而随机采样就需要使用随机数。本节学习的是通过不同的随机分布产生数值或者数组。
产生随机数
使用np.random.randint
生成伪随机整数
np.random
是NumPy
的产生伪随机数的子模块,该模块提供了所有产生伪随机数所需要的所有操作,并将上述操作进行扩展为多维情况。
print(np.random.randint(5))
print(np.random.randint(5))
print(np.random.randint(5, high=6))
random_arr = np.random.randint(-3, high=14,
size=(2, 2))
print(repr(random_arr))
np.random.randint
有许多参数,其中最重要的分别是第一个参数,high
参数以及size
参数。第一个参数在未指定high
参数时为upper end
,即:最大的那一端。需要注意的是,在上述情况下,是不包括upper end
的。举个例子,如果为np.random.randint(n)
,则在[0, n)
之间均匀的选择一个整数。
当指定high
参数时,第一个参数为lower end
,high
指定的数值为upper end
,即:[lower_end, upper_end)
。size
参数指定随机生成的结果数组的大小,如:size=(2,2)
,随机生成一个2行2列的数组。默认情况下,size=1
从给定分布中产生随机数
例如使用np.random.uniform
,默认参数下可以从[0.0, 1.0)
的均匀分布中产生一个随机实数
print(np.random.uniform())
print(np.random.uniform(low=-1.5, high=2.2))
print(repr(np.random.uniform(size=3)))
print(repr(np.random.uniform(low=-3.4, high=5.9,
size=(2, 2))))
如果指定low
和high
,则从[low, high)
内随机产生一个实数。
也可以从np.random.normal
,即:高斯分布下产生一个随机实数。
print(np.random.normal())
print(np.random.normal(loc=1.5, scale=3.5))
print(repr(np.random.normal(loc=-2.4, scale=4.0,
size=(2, 2))))
其中loc
指的是均值,也就是高斯分布中的$\mu$;scale
指的是标准差,也就是高速分布中的$\sigma$。
随机数种子与打乱给定数组
随机数种子
由于伪随机数的产生依赖于随机数种子,因此对于同一个随机数种子,程序在每次运行时产生的都会是相同的结果,因此可以通过np.random.seed
来设置随机数种子。如果把随机数种子比做选择一个骰子的话,那么randint
就相当于掷骰子。
np.random.seed(1)
print(np.random.randint(10))
random_arr = np.random.randint(3, high=100,
size=(2, 2))
print(repr(random_arr))
# New seed
np.random.seed(2)
print(np.random.randint(10))
random_arr = np.random.randint(3, high=100,
size=(2, 2))
print(repr(random_arr))
# Original seed
np.random.seed(1)
print(np.random.randint(10))
random_arr = np.random.randint(3, high=100,
size=(2, 2))
print(repr(random_arr))
打乱指定数组
np.radom.shuffle
通过我们设置的随机数种子,可以将给定数组进行打乱重组。需要注意的是:这个打乱重组是in-place
的,也就是说会直接修改传入的数组;而且,如果我们想要打乱的是多维数组的话,它仅仅打乱第一个维度
vec = np.array([1, 2, 3, 4, 5])
np.random.shuffle(vec)
print(repr(vec))
np.random.shuffle(vec)
print(repr(vec))
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
np.random.shuffle(matrix)
print(repr(matrix))
np.random.shuffle(matrix)
仅仅打乱第一个维度,也就是对[0, 1, 2]
进行打乱,打乱的结果为:
array([[4, 5, 6],
[7, 8, 9],
[1, 2, 3]])
从自定义分布中随机选择样本
NumPy
也提供了方法从自定义的分布中选择随机样本,使用np.random.choice
即可完成上述功能.
colors = ['red', 'blue', 'green']
print(np.random.choice(colors))
print(repr(np.random.choice(colors, size=2)))
print(repr(np.random.choice(colors, size=(2, 2),
p=[0.8, 0.19, 0.01])))
np.random.choice
的第一个参数是总体的集合,size
指定结果数组的大小,而p
参数指定总体集合的各个元素的概率分布。
- 0
-
分享