-
引入
在机器学习中,模型是通过计算数据进行训练的,根据上一篇文章(《机器学习-评价指标》)中列举的例子:
在CTR预估中,一个模型负责预测用户是否点击一个服务器的广告。其实在真实场景中,展示几千次广告才有可能获得一个点击(还有可能是误点),广告点击率非常低。倘若这个模型将所有样本都预测为不点击,那么它的准确度可以达到99.99%,但是这样的模型却没有任何意义。
这个例子中点击广告的样本数据很少,假设喂给模型的数据有10W条,但其中只有100条数据的标签是点击,所以我们才无法使用accuracy而采用ROC曲线。
而这篇文章的内容将介绍如何应对样本不均衡的情况,以及数据不足时的处理办法。
-
样本不均衡
样本不均衡,顾名思义,是指数据中正负样本比例不平衡。
例如:
10000个学生样本,
其中负样本为:100个得了感冒的学生。
剩下的为正样本:9900个健康的学生。这种情况下进行学习,虽然学习了10000条数据,虽然诊断的人数很多,但实际上带有感冒特征的病人很少,很难涵盖大多数感冒的特征。当有新的感冒患者来诊断时,因为模型“阅历”不够,所以可能无法做出正确诊断。
目前解决办法包括但不限于:
-
降采样
既然是解决不均衡的问题,那么我们的目的就是缩小正负样本比例差。
降采样的思维是:
减少数据量大的健康样本。
在此感冒的例子中,则从9900个健康样本随机选出990个样本。
此时数据集的组成为:健康样本:990,感冒样本:100
此时正负样本的比例变为了 10:1,是可以接受的。
(1) 优点
i. 可能消除一定的噪声数据。大量的的数据中难免会有噪声数据,使用降采样可能将他们从数据集中剔除。
(2) 缺点
i. 样本量较小,可能会丢失部分具有代表性的样本,学习的精度可能下降。
-
倍采样
倍采样与降采样思想相似,它是通过
对数据量小的感冒样本进行重复采样。
在此感冒的例子中,则对100个感冒样本随机进行10次重采样。
此时数据集的组成为:健康样本:9900,感冒样本:1000
此时正负样本的比例同样变为了 10:1,是可以接受的。
(1) 优点
i. 样本量较大,学习的效果可能不错。
(2) 缺点
i. 可能将感冒样本中少量的噪声数据进行重复采样,影响学习效果;
ii. 每个感冒的数据可能重复的次数不同,影响学习。(不过也可以同比例采集) -
混合采样
混合采样就是结合2. 与3. 两种方法进行折中采样。
即,从9900的健康样本中随机选出 1 10 \frac{1}{10} 101 的数据,得到990个样本,将100个感冒样本进行10倍的重复采样,得到1000个样本。
此时数据集的组成为:健康样本:990,感冒样本:1000
此时正负样本的比例变为了 1:1 。
-
代价敏感学习
此方法与权值相关。
降低多数的健康样本的权值,减小样本对学习的影响;
提高多数的感冒样本的权值,增大样本对学习的影响。例:
此时有5个样本。
其中4个(1-4)为健康,
1个(5)为患病。普通情况下:
x 1 2 3 4 5 w 1 1 1 1 1 此时,每个样本的权重 w 都为 1,若简单构建一个损失函数,如果预测错误,每个样本对损失函数的贡献为 w·1,预测正确,每个样本对损失函数贡献为 w·0. 则:
此时若(1-4)个样本预测正确,第5个预测错误,则损失函数值为:
L ( x ) = 1 ∗ 0 + 1 ∗ 0 + 1 ∗ 0 + 1 ∗ 0 + 1 ∗ 1 L(x) = 1*0+ 1*0+ 1*0+ 1*0+ 1*1 L(x)=1∗0+1∗0+1∗0+1∗0+1∗1
L ( x ) = 1 L(x) = 1 L(x)=1若根据代价敏感学习:
x 1 2 3 4 5 w 1 1 1 1 4 此时若(1-4)个样本预测正确,第5个预测错误,则损失函数值为:
L ( x ) = 1 ∗ 0 + 1 ∗ 0 + 1 ∗ 0 + 1 ∗ 0 + 4 ∗ 1 L(x) = 1*0+ 1*0+ 1*0+ 1*0+ 4*1 L(x)=1∗0+1∗0+1∗0+1∗0+4∗1
L ( x ) = 4 L(x) = 4 L(x)=4机器学习训练的驱动力是使损失函数的值尽量小(即预测结果与真实标签相差最小),所以当损失函数大时,如果欲达到相同的损失值,第二种情况的代价敏感学习会进行更多的训练。
此时虽然只有一个感冒样本,但它使损失函数值变大,促使模型进行更多的训练,从某种角度来说,1个样本起到了4个样本的作用。
这便是修改权值的作用。
-
-
样本不足
样本不足容易引起欠拟合状态,即学习资料很少,所以学习效果不好。
对于样本不足的情况没有太好的解决办法:-
去搜集更多的数据(废话)
-
模拟数据
-
(1) 对于少数的感冒数据,可在所有样本各特征区间内随机取点构成一条数据。
例:
在所有感冒的数据中,
特征:体温的值域为 [36.9,39],单位℃
特征:已发烧时长的值域为 [1,3],单位小时模拟数据:
选取体温 37.5∈ [36.9,39]
已发烧时长 2 ∈ [1,3]则构成一条数据 [37.5,2],标签为: 感冒。
(2) 在图像领域
i. 旋转、平移、缩放、裁剪、填充、镜面、翻转;
ii. 对图像加入噪声扰动,如椒盐噪声、高斯白噪声;
iii. 改变亮度、清晰度、对比度、锐度;
iv. 颜色变换,例如:
在RGB颜色空间上,对图像使用PCA,得到3各主成分特征向量 p1,p2,p3 以及对应的特征值 λ1,λ2,λ3,而后在每个像素的RGB值上添加增量:[R’,G’,B’] = [R,G,B] + [p1,p2,p3 ] · [α1λ1,α2λ2,α3λ3]T
(其中α1,α2,α3 均值为0,方差较小的正态分布的随机数。)
(3) 生对抗网络(Generative Adversarial Networks)
GAN网络最近热度也不小,它可以生成数据并进行训练,属于无监督学习。
目前尚未深入学习,以后再单独讲解。
-
机器学习 - 样本不均衡 and 不足的处理办法
最新推荐文章于 2025-01-17 14:44:17 发布