机器学习--解决数据集不平衡的问题

 

数据集不平衡:比方10000个样本里有1000个缺陷,写一个缺陷检测的算法,由于好坏样本不均匀,哪怕一个缺陷也检测不出来,结果也能归类90%的准确率,这显然不科学。

解决办法:

1、采样。上采样是把小众类复制多份,下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。上采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合;而下采样的缺点显而易见,那就是最终的训练集丢失了数据,模型只学到了总体模式的一部分。

上采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。

因为下采样会丢失信息,如何减少信息的损失呢?第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。第二种方法叫做BalanceCascade,利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。第三种方法是利用KNN试图挑选那些最具代表性的大众样本


2、smote算法数据合成

3、加权

4、二分类正负样本不均匀可以采用一分类的方法One-class SVM。只检测样本是不是多的那一类,对于不是的不需要确定他的类别。

 

本文参考总结--这是原作

 

你可能感兴趣的:(深度学习,数据集,机器学习,不平衡)