统计中的过采样

统计中的过采样(oversampling)可能会导致结果向大数据集偏差(bias),需要进行矫正(unbias)才能得到正确地结果。下面用一个例子说明:

我们要统计一个学校某年级平均每个班多少人。

第一个方是从该年级学生中随机选出1/10,问他们自己班级多少人。得到结果如下:
  • 1个人说 自己班级有 10个人 
  • 2个人说 自己班级有 20个人 
  • 3个人说 自己班级有 30个人 
  • 4个人说 自己班级有 40个人 
于是计算 
总人数 = 1*10 + 2*20 + 3*30 + 4*40 = 300
总班级 = 1+2+3+4 = 10
平均每个班多少人 = 总人数 / 总班级数 = 300/10 = 30

第二个方法是去查学籍记录,得知该年级有4个班,人数如下:
  1. 一班 10人
  2. 二班 20人
  3. 三班 30人
  4. 四班 40人
总人数 = 10 + 20 + 30 + 40 = 100 
平均每个班多少人 = 100 / 4 = 25 

像个方法的差异为20% (= (30-25)/25)。 为什么?因为在第一个方法中,大的数据集被过采样了,也就是人数多的班级抽样的人多。解决的方法:把过采样的第一组数据,每个值都除以班级人数,然后归一化(Normalize,使得各个班级出现的可能性之和为 1),然后用pmf (概率质量函数 Probability Mass Function)求平均数。步骤如下:
  1. {10:1, 20:2, 30:3, 40:4} 值除以各个班级人数 => {10:0.1, 20:0.1, 30:0.1, 40:0.1}
  2. 归一化 Normalize, pmf 为{10:25%, 20:25%, 30:25%, 40:25%}
  3. 我们可以发现,第二步得到的 pmf 与第二组数据得到 pmf 是同一个,所以就是10个人的班级,20个人的,30个的,和40个的班级数据相同,所以得到的平均值也就相同
  4. 对于pmf 求平均值比较简单 ∑(key * value) = (10*25% + 20*25% + 30*25% + 40*25%) = 25

这个例子说明了过采样的数据误差和纠正方法。
原文地址:https://www.cnblogs.com/bob-dong/p/14248207.html