最强总结!Numpy十大随机数生成方法 !!

文摘   2024-10-18 11:26   北京  

Numpy十大随机数生成方法

哈喽,我是小白~

今儿和大家接着之前的Numpy的内容,分享Numpy随机数生成方法

在机器学习实验中,Numpy 的随机数生成方法对于模型参数初始化数据集的随机拆分(如训练集和测试集)、以及数据打乱和采样至关重要。正确使用随机数生成可以确保实验结果的稳定性和可复现性。同时,它还能帮助模拟现实中的不确定性,提升模型的泛化能力。

Numpy 提供了丰富的随机数生成方法,这些方法在机器学习、数据科学和其他领域中非常有用。

  • numpy.random.rand()
  • numpy.random.randn()
  • numpy.random.randint()
  • numpy.random.choice()
  • numpy.random.random()
  • numpy.random.uniform()
  • numpy.random.seed()
  • numpy.random.permutation()
  • numpy.random.normal()
  • numpy.random.beta()

下面,咱们从主要功能、操作语法以及案例详细和大家聊聊~

往期 Numpy 合集

Numpy 十大基础操作 

Numpy 十大高级操作 

NumPy 十大矩阵运算 

NumPy 十大数组操作 

Numpy 十大统计函数 

1. numpy.random.rand()

功能

rand() 函数用于生成一个在 [0, 1) 区间上均匀分布的随机浮点数矩阵。可以指定生成矩阵的形状。

Python 实现

import numpy as np

# 生成一个 2x3 的矩阵,包含在 [0, 1) 范围内的随机浮点数
random_matrix = np.random.rand(23)
print(random_matrix)

输出示例

[[0.71339189 0.95231593 0.32428712]
 [0.8471983  0.29141687 0.5569511 ]]

应用场景

这种生成均匀分布随机数的方式经常用于神经网络中初始化权重、数据归一化时的采样等。


2. numpy.random.randn()

功能

randn() 函数生成一个服从标准正态分布(均值为 0,标准差为 1)的随机浮点数矩阵。它与 rand() 不同的是,生成的数值可以为负。

Python 实现

# 生成一个 3x2 的矩阵,包含服从标准正态分布的随机浮点数
random_normal_matrix = np.random.randn(32)
print(random_normal_matrix)

输出示例

[[ 0.9024855   0.23328858]
 [-0.89276454  1.67551989]
 [-0.20789834  0.23451293]]

应用场景

常用于生成噪声数据或模拟具有标准正态分布的数据,用于机器学习算法的输入、仿真数据等。


3. numpy.random.randint()

功能

randint() 用于生成范围内的随机整数。可以指定下限、上限以及生成的整数数量。

Python 实现

# 生成 5 个在 [0, 10) 区间的随机整数
random_integers = np.random.randint(0105)
print(random_integers)

输出示例

[7 2 4 1 6]

应用场景

适合用于生成分类问题的标签、打乱数据集时的随机索引、模拟离散数据等。


4. numpy.random.choice()

功能

choice() 从给定的一维数组或列表中随机选择元素。可以指定是否替换选择,选择的大小等。

Python 实现

# 从数组中随机选择 3 个元素
array = np.array([12345])
random_choices = np.random.choice(array, 3, replace=False)
print(random_choices)

输出示例

[3 1 4]

应用场景

主要用于随机抽样、数据集划分(如划分训练集和测试集)、随机生成排列等。


5. numpy.random.random()

功能

random() 与 rand() 类似,生成一个或多个在 [0, 1) 之间的随机浮点数,但没有直接支持多维数组的语法。

Python 实现

# 生成一个在 [0, 1) 之间的随机数
random_number = np.random.random()
print(random_number)

输出示例

0.623462897412345

应用场景

可以生成随机数作为概率值,或用于归一化任务中的采样。


6. numpy.random.uniform()

功能

uniform() 生成均匀分布的随机数,允许用户指定上下界,生成的数据在给定范围内。

Python 实现

# 生成一个在 [5, 10) 之间均匀分布的随机数
uniform_random = np.random.uniform(5104)
print(uniform_random)

输出示例

[5.93519778 8.40129512 9.23767563 7.51273589]

应用场景

可以用于生成区间内均匀分布的数据,适合蒙特卡洛模拟或参数初始化。


7. numpy.random.seed()

功能

seed() 用于设置随机数生成器的种子。固定种子可以保证每次运行的随机数序列相同。

Python 实现

# 设置随机数生成器的种子
np.random.seed(42)
print(np.random.rand(3))

输出示例

[0.37454012 0.95071431 0.73199394]

应用场景

在机器学习实验中,固定随机数种子可使实验具有可复现性。


8. numpy.random.permutation()

功能

permutation() 用于随机排列数组中的元素。对于整数,返回从 0 到 n-1 的随机排列。

Python 实现

# 对数组进行随机排列
array = np.array([12345])
random_permutation = np.random.permutation(array)
print(random_permutation)

输出示例

[3 1 4 2 5]

应用场景

数据打乱、交叉验证中数据集的随机划分等。


9. numpy.random.normal()

功能

normal() 生成服从正态分布的随机数,允许指定均值和标准差。

Python 实现

# 生成 5 个均值为 0、标准差为 1 的正态分布随机数
normal_random = np.random.normal(015)
print(normal_random)

输出示例

[-0.76149467  0.45638569 -1.10633497  1.12392399 -0.45608336]

应用场景

用于模拟自然现象,生成具有指定分布的数据,如误差、测量噪声等。


10. numpy.random.beta()

功能

beta() 生成 Beta 分布的随机数,常用于贝叶斯统计中。Beta 分布是定义在 [0, 1] 上的概率分布,由两个形状参数 alpha 和 beta 控制。

