抽样方法概览
在构建机器学习训练数据时,常用的随机抽样方法包括以下几种:
1. 简单随机抽样(Simple Random Sampling)
定义:让总体中的所有样本具有相等的被选中概率。
- 示例:从总体随机抽取 10% 的样本,则每个样本都有 10% 的概率被选中。
- 优点:实现简单。
-
缺点:
- 稀有类别容易遗漏。
- 例如:某类别只占总体的 0.01%,如果随机采样 1%,几乎不会采到该类别——训练时模型会“以为”它不存在。
- 稀有类别容易遗漏。
2. 分层抽样(Stratified Sampling)
定义:先将总体按感兴趣的类别划分为若干“层”(strata),再分别从每层抽样。
-
示例:总体分为 A、B 两类,想抽取 1% 的数据,则从 A 抽取 1%,从 B 抽取 1%。
如此即使某类别非常稀有,也能保证其样本被包含。 - 优点:可保证每个类别都有代表性。
-
缺点:
- 并非所有任务都能分层。
- 多标签任务中,一个样本可能同时属于多个层,分组困难。
3. 加权抽样(Weighted Sampling)
定义:为每个样本分配一个权重,抽样时按权重决定被选中概率。
- 示例:样本 A、B、C 权重分别为 0.5、0.3、0.2 → 被选中概率为 50%、30%、20%。
-
用途:
- 引入领域知识(如“近期数据更重要”)
- 校正数据分布偏差(如红样本占 25%、蓝样本占 75%,但真实世界各占 50% → 将红样本权重设为蓝样本的 3 倍)
-
Python 示例:
import random # 从 [1,2,3,4,100,1000] 中抽 2 个元素, # 其中 1~4 各 20% 概率,100 和 1000 各 10% 概率 random.choices( population=[1, 2, 3, 4, 100, 1000], weights=[0.2, 0.2, 0.2, 0.2, 0.1, 0.1], k=2 )
重要性抽样(Importance Sampling)
定义:当无法直接从目标分布 (P(x)) 抽样时,可从一个易采样的分布 (Q(x))(提议分布)抽样,并对样本赋予权重
-
应用示例:
- 策略型强化学习:新策略与旧策略相近时,可用旧策略采样并按权重校正,估计新策略的期望回报。
水库抽样(Reservoir Sampling)
定义:对一个未知总量且不断到达的“流”中,实时维护一个大小为 (k) 的“水库”,确保随时终止时,水库内的每个样本都具有等概率被选中。
算法步骤
-
初始化:将流中前 (k) 个元素直接放入水库(数组
reservoir[0..k-1]
)。 - 对于第 (n)(从 (k+1) 开始)个到达的元素:
- 随机生成整数 (i\in [1, n])。
- 如果 (i \le k),则用新元素替换
reservoir[i-1]
;否则,忽略它。
性质:每个第 (n) 个元素有 (\tfrac{k}{n}) 的概率留在水库中。无论何时停止算法,水库内所有元素都等概率采样。