以下是我的问题的简要说明:
我绘制了几个分类器的ROC图,并且都表现出很好的AUC,这意味着分类很好。但是,当我测试分类器并计算f-measure时,我得到一个非常低的值。我知道这个问题是由数据集的类偏度引起的,到现在为止,我发现了两个处理它的选项:
我选择了第一个选项,这解决了我的问题(f-measure令人满意)。但是,现在,我的问题是:哪种方法更可取?有什么区别?
P.S:我正在使用Python和scikit-learn库。
答案 0 :(得分:29)
加权(成本敏感)和阈值处理都是成本敏感型学习的有效形式。简而言之,您可以将两者想象如下:
基本上有人断言,对稀有类别进行错误分类的“成本”比对公共类进行错误分类更糟糕。在SVM,ANN和Random Forest等算法中,在算法级别应用。这里的限制包括算法是否可以处理权重。此外,这方面的许多应用试图解决进行更严重的错误分类的想法(例如,将患有胰腺癌的人分类为无癌症)。在这种情况下,您知道为什么要确保即使在不平衡的设置中也要对特定类进行分类。理想情况下,您希望像任何其他模型参数一样优化成本参数。
如果算法返回概率(或其他一些分数),则可以在构建模型后应用阈值。基本上,您将分类阈值从50-50更改为适当的权衡级别。这通常可以通过生成评估度量的曲线(例如,F-度量)来优化。这里的限制是你正在做出绝对的权衡。截止值的任何修改都将降低预测其他类别的准确性。如果您的大多数普通班级的概率非常高(例如大多数超过0.85),那么您更有可能使用此方法取得成功。它也与算法无关(假设算法返回概率)。
采样是应用于不平衡数据集的另一种常见选项,可为类分布带来一些平衡。基本上有两种基本方法。
<强> 副取样 强>
提取较小的多数实例集并保留少数。这将导致较小的数据集,其中类之间的分布更接近;但是,您丢弃了可能有价值的数据。如果您有大量数据,这也可能是有益的。
<强> 过采样 强>
通过复制它们来增加少数群体实例的数量。这将导致更大的数据集保留所有原始数据,但可能会引入偏差。但是,当您增加大小时,您可能也会开始影响计算性能。
高级方法
还有一些更复杂的方法可以帮助解决潜在的偏见。其中包括此SMOTE中有关不平衡数据集和CSL的SMOTEBoost,EasyEnsemble和prior question等方法。
关于使用不平衡数据构建模型的另一个注意事项是,您应该牢记您的模型指标。例如,F-measures等指标未考虑真实的负利率。因此,通常建议在不平衡的设置中使用Cohen’s kappa metric等指标。