首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当训练样本不平衡时还怎么学习

互联网 · 机器学习 · 产品分析

关注SeekJoy觅乐一网打尽

在很多实际问题中,我们往往只能从结果中要么能取到大量的正样本要么取到大量的负样本,例如信用卡交易欺诈中,往往大量的都是正常交易,而欺诈交易只占很小的比例(例如0.1%)。不平衡的数据集上做训练和测试,其得到的准确率是虚高的,比如在不平衡数据中,正负样本的比例为9:1时,当它的精度为90%时,我们很有理由怀疑它将所有的类别都判断为数据多的那一类。

当拿到手的数据及其不平衡,甚至某一方的数据是完全缺失的。那么怎么办呢。本文收集了几种处理不平衡数据的方法。

1. 收集更多的数据

更够揭露数据类别的本质差别,增加样本少的数目以便后面的数据重采样。

2. 尝试改变性能评价标准

当数据不平衡时,准确度已经失去了它原有的意义。

可以参考的度量标准有:1> 混淆矩阵CM 2>精度 3>召回率 4>F1 分数(权衡精度和召回率);5.Kappa 6,ROC曲线

3. 使用不同的算法

不要试图用一个方法解所有的问题,尝试一些其他不同的方法,比如决策树一般在不平衡数据集上表现的比较的好。

4. 尝试惩罚模型

意思就是添加新的惩罚项到cost函数中,以使得小样本的类别被判断错误的cost更大,迫使模型重视小样本的数据。比如:带惩罚项的SVM。

同时sklearn和XGB中也可以对各个样本可以赋予权重(有这种参数),从而调节正负样本的重要性。

5. 使用不同的视角

不平衡的数据集,有专门的邻域和算法做这个,可以参考他们的做法和术语。

比如:异常检测。

6. 尝试新的改进

比如:1.把样本比较多的类别,分解为一些更多的小类别,比如:原始我们想区分数字0和其它数字这二分类问题,我们可以把其它数字在分为9类,变成0–9的分类问题;

7. 重采样数据(重点)7.1 过采样

拷贝一部分样本偏少的数据多分,以达到平衡(过采样);

优点:没有信息损失,效果一般比欠采样好。

缺点:由于重复了少数类样本,所以可能增大过拟合的概率。

7.2 欠采样

删除一部分样本偏多的数据,以使得达到平衡(欠采样);

优点:降低数据数量,提升运行时间以及降低存储空间。特别是在某方样本量巨大的情况下。

缺点:在建立分类器时某些有用的信息被忽略了;由于随机欠采样是有偏采样(要知道我们都希望训练样本是无偏采样的,这样训练集才能更好的代表真是样本总体,这样训练集上的各种结果才可以用于指示整体真实样本),所以所得到的模型无法代表整体样本,因此对测试集的预测不会很精确。

在实际中,过采样和欠采样都会使用的。在测试中,如果样本总数比较多,可以用欠采样的数据进行测试,如果样本总数比较少,可以用过采样的数据进行测试;另外应该测试随机采样的数据和非随机采样的数据,同时,测试不同比例正负样本的数据。

7.3 聚类过采样

使用聚类方法(例如k-means)分别对多数类和少数类进行聚类(类别数根据实际情况自行拟定),然后从对一个cluster进行过采样,并且同一类数据中的每一个cluster中的样本个数都一样多。举个例子:

Total Observations = 1000

Fraudulent Observations =20

Non Fraudulent Observations = 980

Event Rate= 2 %

Majority Class Clusters

Cluster 1: 150 Observations

Cluster 2: 120 Observations

Cluster 3: 230 observations

Cluster 4: 200 observations

Cluster 5: 150 observations

Cluster 6: 130 observations

Minority Class Clusters

Cluster 1: 8 Observations

Cluster 2: 12 Observations

After oversampling of each cluster, all clusters of the same class contain the same number of observations.

Majority Class Clusters

Cluster 1: 170 Observations

Cluster 2: 170 Observations

Cluster 3: 170 observations

Cluster 4: 170 observations

Cluster 5: 170 observations

Cluster 6: 170 observations

Minority Class Clusters

Cluster 1: 250 Observations

Cluster 2: 250 Observations

Event Rate post cluster based oversampling sampling = 500/ (1020+500) = 33 %

优点:同一类下也许出现多个子群,使每个子群的样本数目一样多,数据更平衡。

缺点:和过采样一样,存在过拟合的风险。

7.4 SMOTE过采样

另外一个比较出名的方法为SMOTE: SMOTE(Synthetic Minority Oversampling Technique),合成少数类过采样技术。它是一种过采样的方法,它从样本比较少的类别中创建新的样本实例。smote算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。

由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下。

(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。

(2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。

(3)对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本。

优点:减轻由于随机过采样引起的过拟合问题,因为SMOTE过采样是生成新的样本而不是重复存在的样本;不损失各种已有的有用信息。

缺点:添加生成样本的同时也添加了噪声,影响了分类边界的确定;对高维数据不适用;没有考虑周围来自其他类的样本点,可能导致类别重叠(例如一个负样本周围还存在很多正样本,然而生成的负样本刚好落在附近某个正样本头上)。

https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/

8. 集成模型方法(重点)8.1 Bagging Based

Bagging(Bootstrap Aggregating)很熟悉了,显示才从Boostrap有放回的抽样方法,每次抽样之后训练一个学习器,最后再将预测结果以投票或者加权的方式集成。

优点:提高稳定性和准确率;降低方差;克服过拟合;在有噪音的数据中Bagging比Boosting更有效。

缺点:基础分类器不能太差,否则会降低效果。

8.2 Boosting Based

(1)Adaboost

每次使用全部训练集来训练一个weak classifier,然后对分类错误的样本给予较大权重,然后进入下一次训练,使得下一次模型可以更加关注上一轮分类错误的点。如此循环得到多个分类器,最后再根据权重集成得到最终的模式。

优点:非常好的泛化能力,简单易用。

缺点:对噪声十分敏感。

(2)Gradient Tree Boosting

梯度提升树,展开讲就要讲一大篇,偏题了喂。可以参考:

https://www.jianshu.com/p/54e4c01535e2

(3)XGBoost

很有名的框架,也不展开讲了哈。可以参考:

http://xgboost.readthedocs.io/en/latest/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180203G0R1PL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券