正负样本不均衡解决方案

、欠采样和过采样

参考:https://www.jianshu.com/p/256f83cecbc8

欠采样:去除训练集内一些多数样本,使得两类数据量级接近,然后再正常进行学习。(数据量足够时使用此方法)。缺点是,若随机丢弃样本,可能丢失多数类的重要信息。

改进的欠采样的代表算法是EasyEnsemble:利用集成学习机制,它将多数样本划分成若 N个集合,然后将划分过后的集合与少数样本组合,这样就形成了N个训练集合,而且每个训练结合都进行了欠采样,但从全局来看却没有信息丢失。

过采样:对训练集内的少数样本进行扩充,既增加少数样本使得两类数据数目接近,然后再进行学习。(数据量不足时使用此方法)。简单粗暴的方法是复制少数样本,缺点是虽然引入了额外的训练数据,但没有给少数类样本增加任何新的信息,非常容易造成过拟合。

过采样的代表算法是SMOTE(原始论文)和ADASYN。 举例,SMOTE算法:通过对少数样本进行插值来获取新样本,比如对于每个少数类样本a,从a最邻近的样本中选取样本b,然后在对ab 中随机选择一点作为新样本。

二、通过正负样本的惩罚权重解决样本不均衡

通过正负样本的惩罚权重解决样本不均衡的问题的思想是在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。

比如带权重的交叉上损失函数,Focal loss等。

交叉熵损失函数

Focal Loss

三、通过组合/集成方法解决样本不均衡

组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。

四、尝试不同的分类的算法

因为不同的算法适用于不同的任务与数据,应该使用不同的算法进行比较。决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。目前流行的决策树算法有:C4.5、C5.0、CART和Random Forest等。

五、从一个新的角度理解问题

1、对于正负样本极不平衡的场景,我们可以换一个完全不同的角度来看待问题:把它看做一分类(one class learning) 或异常检测问题,这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,比较有代表性的是 one-class-SVM。

2、对丰富类进行聚类操作,然后进行有监督学习。

首先,我们可以对具有大量样本的丰富类进行聚类操作。假设我们使用的方法是 K-Means聚类算法 。此时,我们可以选择K值为稀有类中的数据样本的个数,并将聚类后的中心点以及相应的聚类中心当做富类样本的代表样例,类标与富类类标一致。经过聚类操作,我们对富类训练样本进行了筛选,接下来我们就可以将相等样本数的K个正负样本进行有监督训练。

六、样本不均衡分类器的评价指标

准确度这个评价指标在类别不均衡的分类任务中并不适用,甚至进行误导。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。

对于样本不均衡的数据来说,需要用"召回率(Recall)"、"精确率(Precision)"和"综合评价指标(F-Mmeasure)"来评估模型。

相关推荐
敲代码不忘补水2 分钟前
Python 项目实践:简单的计算器
开发语言·python·json·项目实践
蒟蒻的贤10 分钟前
Web APIs 第二天
开发语言·前端·javascript
ljp_nan18 分钟前
QT --- 初识QT
开发语言·qt
ᅠᅠᅠ@23 分钟前
异常枚举;
开发语言·javascript·ecmascript
编程版小新29 分钟前
C++初阶:STL详解(四)——vector迭代器失效问题
开发语言·c++·迭代器·vector·迭代器失效
c4fx1 小时前
Delphi5利用DLL实现窗体的重用
开发语言·delphi·dll
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
Jhxbdks1 小时前
C语言中的一些小知识(二)
c语言·开发语言·笔记
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言