非原创非原创非原创,仅供自己学习记录,参考文章主要有这几篇
https://blog.csdn.net/weixin_42462804/article/details/99821091?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
https://www.zhihu.com/question/269698662/answer/352279936
https://zhuanlan.zhihu.com/p/32940093
https://mp.weixin.qq.com/s?__biz=MzIwNzc2NTk0NQ==&mid=2247484993&idx=1&sn=0bd32089a638e5a1b48239656febb6e0&chksm=970c2e97a07ba7818d63dddbb469486dccb369ecc11f38ffdea596452b9e5bf65772820a8ac9&token=407616831&lang=zh_CN
样本类别不均衡将导致样本量少的分类所包含的特征过少,并很难从中提取规律;即使得到分类模型,也容易产生过度依赖与有限的数据样本而导致过拟合问题,当模型应用到新的数据上时,模型的准确性会很差。
数据层面:采样,数据增强,数据合成等;
模型层面:修改损失函数值,异常检测等。
模型评估
随机过采样:从少数类样本集中随机重复抽取样本(有放回)以得到更多的样本;
随机欠采样:从多数类样本集中随机选择较少的样本(有放回/无放回);
随机采样的缺点:
过采样容易造成过拟合;
欠采样可能损失有用的信息。
为解决采样过拟合的风险,可搭配使用正则化模型。
过采样中的“奇淫巧技”:
1、SMOTE:通过插值的方式加入近邻的数据点;简单来说smote算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。
2、基于聚类的过采样:先对数据进行聚类,然后对聚类后的数据分别进行过采样。这种方法能够降低类间和类内的不平衡。
3、神经网络中的过采样:SGD训练时,保证每个batch内部样本均衡。
4、文本挖掘领域会使用一些文本增强的方法,最常见的就是对文本进行同义词替换、翻译成外文再翻译回来等。
欠采样中的“奇淫巧技”:
1、丢掉一些类别边界部分的数据,克服丢失数据带来的信息缺失这一缺点。
2、反复做欠采样,对这反复做欠采样生成的不同样本分别训练,并集成结果。这样数据达到了有效利用,但也存在风险:
训练多个模型造成了过大的开销,合并模型结果需要额外步骤,有可能造成其他错误;
正例被反复使用,和过采样一样,很容易造成模型的过拟合。
3、对数据先进行聚类,再将大的簇进行随机欠采样或者小的簇进行数据生成
采样法最受人诟病的就是可能会改变原始数据的分布,从而带来偏差。但是我觉得如果随机采样足够随机,不一定会改变原始数据的分布?(https://www.zhihu.com/question/269698662/answer/352279936)
调整阈值
对于使用阈值的分类问题,比如二分类,或者某些多标签分类方法,输出范围通常为 [ 0,1 ] ,当某个样本大于0.5就会被划分为正例。在类别不平衡时,比如反例过多,采用默认阈值可能会导致输出全是反例,产生虚假的高准确度。可以调整阈值,是模型对于较少的类别更为敏感。
调整权重(代价敏感学习)
Sklearn的决策树有一个参数是class_weight,在计算的损失函数乘上对应的sample_weight来计算最终的损失。这样计算而来的损失函数不会因为样本不平衡而被“推向”样本量偏少的类别中。
其实就是在cost function中调整惩罚项的权重,使样本较少的类别在被分类错误产生的代价更为严重。
异常检测
把监督学习变为无监督学习,舍弃掉标签把问题转化为一个无监督问题,如异常检测。
无监督异常检测最大优势就是在不需要数据标签,如果在对数据假设正确时效果甚至可以比监督学习更好,尤其是当获取标签成本很高时。
https://www.zhihu.com/question/280696035/answer/417091151
选择合适的评估标准,比如ROC或者F1,而不是准确度(accuracy)
对于平衡的数据,我们一般都用准确率(accuracy),也就是(1-误分率)作为一般的评估标准。这种标准的默认假设前提是:“数据是平衡的,正例与反例的重要性一样,二分类器的阈值是0.5。”在这种情况下,用准确率来对分类器进行评估是合理的。
而当类别不平衡时,准确率就非常具有迷惑性,而且意义不大。给出几种主流的评估方法:
至于哪种方法更好,一般来看我们在极端类别不平衡中更在意“少数的类别”,因此ROC不像precision-recall curve那样更具有吸引力。在这种情况下,Precision-recall curve不失为一种好的评估标准。还有一种做法是,仅分析ROC曲线左边的一小部分,从这个角度看和precision-recall curve有很高的相似性。
同理,因为我们更在意罕见的正例,因此precision尤为重要,因此average precision (macro)也是常见的评估标准。此处特意要提醒两点: