前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >八个方法干掉不平衡集

八个方法干掉不平衡集

作者头像
哒呵呵
发布2018-08-06 17:20:20
4420
发布2018-08-06 17:20:20
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

--是否还在纠结不平衡集呢?现在有办法了

Coming To Grips With Imbalanced Data

我在邮件中随时都能发现不平衡数据集,例如:

I have a binary classification problem and one class ispresent with 60:1 ratio in my training set. I used the logistic regression andthe result seems to just ignores one class.

还有这个:

I am working on a classification model. In my dataset Ihave three different labels to be classified, let them be A, B and C. But inthe training dataset I have A dataset with 70% volume, B with 25% and C with5%. Most of time my results are overfit to A. Can you please suggest how can Isolve this problem?

我曾经写过一串长长的技术列表尝试去解决这个问题,最后我发现最好的给我学生的建议是:

也许一个即将到来的文章可以解决训练模型执行针对高度不平衡的数据的问题,并概述一些技术和期望的问题。

Frustration!(挫败!)

不平衡的数据可能会产生很多挫折感。当你发现你的数据有不平衡的类时,并且你认为你得到的结果是谎言,你会感到非常沮丧。在又一次挫折的时候,书,文章和博客似乎都没有给你关于处理数据不平衡的良好建议。很有可能,您也可以为不平衡数据构建预测模型。

What is Imbalanced Data?

不平衡数据通常指的是分类问题,其中的类没有被平等地表示。例如,您可能有一个具有100个实例(行)的2分类(binary)问题。总共80个实例被标记为类-1,剩余的20个实例被标记为类-2。这就是一个不平衡的数据集,Class-1和Class-2实例的比例为80:20或更简洁地4:1。你现在有了一个关于2分类问题的类不平衡问题以及多类分类问题。剩下的讨论将假定一个2分类问题,因为它更容易思考和描述。

Imbalance is Common

大多数分类数据集在每个类中没有完全相同数量的实例,但是小的差异通常并不重要。有一些问题,其中类不平衡不只是平常的,而是可预期的。例如,在那些表征欺诈交易的数据集中,会存在不平衡。绝大多数的交易将在“非欺诈”类中,少数人在“欺诈”类中。另一个例子是客户流失数据集,其中绝大多数客户保留服务(“No-Churn”类),少数客户会取消他们的订阅(“Churn”类)。当有一个适度的类不平衡时,如在上面的例子中的4:1,可能会导致问题。

Accuracy Paradox

这是你的精度测量会告诉你会有极好的精度(如90%),但精度只反映基础类分布的情况。这是非常常见的,因为分类精度通常是我们在评估模型分类问题时使用的第一个措施。

Put it All On Red!

当我们训练一个不平衡数据集时,我们的模型会发生吗?正如你可能已经猜到的,我们在不平衡数据(90%的第1类实例)中获得90%准确度的原因是因为我们的模型会审视数据,并巧妙地决定最好的做法是始终预测“Class-1”,以实现高精度。这在使用简单的基于规则的算法时是最好的。如果在最终模型中输出规则时,您将看到它很可能只预测一个类,不管需要预测的数据是什么。

8 Tactics To Combat Imbalanced Training Data

我们现在知道什么是类不平衡,为什么它会误导分类准确性。那么我们的选择是什么?

1) Can You Collect More Data?

你可能会认为它是愚蠢的,但收集更多的数据这方法几乎总是会被忽视。你能收集更多的数据吗?花一秒时间思考你是否能够收集更多关于你的问题的数据。更大的数据集可能会暴露不同的,但也许更平衡的角度的类。当我们审视重采样数据集时,更少的小类的样本可能会变得有用。

2) Try Changing Your Performance Metric

当你使用不平衡数据集时,精度不会是要使用的指标。 我们已经看到它可能会误导结果。有一些指标旨在告诉你在使用不平衡类时更真实的故事。

  • Confusion Matrix: A breakdown of predictions into a table showing correct predictions (the diagonal) and the types of incorrect predictions made (what classes incorrect predictions were assigned).
  • Precision: A measure of a classifiers exactness.
  • Recall: A measure of a classifiers completeness
  • F1 Score (or F-score): A weighted average of precision and recall.
  • Kappa (or Cohen’s kappa): Classification accuracy normalized by the imbalance of the classes in the data.
  • ROC Curves: Like precision and recall, accuracy is divided into sensitivity and specificity and models can be chosen based on the balance thresholds of these values.

3) Try Resampling Your Dataset

