此文为转载翻译。原文地址:https://machinelearningmastery.com/framework-for-imbalanced-classification-projects/#comment-525938
分类建模问题是根据给定的输入做类别预测。这是一个有挑战性的问题,很多时候我们对数据集知之甚少,还要从成百(如果没有上千的话)的机器学习算法中选择。如果样本的类别不均衡问题难度会增加。对于偏斜的类别分布需要使用特别的方法来改变数据集或学习算法。
面对一个新的分类问题通常会选择随机森林或SMOTE等热门方法试一下。另一个方法是搜索描述类似问题的研究文献并尝试文献中的方法。
以上方法可能有效,但是有点漫无目的并非常消耗时间。解决新分类问题的最快方法是系统的评估一套机器学习算法以发现哪个有效,然后双倍下注。这个方法同样适用于不均衡分类问题。
这篇文章中,你会通过不均衡分类数据发现解决问题的系统框架。看完这篇文章你会知道:
1. 为不均衡分类问题选择算法的挑战
2. 系统解决不均衡分类问题的框架
3. 关于不均衡分类问题的特别算法建议
文章目录
文章分为三个部分:
1. 用什么算法
2. 系统框架
3. 不均衡分类的具体框架
1. 选择评价指标
2. spot check算法
3. spot check 不均衡算法
4. 超参数调优
一. 用什么算法
你手上有一堆不均衡分类的数据,现在怎么办?有如此多机器学习算法可供选择,更别提特别为不均衡分类问题设计的特殊算法了。
用什么算法?怎么选择?
在面对新不均衡分类问题的时候面临的第一个挑战就是选择算法。这个挑战使得应用机器学习算法让人感到又激动又害怕。
通常两种方法解决该问题:1. 用你最喜欢的算法 2. 用之前验证有效的算法。实际当中这两种方式都有很大偶然性,常常没有效果。已有的研究论文总是倾向于让一个算法显得令人可期待而不是客观的算法间的比较。如果对数据集知之甚少,最快的方法是系统性的测试一系列不同算法。
二. 系统框架
先说一个平衡分类问题。
你同样会面对选择算法的问题,测试一系列算法仍然是最稳健的途径。这个过程可以被总结为:
1. 选择一个衡量指标
2. spot check algorithms
3. 超参数调优
不均衡分类问题可以先在常用的机器学习算法上测试,对于不均衡数据这些算法通常表现不好,但结果可以作为基准线和其他算法对比。最后对表现好的算法调参也是非常重要的。我们总结下不均衡数据的算法选择步骤,在之前的步骤上增加了一项:
1. 选择一个衡量指标
2. spot check algorithms
3. spot check imbalanced algorithms
4. hyperparametr tuning
这提供了解决不均衡数据分类问题的高层系统性框架。同样我们需要一个类似的底层系统性框架。
三. 不均衡问题的底层框架
解决不均衡分类问题的每个步骤,都可以再细分到底层的系统性框架,从衡量指标的选择到超参数的调优
选择衡量指标
衡量指标应该能捕捉模型的细节或者对项目相关人员重要的预测。
这很困难因为有太多指标可以选择而项目相关人员常常不确定他们要什么。可以尝试不同的指标来看看哪些对项目相关人来说比较重要。
首先你先判断是想预测概率还是类别。注意对于二元不均衡分类任务,多数类是正常的,叫做“negtive class",少数类是例外,叫做"positive class"
概率表征了预测的不确定性而类别标签可以直接使用
Probabilities:预测每个案例属于每个类别的概率
class labels: 预测每个案例的类别
选择衡量指标_预测概率
如果要直接用概率,可以选择Brier Score 和 Brier Skill score
如果你想预测概率并允许用户自己映射概率和类别,可以使用precision-recall 曲线和曲线下的面积(PR AUC)。这个指标能提供最优化的准确率和覆盖率。
如果类别同样重要则可以使用ROC曲线和去线下的面积(ROC AUC)
选择衡量指标_预测类别
如果预测类别标签并且类别同等重要,一个好的默认指标是准确率。这在数据的主要分类占整体数据80%以下时有效。如果主要类别达到大于整体80%或90%的倾斜,准确率指标就失去了比较算法的意义。
如果类别分布严重倾斜,可以使用G-mean 指标
如果正类比较重要,可以使用F-Measure来优化精准率和覆盖率。如果两类同等重要可以用F1。如果负类重要,使用F2-Measure。如果假正类带来损失大,则使用F0.5-Measure.
选择衡量指标_底层框架
Spot check algorithms
spot check 机器学习算法指用最少的超参数评估一系列不同类型算法。这包括给每个算法一个机会来学习这个问题,包括算法需要的预处理和最佳实践配置。这样做的目的是快速测试一系列标准算法并给为不能均衡数据特别设计的算法提供一个基准线可以比较。如果使用炫酷的不均衡算法没有带来杰出的效果则没有使用的意义。
需要定义一个稳定的测试工具。常用的包括k-fold cross-validation,默认是k-10。分层交叉验证可以用来保证每个fold和原始数据有相同的分布。交叉验证过程常常重复多次以保证有效获取数据集上的模型表现,用分数的均值和标准差作为结果。
spot check algorithm可以分四个层级:
1. naive algorithms
2. linear algorithms
3. nonlinear algorithms
4. ensembole algorithms
Spot check algorithm_naive algorithm
首先用朴素分类法。这提供了算法表现的基准值,其他算法应该优于该表现。朴素的意思是只有”如果..那么"逻辑或预测一个常量。朴素算法的选择应根据衡量指标的选择而定。比如针对准确率的朴素算法是预测数据中的多数类。针对评估概率的Brier Score指标应该选择预测类别的先验概率。下面是一个指标和朴素算法之间的映射关系,供参考:
1. Accuracy: 预测多数类(class 0)
2. G_mean: 预测随机类别
3. F-Measure:预测少数(class1)
4. ROC AUC:预测分层随机类别
5. PR ROC:预测分层随机类别
6. Brier Score:预测多数类的先验概率
如果不确定适合你衡量指标的朴素算法,可以通过测试结果选择。朴素算法包括:
1. 预测多数类
2. 预测少数类
3. 预测随机选择类
4. 预测根据每个类别先验概率选择的类
5. 预测类别的先验概率
Spot check algorithm_linear algorithms
线性算法对待解决问题的方程做了严格的假设。我们说线性指输出是输入的线性组合或加权组合,当然这个定义是有弹性的。我们也叫这些算法概率算法,因为他们在概率框架下。
线性算法训练快、表现好。常见的线性算法包括:
1. logistic regression
2. linear discriminant analysis
3. naive bayes
Spot check algorithm_Nonlinear algorithms
非线性算法对待解决问题的方程做的限制不多。非线性算法的输出是输入的非线性映射。这类算法一般比线性算法需要更多数据,训练的也更慢。常见的非线性算法包括:
1. Decision Tree
2. k-Nearest Neighbors
3. Artificial Neural Networks
4. Support Vector Machine
Spot check algorithm_Ensemble Algorithms
集成算法结合了多个模型的预测。有多重集成算法可供选择,但是做spot-check 算法时最好用决策树集成算法,这是已知的在各种实际问题中表现良好的算法。可以考虑的决策树集成算法包括:
1. Bagged Decision Trees
2. Random Forest
3. Extra Trees
4. Stochastic Gradient Boosting
Spot check algorithm_Framework for spot-checking machine learning algorithms
把上述内容整合成一个框架如下:
这些步骤的顺序并不建议随意变更。从上到下算法的复杂性逐渐增加,对应的模型能力也逐渐增强。
每步中算法的顺序是灵活的,并且列出的并不是全部。把测试算法限制在最常用的算法中是一个好的开始。做算法默认的数据预处理、使用默认的超参数也是一个好的开始。
下图是框架的总结:
spot check imbalanced algorithms
不均衡数据算法和均衡数据算法类似。目标是快速尝试大量算法以发现最合适的方向来深入调参。之前说到的均衡数据算法都可以用到不均衡数据上并和不均衡算法比较。这让你能聚焦在解决问题最好的方法上,而不是只在不均衡数据分类算法里择优。大概有4类不均衡分类算法:
1. Data sampling algorithms
2. cost-sensitive algorithms
3. one-class algorithms
4. probability tuning algorithms
spot check imbalanced algorithms_data sampling algorithms
数据抽样算法改变训练数据集的构成来改进标准机器学习算法在不均衡数据上的表现。大概有三种数据抽样技术:
1. data oversampling
2. data undersampling
3. combined oversampling and undersampling
数据过采样是从已有数据中重复或合成少数类案例。当前最流行的方法是SMOTE和变种算法如Borderline SMOTE. 最重要的待调超参数是过采样的数量。数据过采样方法包括:
1. 随机过采样
2. SMOTE
3. borderline SMOTE
4. SVM SMote
5. k-means SMOTE
6. ADASYN
欠采样包括从多数类中删除一些样本,可以是随机也可以是用算法选择特定样本做删除。流行的算法包括nearest neighbors、tomek links
欠采样算法包括:
1. random undersampling
2. condensed nearest neighbor
3. tomek links
4. edited nearest neighbors
5. neighborhood cleaning rule
6. one-sided selection
几乎所有的过采样算法都可以和所有欠采样技术结合。因此结合不同过采样和欠采样技术也许能带来惊喜。流行的欠采样和过采样结合算法包括:
1. SMOTE and random undersampling
2. SMOTE and tomek links
3. SMOTE and edited nearest neighbors
数据采样算法在不同的机器学习算法上表现可能不同。因此采样算法最好在前面提过的不同算法上尝试。另外大多数数据采样算法都内嵌使用了k-nearest neighbor algorithm。这个算法对数据类型和输入变量的量级非常敏感。因此在测试方法前标准化量级不同输入变量很重要,对于一些类别变量要做特别处理。
spot check imbalanced algorithms_cost-sensitive algorithms
代价敏感的算法是考虑误分类带来的不同代价而设计的机器学习算法的改进版。这些算法应用在不均衡分类问题上效果较好,误分类的代价可以和训练集数据中数据分布比例相反。很多代价敏感算法可供选择,一个有效的实践方法是尝试线性、非线性和集成算法的代价敏感版本。
一些可以被配置成代价敏感训练方式的机器学习算法包括:
1. logistic regression
2. decision trees
3. support vector machines
4. artificial neural networks
5. bagged decision trees
6. random forest
7.stochastic gradient boosting
spot check imbalanced algorithms_one-class algorithms
用来做离群值检测和异常检测的算法也可以用来做分类任务。尽管不常用,但当被用作分类算法时它们通常被叫做one-class分类算法。一些情况下这个算法非常有效,比如严重的类别不均衡,正类只有寥寥几个的时候。一些one-class的分类算法包括:
1. one-class support vector machines
2. isolation forests
3. minimum covariance determinant
4. local outlier factor
spot check imbalanced algorithms_probability tuning algorithms
概率预测可以通过两个方法改进:
1. calibrating probabilities(概率校准)
2. tuning the classification threshold(调节分类阈值)
calibrating probabilities:
一些算法使用概率框架训练,因此有校准概率。当一个二元分类任务中概率用来作为输出或用作评估模型的时候可以使用概率校准。一些预测校准概率的机器学习算法的例子包括:
1. logistic regression
2. linear discriminant analysis
3. naive bayes
4. artificial neural networks
大多数非线性算法不预测校准概率,因此校准算法可以用来对预测概率做后处理以校准他们。
因此当概率值直接作为输出或用来评价模型,并且使用了非线性算法时,校准预测概率很重要。一些概率校准算法包括:
1. platt scaling
2. isotonic regression
tuning the classification threshold
一些算法被设计成预测概率,然后由概率映射成类别。如果把类别标签作为输出或模型通过类别标签做评估时一般都属于这种情况。默认预测概率值的机器学习算法包括:
1. logistic regression
2. linear discriminant analysis
3. naive bayes
4. artifical neural networks
概率通过阈值映射到类别。所有阈值之下的概率映射到0,所有大于等于阈值的映射成1.默认阈值是0.5,不同阈值会对类别标签的预测产生巨大影响,因此也直接影响模型的预测表现。因此概率算法原本预测概率值,类别标签作为输出或评估模型的时候,可以尝试调整分类阈值。
spot check imbalanced algorithms_framework for spot-checking imbalanced algorithms
步骤间的顺序是灵活的,每步中算法的顺序也是灵活的,罗列的算法清单并不完整。下图是一个总结
调参
spot-checking机器学习算法和不均衡数据算法之后,你已经知道哪些算法在你的数据上有效,哪些无效。最简单的方式是选择前5个或10个表现最好的算法/算法组合然后分别调参。
有三个流行的调参算法可以参考:
1. random search
2. grid search
3. bayesian optimization
如果你知道可以尝试哪些超参数的值,grid search是一个不错的选择,否则应该使用random search。 如果可能的话应该使用Bayesian optimization但建立和运行这个方法很有挑战。