Python 实现

# 生成服从 Beta 分布的随机数,α=2, β=5
beta_random = np.random.beta(253)
print(beta_random)

输出示例

[0.17472959 0.30423646 0.17062353]

应用场景

常用于贝叶斯推理、参数估计,以及某些强化学习算法中。

有了详细的随机数生成方式的介绍,下面全面的分享一个相关案例,大家有更加深入的理解~

完整案例

案例名称:分析不同分布的随机数生成及其在数据分析中的应用

在这个案例中,我们将:

  1. 生成服从 正态分布均匀分布 和 Beta 分布 的随机数。
  2. 计算每种分布的统计属性(如均值、标准差等)。
  3. 通过图形展示这些数据集的分布情况,以及它们的累积分布函数(CDF)。

我们绘制以下图形:

  1. 直方图:展示不同随机分布的数据分布情况。
  2. 累积分布函数(CDF):展示不同分布的累计概率随数据的变化。

Python代码

import numpy as np
import matplotlib.pyplot as plt

# 设置随机数种子以确保结果可复现
np.random.seed(42)

# 生成虚拟数据集
# 正态分布(均值0,标准差1)
normal_data = np.random.normal(011000)

# 均匀分布(范围 [0, 1))
uniform_data = np.random.uniform(011000)

# Beta 分布(alpha=2, beta=5)
beta_data = np.random.beta(251000)

# 统计属性
normal_mean, normal_std = np.mean(normal_data), np.std(normal_data)
uniform_mean, uniform_std = np.mean(uniform_data), np.std(uniform_data)
beta_mean, beta_std = np.mean(beta_data), np.std(beta_data)

# 打印统计信息
print(f"Normal distribution -> Mean: {normal_mean:.2f}, Std: {normal_std:.2f}")
print(f"Uniform distribution -> Mean: {uniform_mean:.2f}, Std: {uniform_std:.2f}")
print(f"Beta distribution -> Mean: {beta_mean:.2f}, Std: {beta_std:.2f}")

# 图形设置
fig, ax = plt.subplots(21, figsize=(108))
fig.suptitle('Random Number Distributions and Cumulative Distribution Functions', fontsize=16)

# 绘制直方图
bins = 30  # 直方图的箱数
ax[0].hist(normal_data, bins=bins, alpha=0.6, color='red', label='Normal Distribution')
ax[0].hist(uniform_data, bins=bins, alpha=0.6, color='blue', label='Uniform Distribution')
ax[0].hist(beta_data, bins=bins, alpha=0.6, color='green', label='Beta Distribution')

ax[0].set_title('Histogram of Different Distributions')
ax[0].set_xlabel('Value')
ax[0].set_ylabel('Frequency')
ax[0].legend()

# 绘制累积分布函数 (CDF)
# 计算每种分布的累积分布函数
normal_data_sorted = np.sort(normal_data)
uniform_data_sorted = np.sort(uniform_data)
beta_data_sorted = np.sort(beta_data)
normal_cdf = np.arange(1, len(normal_data_sorted) + 1) / len(normal_data_sorted)
uniform_cdf = np.arange(1, len(uniform_data_sorted) + 1) / len(uniform_data_sorted)
beta_cdf = np.arange(1, len(beta_data_sorted) + 1) / len(beta_data_sorted)

# 绘制 CDF 曲线
ax[1].plot(normal_data_sorted, normal_cdf, color='red', label='Normal Distribution', linewidth=2)
ax[1].plot(uniform_data_sorted, uniform_cdf, color='blue', label='Uniform Distribution', linewidth=2)
ax[1].plot(beta_data_sorted, beta_cdf, color='green', label='Beta Distribution', linewidth=2)

ax[1].set_title('Cumulative Distribution Function (CDF)')
ax[1].set_xlabel('Value')
ax[1].set_ylabel('Cumulative Probability')
ax[1].legend()

# 显示图形
plt.tight_layout(rect=[0010.95])
plt.show()
  1. 随机数生成:使用 np.random.normal() 生成正态分布数据,np.random.uniform() 生成均匀分布数据,np.random.beta() 生成 Beta 分布数据。
  2. 统计属性计算:对生成的数据集计算均值和标准差。
  3. 数据可视化

直方图 展示每个数据集的分布情况,比较不同分布的特点。

累积分布函数 (CDF) 展示随机变量小于或等于某个值的概率累积曲线,直观显示不同分布的特征。

1. 直方图:显示了每种分布中数值出现的频率,帮助我们理解不同分布的形状。

  • 红色表示 正态分布,数据集中在 0 附近,符合标准正态分布的钟形曲线。

  • 蓝色表示 均匀分布,数据在 [0, 1) 区间内均匀分布。

  • 绿色表示 Beta 分布,数据更集中在 0 附近且呈偏态分布。

2. 累积分布函数 (CDF):可以帮助直观地看到不同分布中数值累积的概率变化,提供更多关于数据分布的信息。

  • 正态分布的 CDF 呈现平滑的 S 型曲线。

  • 均匀分布的 CDF 为线性递增,因为每个数据值的出现概率相同。

  • Beta 分布的 CDF 在 0 附近快速上升,表明 Beta 分布中的小值比例较高。

 

往期 Numpy 合集

Numpy 十大基础操作 

Numpy 十大高级操作 

NumPy 十大矩阵运算 

NumPy 十大数组操作 

Numpy 十大统计函数 

最后

以上就是今天所有的内容了。
如果对你来说比较有用,记得点赞、收藏,慢慢学习~
下期会有更多干货等着你!~
最近,我们整理了机器学习算法册子,总共16大块的内容,124个问题的总结
点击领取

Python和机器学习初学者
Python和机器学习分享,只写干货,一起学习~
 最新文章