Answers:
我发现,He and Garcia(2009)对班级不平衡问题的学习很有帮助。以下是一些绝对不全面的考虑事项:
基于数据的方法:
一个人可以低估多数派,也可以高估少数派。(Breiman指出,这在形式上等同于分配非统一的错误分类成本。)这可能会引起问题:抽样不足会导致学习者错过多数班的某些方面。过度采样会增加过度拟合的风险。
有“知情的欠采样”方法可以减少这些问题。EasyEnsemble就是其中之一,它可以独立地从多数类中采样几个子集,并通过将每个子集与所有少数类数据进行组合来进行多个分类。
SMOTE(合成少数族裔过采样技术)或SMOTEBoost(将SMOTE与Boosting结合使用)通过在要素空间中建立最接近的邻居来创建少数类的合成实例。SMOTE在DMwR包中以R形式实现(Luis Torgo的书“使用R进行数据挖掘,通过案例研究进行学习”,CRC Press 2016)。
模型拟合方法
在损失函数中应用特定于类别的权重(少数情况下较大的权重)。
对于基于树的方法,可以像Cieslak等人所倡导的那样,将Hellinger距离用作节点杂质函数。“ Hellinger距离决策树是健壮且不倾斜的”(此处为Weka代码。)
使用一个类别分类器,学习(取决于模型)一个类别的概率密度或边界,并将另一类别视为离群值。
当然,不要将准确性用作模型构建的指标。科恩的河童是一个合理的选择。
模型评估方法
如果您的模型返回了预测的概率或其他分数,请选择一个决策权衡点,以对错误进行适当的权衡(使用独立于训练和测试的数据集)。在R中,程序包OptimalCutpoints实现了许多算法,包括对成本敏感的算法,用于确定截止时间。
我的理解是,这是机器学习社区中一个活跃的研究领域,没有很好的答案,但是潜在的解决方案越来越多。如果指定要考虑的特定算法,则可能会得到更好的答案。
如果您使用的是参数模型(逻辑回归),那么问题就不大了,您可以根据损失函数(从假阴性到假阳性的成本)改变阈值
如果您使用的是机器学习算法,这可能会比较棘手。Max Kuhn在“应用预测模型”的第16章中做了总结。但是要总结的挑战性话题。如果您不想买这本书,则可以在本章的AppliedPredictiveModeling软件包中找到R代码,根据您对R和所使用的算法的熟悉程度,R代码可能就足够了。
通常,讨论围绕欠采样/过采样+/-成本敏感算法进行。也可以使用类似jous-boost的变体。
此类讨论的一个示例:Chen等“使用随机森林学习不平衡数据”
http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf
您可以看一下scikit-learn的实现。注意class_ weight参数,该参数可以具有类权重或'auto'的字典的值:
sklearn.svm.SVC类(C = 1.0,kernel ='rbf',degree = 3,gamma = 0.0,coef0 = 0.0,收缩= True,概率= False,tol = 0.001,cache_size = 200,class_weight = None,详细= False,max_iter = -1,random_state =无)
您可以使用class_weight参数的值播放,该参数可以是类权重字典或'auto'。在“自动”模式下,学习算法将根据每个类别中的样本数量自动为每个类别分配权重。
scikit-learn还有其他几种分类算法,其中一些接受类权重。