Weka - 给出极化/有偏结果的二元分类
Posted
技术标签:
【中文标题】Weka - 给出极化/有偏结果的二元分类【英文标题】:Weka - binary classification giving polarized/biased results 【发布时间】:2013-03-06 23:08:01 【问题描述】:首先让我说,我是 WEKA 新手。
我正在将 WEKA 用于二进制分类问题,其中某些指标被用于获得实例的是/否答案。
为了举例说明这个问题,这是我使用 BayesNet 得到的一组包含 288 个实例、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
我很确定我遗漏了一些非常明显的东西。
【问题讨论】:
那么你的问题是什么?主要类别几乎是另一个类别的两倍大,所以是的,所有分类器都会(并且应该)对它有偏见。 那么结果是否表明主要类正态的总偏差?例如,使用 BayesNet,我总是得到这个完全片面的结果,Kappa 统计值为 0。无论我使用什么数据集或指标。这应该如何工作? RandomForest 的结果是可以接受的,我承认,但 BayesNet 难倒我。 如果没有完整的数据,很难说发生了什么。这些特征可能无法实现良好的分离(至少就 BayesNet 而言)。我想简短的回答是不要将 BayesNet 用于这个特定的任务:) 这就是我要走的路——在这个领域有一个先例,将 NaiveBayes 和 BayesNet 等分类器用于 similar 最终目的,尽管我采用了一种基本不同的方法在这里,这很可能意味着使用这些分类器不是可行的方法。 如果你想减少偏差,你可以调整误差权重(例如通过 CostSensitiveClassifier)来补偿不均匀的类分布。 【参考方案1】:最初,我认为 BayesNet 是问题所在。但现在我认为这是你的数据。
正如 cmets 中已经指出的那样,我认为问题出在不平衡的类上。大多数分类器都针对准确性进行了优化,在您的情况下,BayesNet 的 (190 + 0) / 288 = 0.66
和 RandomForest 的 (164 + 28) / 288 = 0.67
。
如您所见,差异并不大,但 RandomForest 找到的解决方案稍微好一些。它看起来“更好”,因为它没有将所有东西放在同一个类中,但我真的怀疑它是否具有统计意义。
就像 Lars Kotthoff 提到的,很难说。我还猜想这些功能还不足以实现更好的分离。
除了尝试其他分类器之外,您还应该重新考虑您的绩效衡量标准。 准确度只有在每个类的实例数量大致相同时才有效。在其他情况下,MCC 或 AUC 是不错的选择(但由于实现不兼容,AUC 无法与 WEKA 中的 LibSVM 一起使用)。
对于 BayesNet,您的示例的 MCC 为 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 显示出稍微好一点的结果,但并没有那么好。
如果不查看您的数据很难判断,但它们可能无法很好地分离。
【讨论】:
我所从事的领域通常认为 70% 的准确率值相当不错。不过,无论如何,我也开始认为这些措施并不像人们想要的那样准确。另外,我认为你计算 MCC 的分母应该是 sqrt(249693840) 而不是 249693840。如果是这样,MCC 大约为 0.157。不是很好,很明显,但比 0.00001 更令人沮丧,我想 ;) 只是为了澄清一下——如果我暂时忘记了准确性(或缺乏准确性),那么我犯的不会导致分类器给出这样的结果的愚蠢错误,对吧?低准确度是我可以研究的,但我希望我不会犯一些导致异常分类器行为的基本错误。 @ShredOn 好吧,没有什么会立即出现在我的脑海中,但出现错误并非不可能。您能否在问题中包含产生结果的(希望是简短的)源代码? 我可以大致告诉你我在做什么。我正在解析一个具有各种段的文本文件,并查找特定的单词模式是否出现在给定的段中,并基于此将该段标记为是/否。对同一文本文件的单独处理会产生一个图形,该图形包含作为基于其他一些标准互连的节点的段。我正在创建一个 .arff 文件,其中包含每个节点(即段)的图形指标以及该段是/否,然后使用图形指标进行分类。 @ShredOn 呼,这有点复杂。但是复杂性会导致错误,所以我只能告诉你再次检查算法,你可以使用它来创建你的特征。以上是关于Weka - 给出极化/有偏结果的二元分类的主要内容,如果未能解决你的问题,请参考以下文章