Weka - 二元分类给出极化/偏差结果

时间:2013-03-18 14:51:58

标签: classification weka

首先我要说,我是一名WEKA新手。

我正在使用WEKA进行二进制分类问题,其中某些指标用于获取实例的是/否答案。

为了举例说明这个问题,这里是我用288个实例得到的混淆矩阵,使用BayesNet得到190个“是”和98个“否”值:

  a   b   <-- classified as
190   0 |   a = yes
 98   0 |   b = no

这种绝对分离也是一些其他分类器的情况,但不是所有分类器。也就是说,即使分类器没有极化到这种程度的价值,它们确实对主要类别有明确的偏见。例如,这是RandomForest的结果:

  a   b   <-- classified as
164  34 |   a = yes
 62  28 |   b = no

我很确定我错过了一些非常明显的东西。

1 个答案:

答案 0 :(得分:1)

最初,我认为BayesNet就是问题所在。但现在我认为这是你的数据。

正如评论中已经指出的那样,我认为问题在于不平衡的类。大多数分类器都会针对准确性进行优化,在您的情况下,BayesNet为(190 + 0) / 288 = 0.66,RandomForest为(164 + 28) / 288 = 0.67

正如您所看到的,区别并不大,但RandomForest找到的解决方案稍微好一些。它看起来“更好”,因为它没有把所有东西放在同一个类中,但我真的怀疑它在统计上是否显着。

像Lars Kotthoff提到的那样,很难说。我还猜测这些功能对于更好的分离来说还不够好。

除了尝试其他分类器之外,您还应该重新考虑您的绩效指标。 准确度仅在每个类的实例数大致相同时才有效。在其他情况下,MCCAUC是不错的选择(但由于实现不兼容,AUC将无法与WEKA中的LibSVM一起使用)。

您的示例的MCC对于BayesNet将为0,

  ((164*28) - (62*34)) / sqrt((164+62)*(34+28)*(164+34)*(62+28))
= (4592 - 2108) / sqrt(226 * 62 * 198 * 90)
= 2484 / sqrt(249693840)
= 0,15719823927071640929

对于RandomForest。所以RandomForest显示了稍好的结果,但效果不是很好。

很难说没有看到你的数据,但它们可能没有很好的分离。