处理不平衡数据的8条要点

来自:http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/

1 尽可能的收集数据

这种做法看起来有点low,大家也不认为这有多重要。事实情况是如果拥有越多的数据,则就越有可能发现类别之间的差异性,也就越有可能让类别变得越来越对称。收集更多的数据对稍后的采样也是有益处的。

2 采样不同的评价标准

在处理不对称数据时如果仅仅使用准确率是不够的,为了更好的反映不对称数据的分类效果应该采样更多的评价指标,下面是常用指标
- 混淆矩阵: 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).
- 准确率: A measure of a classifiers exactness.
- 召回率: A measure of a classifiers completeness
- F1得分 (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曲线: 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 对数据进行重采样

通过采样技术让分类数据中的类别变的尽可能的平衡。有两种主要采样方法可以使用
- 对样本比较少的类别重复采样,使其样本变多,这称之为升采样
- 对样本比较多的类别,删除其中的部分样本,使其样本变少,这称之为降采样
以上两种方法简单易行,实现简单,在实际应用中应该同时使用这两种方法

常用的经验法则

  • 如果数据较多时可以降采样,在降采样的数据上测试分类器的性能
  • 如果数据较少可以升采样,在升采样的数据上测试分类器的性能
  • 在随机采样和非随机采样的数据上测试分类器性能
  • 在不同的重采样比例下测试分类器的性能

4) 尝试构造出新的样本数据

一种简单的方法就是从现有的数据中随机抽取一些样本出来,然后从每个样本中抽取部分特征出来作为新的样本。例如对数量较少的正类数据,可以从中抽取一些样本,再从每个样本中抽取部分特征。
可以根据经验从已有数据中采样,也可以使用朴素的贝叶斯方法独立的从一个样本中抽取部分属性组成新的样本。
虽然可以通过人为的构造数据增加数据量,但是新增加的数据可能无法表示特征之间的非线性关系
有一些算法可以用来构造新的数据。最流行的算法称为SMOTE(或者the Synthetic Minority Over-sampling Technique)。
顾名思义,SMOTE是一种升采样方法。对数据量少的类别数据进行处理,而不是简单的从其中拷贝样本。
该算法使用向量间距离作为度量,找到两个或者多个相似样本,每次随机的修改相似样本中的一个特征,形成新的特征,具体算法可以参考《SMOTE: Synthetic Minority Over-sampling Technique》

SMOTE算法有多种实现方式如下:
- 在Python中,UnbalancedDataset
In Python, take a look at the “UnbalancedDataset” module. It provides a number of implementations of SMOTE as well as various other resampling techniques that you could try.
In R, the DMwR package provides an implementation of SMOTE.
In Weka, you can use the SMOTE supervised filter.

你可能感兴趣的:(统计机器学习算法理论)