0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Data Sampling

Posted at

抽样方法概览

在构建机器学习训练数据时,常用的随机抽样方法包括以下几种:


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) 的“水库”,确保随时终止时,水库内的每个样本都具有等概率被选中。

算法步骤

  1. 初始化:将流中前 (k) 个元素直接放入水库(数组 reservoir[0..k-1])。
  2. 对于第 (n)(从 (k+1) 开始)个到达的元素:
    1. 随机生成整数 (i\in [1, n])。
    2. 如果 (i \le k),则用新元素替换 reservoir[i-1];否则,忽略它。

性质:每个第 (n) 个元素有 (\tfrac{k}{n}) 的概率留在水库中。无论何时停止算法,水库内所有元素都等概率采样。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?