之前做二分类预测的时候,遇到了正负样本比例严重不平衡的情况,甚至有些比例达到了50:1,如果直接在此基础上做预测,对于样本量较小的类的召回率会极低,这类不平衡数据该如何处理呢? 不平衡数据的定义顾名思义即我们的数据集样本类别极不均衡,以二分类问题为例,数据集中的多数类 为 为什么不平衡学习因为传统的学习方法以降低总体分类精度为目标,将所有样本一视同仁,同等对待,造成了分类器在多数类的分类精度较高而在少数类的分类精 度很低。例如上面正负样本50:1的例子,算法就算全部预测为另一样本,准确率也会达到98%(50/51),因此传统的学习算法在不平衡数据集中具有较大的局限性。 不平衡学习的方法解决方法主要分为两个方面。
采样随机采样采样算法通过某一种策略改变样本的类别分布,以达到将不平衡分布的样本转化为相对平衡分布的样本的目的,而随机采样是采样算法中最简单也最直观易 懂的一种方法。随机采样主要分为两种类型,分别为随机欠采样和随机过采样两种。 SMOTE算法SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,SMOTE算法的基本思想SMOTE算法的基本思想是对少数类样本进行分 析并根据少数类样本人工合成新样本添加到数据集中,具体如图2所示,算法流程如下。
Borderline-SMOTE算法在Borderline-SMOTE中,若少数类样本的每个样本 即k近邻中超过一半是多数样本。 则将样本 图3 Borderline-SMOTE算法
Informed Undersampling前面讲了关于过采样的的算法,那么下面就是欠采样算法informed undersampling,informed undersampling采样技术主要有两种方法分别是EasyEnsemble算法和BalanceCascade算法。
BalanceCascade算法是一种级联算法,BalanceCascade从多数类 代价敏感学习代价敏感学习算法(Cost-Sensitive Learning)主要从算法层面上解决不平衡数据学习,代价敏感学习方法的核心要素是代价矩阵,我们注意到在实际的应用中不同类型的误分类情况导致的代价是不一样的,例如在医疗中,“将病 人误疹为健康人”和“将健康人误疹为病人”的代价不同,因此 我们定义代价矩阵如下图所示。 代价矩阵
代价敏感学习方法基于以上代价矩阵的分析,代价敏感学习方法主要有以下三种实现方式
AdaCost算法让我们先来简单回顾一下Adaboost算法,如下图6所示。Adaboost算法通过反复迭代,每一轮迭代学习到一个分类器,并根据当前分类器 的表现更新样本的权重,如图中红框所示,其更新策略为正确分类样本权重降低,错误分类样本权重加大,最终的模型是多次迭代模型的一个加权线性组合,分类越 准确的分类器将会获得越大的权重。 AdaCost算法修改了Adaboost算法的权重更新策略,其基本思想是对于代价高的误分类样本大大地提高其权重,而对于代价高的正确分类样 本适当地降低其权重,使其权重降低相对较小。总体思想是代价高样本权重增加得大降低得慢。其样本权重按照如下公式进行更新。其 中
不平衡学习的评价方法正确率和F值 正确率和F值的计算都是基于混淆矩阵(Confusion Matrix)的,混淆矩阵如下图7所示,每行代表预测情况,每列代表实际类别,TP,FP,FN,TN分别代表正类正确分类数量,预测为正类但是真实为负类,预测为负类但是真实为正类,负类正确分类数量。 G-MeanG-Mean是另外一个指标,也能评价不平衡数据的模型表现,其计算公式如下。 下面将会介绍TP、TN等
ROC曲线和AUC为了介绍ROC曲线首先引入两个是,分别是FP_rate和TP_rate,它们分别表示1-负类召回率和正类召回率,显然模型表示最好的时候 FP_rate=0且TP_rate=1,我们以FP_rate为横坐标,TP_rate为纵坐标可以得到点(FP_rate,TP_rate),通过调 整模型预测的阈值可以得到不同的点,将这些点可以连成一条曲线,这条曲线叫做接受者工作特征曲线(Receiver Operating Characteristic Curve,简称ROC曲线)如下图8所示。显然A点为最优点,ROC曲线越靠近A点代表模型表现越好,曲线下面积(Area Under Curve, AUC)越大,AUC是衡量模型表现好坏的一个重要指标。 ROC曲线
Ps:为啥每个公式后面会有一个竖线??? 参考文献:http://www.cs./~piyush/teaching/ImbalancedLearning.pdf python sklearn数据预处理: |
|