美文网首页
[笔记]Imbalanced-learn(1)

[笔记]Imbalanced-learn(1)

作者: 木木的木_001 | 来源:发表于2019-03-01 14:46 被阅读0次

参考原文:https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/

简介:文章中提到了8个tactics,但是对于每个tactics的介绍很简略,该笔记在此作为一个总结性的记录,同时针对每个tactics中提到的关键点做进一步的介绍。

一、Collect more data

  • 收集更多数据,缓解数据不均衡的情况。这个比较简单,就如字面意思。

二、Change performance metric

  • 原因:当使用Accuracy作为性能指标时,不均衡的情况会对评价结果有很大的影响,其实主要还是因为Accuracy的计算方式 (TP+TN)/(TP+TN+FP+FN) 引起的,尤其在多分类中更为明显。举个例子,0-99的100个类中,单个样例中,类别0的预测到了类别1,结果来说预测错了,但是计算Accuracy的考虑角度并不是严格的从单个结果,相当于是说,虽然对于类别0和类别1是错了,但是类别2~99 这98个类别都预测对了,因为确实不属于这个类,这……

  • 而在这一项中作者提出的性能指标有6种,下面逐一介绍;

  • (1)、confusion matrix (混淆矩阵):
    混淆矩阵的方式大概可以分两种,其一为二分类。二分类中的混淆矩阵,是2 X 2 的方阵,可以看成是下图这样的方式;


    二分类.png

    而多分类中如下所示:


    多分类.png

混淆矩阵参考:https://www.cnblogs.com/cnkai/p/7755134.html

  • (2)、Precision(精确率):
    精确率: TP / (TP + FP)
    基本可以认为只计算了预测为正的样例中的准确率,即所有预测为正例的样例中,又有多少是对的,而错了就是错了,不考虑对于非本类的评分是多少。它的着重点在于预测结果。

  • (3)、Recall(召回率):
    召回率:TP / (TP + FN)
    可以理解为,整理样本中有多少被预测正确了,他的着重点在于正例样本。

  • (4)、F1 Score:
    F1 Score: (2 * Precision * Recall) / (Precision + Recall)
    范围:0~1
    当你希望同时使用精确率和召回率的时候,F1就可以作为衡量标准,来找到 Precision 和 recall 之间的平衡点。

  • (5)、Kappa( Cohen's Kappa):
    Kappa: K = (P0 - Pe) / (1 - Pe)
    范围: -1 ~ 1
    P0: 每一类中被正确预测的数量的综合/ 总样本数; 可以理解为总样本的精度;
    Pe: 基于样本和预测结果的分布的计算,对于C个类别的多分类,如下:
    Pe = (a0 * b0 + a1 * b1 + ... + aC * bC) / n * n;
    ai: 样本中第i类的数量;
    bi: 预测结果中第i类的数量;
    n -> 样本数量总和,有:a0 + ... + aC = n; b0 + ... + C = n;
    Kappa是基于混淆矩阵进行计算,描述两种分类标注的一致性。1表示完全一致,-1表示完全不一致,0表示几乎等同于随机预测。
    Kappa参考:https://blog.csdn.net/weixin_38313518/article/details/80035094

  • (6)、ROC Curves (ROC曲线):
    ROC曲线:真阳性率(TPR)和假阳性率(FPR)来实现的描述相关操作特征的曲线。
    TPR:TP / (TP + FN)
    FPR:FP / (FP + TN)
    ROC曲线的x轴表示FPR,y轴表示TPR,两者之间的变化组成ROC 曲线,而曲线下的面积就是AUC;
    具体可参考:https://www.cnblogs.com/linkr/articles/2317072.html

三、Resampling Your Dataset

  • 描述:其实重采样也是我在处理数据时最常用以及最简单的方法,在数据满足要求的情况下,既然数据有不均衡的情况出现,那就手动进行均衡处理,多的减少,少的增加,这是最基本的思路,但有时候会受到数据集本身的影响而略有不同;

  • (1)、over sampling(上采样):
    对于样本数量少的类别,可以进行上采样,即复制样本,对样本做一些形变等数据增强的方式,但有时候需要对任务和代码做一个分析,比如有些项目中区分左右以及角度时,就不能随意使用左右翻转或者旋转来扩充数据。但是当数据量差别能够接受,且数据类间特征明确时,也不需要对少数类别单独上采样依然能取得很好的结果。而且训练时需要注意的一点是,在使用TensorFlow的slim项目进行训练时,在数据的预处理中是默认加了随机左右翻转的,这样的处理对于需要区分左右的类别就造成了不可忽视的干扰,不过这部分在预处理的代码中可以更改。

  • (2)、under sampling(下采样):
    这个我一般是看具体任务,比如某个类有3000多的数据量,而大部分类都在500~800左右,我基本会把多数的类别随机抛弃一部分,只保留1000左右;但是有些项目中,多数类别的数量也并不够多,这个时候任性的随机抛弃就会降低样本的多样性和泛化能力,对于这种类型的任务,我一般会在制作tfrecord的时候对于每一个record中的类别做一个划分,少数类别顺序放进来,多数类别每次挑选一部分进来,在每个record中的各个类别尽量均衡,有时候类别数较大的时候,也不一定是一个record,而是拿出一部分多数,一部分少数组成一个单位,在这个单位中,各个类别均衡,然后随机打乱后放入record中去。

四、Generate Synthetic Samples

  • 样本生成其实就是扩充少量数据,对于图片来说上文中提到的形变就是其中的一种方式,文章中还提到朴素贝叶斯和SMOTE,可以单独搜索看看。

五、Diffrent Algorithms

  • 尝试使用不同的算法进行,这个……好像没有什么不好理解的。

六、Penalized Models

  • 加入惩罚因子,对结果进行校正。加入了惩罚因子的分类中,提高了对于少数类别分类错误的代价,也使得训练更关注于少数类别。

  • 像SVM和LDA都有加入了惩罚项的版本,而我在图像相关的使用中,更多的是两个方式,一种是对计算的结果根据数量不同添加weight,一种是在loss中添加正则项作为惩罚项,最终的loss = regularizer + real_loss ,TensorFlow中也有相关的实现,用起来也方便。惩罚因子在使用中并不会是第一选择,一般是在对数据无法处理的时候才会考虑。最简单有效的方式还是从数据入手。

七、Different Perspective

  • 这一项的意思就是说,数据不均衡的问题在很多领域内都有研究,如果实在无法解决的时候,可以看看异常检测和差异检测,也许能找到不同的思路与方法。

八、Getting Creative

  • 或者尝试自己创新,比如把问题分解成不同的小问题来解决问题。其实很多时候如果能够充分理解问题本身,可能达到事半功倍的效果。

相关文章

网友评论

      本文标题:[笔记]Imbalanced-learn(1)

      本文链接:https://www.haomeiwen.com/subject/iyuduqtx.html