您可以更改用于构建预测模型的数据集,以获得更平衡的数据。此更改被称为对数据集进行抽样,有两个主要方法可用于均匀化类:

  1. You can add copies of instances from the under-represented class called over-sampling (or more formally sampling with replacement), or
  2. You can delete instances from the over-represented class, called under-sampling.

这些方法通常很容易实现和运行速度很快。 他们都有一个很好的起点。事实上,我建议你可以对所有的不平衡数据集尝试这两种方法,只是看看它是否给你一个提升你的首选的精度措施。

Some Rules of Thumb

  • Consider testing under-sampling when you have an a lot data (tens- or hundreds of thousands of instances or more)
  • Consider testing over-sampling when you don’t have a lot of data (tens of thousands of records or less)
  • Consider testing random and non-random (e.g. stratified) sampling schemes.
  • Consider testing different resampled ratios (e.g. you don’t have to target a 1:1 ratio in a binary classification problem, try other ratios)

4) Try Generate Synthetic Samples

生成合成样本的一种简单方法是从少数类中的实例随机抽取属性。您可以在数据集中根据经验对它们进行抽样,或者可以使用像Naive Bayes这样的方法,它们在反向运行时可以单独对每个属性进行抽样。您将有更多的不同数据,但属性之间的非线性关系可能不会保留。有一些算法可以用来生成合成样本。最流行的这种算法称为SMOTE(the Synthetic Minority Over-sampling Technique)。顾名思义,SMOTE是一种过采样方法。 它通过从minor类创建合成样本,而不是创建副本。 该算法选择两个或更多个类似的实例(使用距离测量),并且通过在差异内的随机量与相邻实例一次扰乱实例的一个属性。

5) Try Different Algorithms

一如既往,我强烈建议你不要使用你最喜欢的算法解决每个问题。 你应该至少在给定问题上试试各种不同类型的算法。话虽如此,决策树通常在不平衡数据集上表现良好。如果有疑问,尝试一些流行的决策树算法,如C4.5,C5.0,CART和随机森林。

6) Try Penalized Models

惩罚分类对训练期间在少数类上造成分类错误的模型增加了额外成本。这些惩罚可以使模型偏向于更多地关注少数类。

通常,类惩罚或权重的处理专用于学习算法。存在有惩罚版本的算法,例如惩罚SVM和惩罚LDA。

还可以具有用于惩罚模型的通用框架。例如,Weka有一个CostSensitiveClassifier,它可以包装任何分类器,并对缺少分类应用自定义惩罚矩阵。

如果确定了特定算法,并且无法重采样或者您的结果不佳,则使用惩罚是可取的。它提供了另一种方式来“平衡”类。设置惩罚矩阵可能是复杂的。你很可能要尝试各种惩罚,来看看什么最适合你的问题。

7) Try a Different Perspective

有专门研究不平衡数据集的领域。他们有自己的算法,度量和术语。

两个你可能想考虑的是异常检测和变化检测。

异常检测是检测罕见事件。这可能是通过其振动或由其系统调用序列指示的程序的恶意活动指示的机器故障。与正常操作相比,这事件是罕见的。

这种思维的转变是将小类作为离群类,可能帮助你想到分离和分类样本的新方法。

变化检测类似于异常检测,除了寻找其正在寻找变化或差异的异常之外。这可能是用户的行为的变化,如使用模式或银行交易所观察到的。

这两种转变对分类问题采取更实时的态度,可能给你一些新的思考你的问题的方法,或许还有一些更多的技巧。

8) Try Getting Creative

想想如何把它分解成更容易处理的更小的问题。对于灵感,看看Quora的非常有创意的答案“在分类,你如何处理不平衡的训练集?例如:将您的较大类分解为较小数目的其他类......使用一类分类器...(例如对待异常检测)...将不平衡训练集重新采样为不是一个平衡集,而是几个。 在这些集合上运行分类器的集合可以产生比单独的分类器更好的结果,这些只是一些有趣的和创造性的想法,你可以多尝试的几个。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Coming To Grips With Imbalanced Data
  • Frustration!(挫败!)
  • What is Imbalanced Data?
    • Imbalance is Common
      • Accuracy Paradox
        • Put it All On Red!
        • 8 Tactics To Combat Imbalanced Training Data
          • 1) Can You Collect More Data?
            • 2) Try Changing Your Performance Metric
              • 3) Try Resampling Your Dataset
                • 4) Try Generate Synthetic Samples
                  • 5) Try Different Algorithms
                    • 6) Try Penalized Models
                      • 7) Try a Different Perspective
                        • 8) Try Getting Creative
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档