2014-10-06 113 views
14

这里是我的问题的简要说明:在二元分类与类不平衡处理

  1. 我在工作监督学习任务训练二进制分类。
  2. 我有一个大型数据集不平衡分布:8个负面例子每一个正面。
  3. 我使用f-measure,即特异性和灵敏度之间的调和平均值来评估分类器的性能。

我绘制了几个分类器的ROC图,并且都显示出很好的AUC,这意味着分类是好的。但是,当我测试分类器并计算f-measure时,我得到的值非常低。我知道,这个问题是由数据集的类偏度和造成的,现在,我发现两个选项来对付它:

  1. 采用一个成本敏感方法,通过分配权重的数据集的情况下(看到这个post
  2. 阈值分类器返回的预测概率,以减少误报和漏报的数量。

我去了第一个选项,并解决了我的问题(f-measure是令人满意的)。但是,现在,我的问题是:哪种方法更可取?有什么区别?

P.S:我在scikit-learn库中使用Python。

+1

这更多的是一个统计而不是编程问题。目前还不清楚这些模型是如何构建的。你的数据集有多大?你是否使用分层CV或者你如何确定你没有过度配合你的模型(因此F值较低)?也就是说,一般来说,我会服从**对成本敏感的**,因为**阈值**方法对指定截断(IMHO)的用户更主观。 – cdeterman 2014-10-06 17:26:38

+0

我有3000个实例,是的,我使用10倍分层CV来防止过度配合。 – blueSurfer 2014-10-06 18:05:25

+0

我有二元分类问题,其中有97%/ 3%的偏度。平衡培训案例的数量已经大大提高了对3%结果的预测。我以前没有尝试在分类器中设置阈值。 – 2014-10-07 01:58:37

回答

26

加权(成本敏感)和阈值都是成本敏感的学习的有效形式。在简短的术语,你可以认为这两个如下:

加权

基本上一个断言的误分类稀有类的“成本”是不是误分类常见的类更糟。这是在算法级别应用于SVM,ANN和Random Forest等算法。这里的限制包括算法是否可以处理权重。此外,这方面的许多应用试图解决进行更严重错误分类的想法(例如将胰腺癌患者分类为非癌症患者)。在这种情况下,你知道为什么你要确保你分类特定的类,即使在不平衡的设置。理想情况下,您希望像任何其他模型参数一样优化成本参数。

阈值

如果该算法返回概率(或一些其它的分数),阈值可以被施加模型已建成后。从本质上讲,您可以将分类阈值从50-50更改为适当的权衡级别。这通常可以通过生成评估度量的曲线(例如F-度量)来优化。这里的限制是你正在做出绝对的权衡。中断的任何修改都会降低预测其他课程的准确性。如果你对大部分普通班级的概率极高(例如大多数在0.85以上),你很可能会用这种方法取得成功。它也是算法独立的(只要算法返回概率)。

采样

抽样是适用于不平衡数据集带来一些平衡类分布另一种常见的选择。基本上有两种基本方法。

欠采样

提取一组较小的大多数情况,并保持少数。这将导致更小的数据集,其中类之间的分布更接近;但是,您丢弃了可能有价值的数据。如果你有大量的数据,这也可能是有益的。

过采样

通过复制他们提高少数实例的数量。这将产生一个更大的数据集,它保留了所有原始数据,但可能引入偏差。但是,随着您增加尺寸,您可能也开始影响计算性能。

先进方法

但是也有一些更“复杂”来帮助解决潜在的偏见其他方法。这些包括如中引用的有关不平衡数据集和CSL的方法,如SMOTESMOTEBoostEasyEnsemble

建模

一个关于建筑模型与不平衡数据还值得注意的是,你应该记住你的模型度量。例如,诸如F-度量的度量不考虑真实的负面率。因此,通常建议在不平衡设置中使用诸如Cohen’s kappa metric等指标。

+0

我还会补充说下/上采样是第三种选择。丢弃多数课程,直到你有50/50的分数(或者在多课堂案例中统一分配)。这在理论上比加权更不吸引人,但如果你有很多数据,则具有实用优势。 – 2014-10-08 08:12:42

+0

@BenAllison,你是正确的,过度/欠采样是其他选择。我忽略了这个问题只是关于权重和阈值。我已经添加了一个关于采样的部分,以便更彻底。 – cdeterman 2014-10-08 12:14:36