八个方法干掉不平衡集

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

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

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2016-12-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【干货】Python机器学习项目实战1(附代码)

4.4K3
来自专栏编程

用Python进行速度预测

这次分享一段数据特征挖掘准备工作的套路~ 数据格式是这样的: ? task 预测值:速度 特征值: Region 区域 Length 长度Volume 流...

3349
来自专栏数据结构与算法

中国剩余定理详解

引入 我国古代数学著作《孙子算经》中有一道题目,它的描述是这样的 今有物不知其数,三三数之余二;五五数之余三;七七数之余二。问物几何? 这道题用现代数学理...

38311
来自专栏开心的学习之路

基于协同过滤的推荐引擎(理论部分)

记得原来和朋友猜测过网易云的推荐是怎么实现的,大概的猜测有两种:一种是看你听过的和收藏过的音乐,再看和你一样听过这些音乐的人他们喜欢听什么音乐,把他喜欢的你没听...

3489
来自专栏hadoop学习笔记

处理数据缺失的结构化解决办法

数据缺失是数据科学家在处理数据时经常遇到的问题,本文作者基于不同的情境提供了相应的数据插补解决办法。没有完美的数据插补法,但总有一款更适合当下情况。

530
来自专栏AI研习社

使用 RNN 进行情感分析的初学者指南

情感分析可能是最常见的 自然语言处理 的应用之一。我无需去额外强调在客服工具中情感分析的重要性。本文将利用循环神经网络,训练出一个基于 IMDB 数据集的电影评...

922
来自专栏机器之心

学界 | 详解指针生成网络:自动生成长段文本的抽象摘要

作者:Abigail See 机器之心编译 参与:Nurhachu Null 这篇博文是斯坦福大学计算机科学在读博士 Abigail See 对最近自己和其他研...

8146
来自专栏计算机视觉战队

结合人类视觉注意力进行图像分类

注:昨天推送发现内容有一个严重错误,所以临时删除了文章的链接,希望关注的您能够谅解,我们也是希望推送最完整最准确的内容,谢谢您的支持与关注,谢谢! 好久没有和大...

8566
来自专栏ATYUN订阅号

Python机器学习的练习二:多元线性回归

在第1部分中,我们用线性回归来预测新的食品交易的利润,它基于城市的人口数量。对于第2部分,我们有了一个新任务——预测房子的售价。这次的不同之处在于我们有多个因变...

5156
来自专栏机器学习算法与Python学习

推荐 | Python机器学习项目实战(附代码 + 可下载)【一】

Putting the machine learning pieces together

4023

扫码关注云+社区

领取腾讯云代金券