1、什么是数据分布(Data Distribution)?
数据分布 指的是:
一组数据中,所有可能取值以及每个取值出现频率或概率的描述方式。
在统计学、数据分析和机器学习中,数据分布非常重要,因为它可以帮助我们理解:
- 哪些值更容易出现
- 哪些值较少出现
- 数据整体是否均衡
- 样本是否符合预期规律
例如,一组数据只可能取值 3、5、7、9,它们出现的概率分别是:
3→ 0.15→ 0.37→ 0.69→ 0.0
那么这组数据就服从一个离散概率分布。
2、什么是随机分布?
随机分布 是指:
随机生成的数据并不是“完全平均”出现,而是按照某种概率规则出现。
例如:
- 有些值出现概率高
- 有些值出现概率低
- 有些值甚至永远不会出现
对于离散数据,通常使用 概率分布 来描述每个值出现的可能性。
NumPy 可以通过 random.choice() 方法,根据给定概率生成符合分布要求的随机数。
3、使用 random.choice() 按概率生成随机数
choice() 方法可以从一个给定数组中随机选取元素。
基本语法
random.choice(a, size=None, replace=True, p=None)参数说明:
a:待选值的数组或列表size:返回结果的形状replace:是否允许重复抽样,默认Truep:每个元素对应的概率
4、使用 p 参数指定概率分布
通过 p 参数,可以指定每个值被选中的概率。
示例:生成符合指定分布的一维数组
from numpy import random
x=random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=100)
print(x)这段代码表示:
- 生成一个长度为 100 的一维数组
-
数组元素只能是
3、5、7、9 -
各值出现的概率分别为:
3→ 10%5→ 30%7→ 60%9→ 0%
5、概率之和必须等于 1
在 p 参数中,所有概率值之和必须等于 1。
例如:
p=[0.1, 0.3, 0.6, 0.0]其总和为:
0.1+0.3+0.6+0.0=1.0
如果概率和不等于 1,NumPy 会报错。
6、概率为 0 的值不会出现
在上面的例子中,9 的概率被设置为 0.0,因此它不会被选中。
from numpy import random
x=random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=100)
print(x)理论上,无论运行多少次,结果中都不会出现 9。
7、抽样结果不一定完全等于理论比例
需要注意的是:
概率描述的是“长期趋势”,并不保证每次抽样结果都严格按比例分布。
例如:
-
理论上
3的概率是 10% -
如果只生成 10 个数,可能一个
3都没有 - 如果生成 10 万个数,结果会更接近 10%
也就是说:
- 样本越小,波动越大
- 样本越大,越接近理论概率
8、生成二维数组
通过 size 参数,还可以生成任意形状的数组。
示例:生成二维数组
from numpy import random
x=random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(3, 5))
print(x)说明:
-
返回一个
3 × 5的二维数组 -
每个元素仍然来自
[3, 5, 7, 9] - 并且遵循给定概率分布
9、replace 参数补充说明
choice() 默认参数:
replace=True表示:
允许重复抽取同一个值
这也是最常见的情况,特别适合模拟“按分布随机生成数据”。
示例:
from numpy import random
x=random.choice([1, 2, 3], size=10, replace=True)
print(x)如果设置:
replace=False则表示不允许重复抽样。
⚠️ 这时抽样数量不能超过原数组长度,否则会报错。
10、完整示例
from numpy import random
# 按指定概率生成 20 个随机数
x=random.choice(
[3, 5, 7, 9],
p=[0.1, 0.3, 0.6, 0.0],
size=20
)
print(x)