Weka中决策树和混淆矩阵中正确/错误分类实例之间的差异

Posted

技术标签:

【中文标题】Weka中决策树和混淆矩阵中正确/错误分类实例之间的差异【英文标题】:Difference between correctly / incorrectly classified instances in decision tree and confusion matrix in Weka 【发布时间】:2012-08-05 21:18:25 【问题描述】:

我一直在使用 Weka 的 J48 决策树对关键词的频率进行分类 在 RSS 提要到目标类别。我想我可能有问题 将生成的决策树与正确分类的数量相协调 报告的实例和混淆矩阵中的实例。

例如,我的一个 .arff 文件包含以下数据提取:

@attribute Keyword_1_nasa_Frequency numeric
@attribute Keyword_2_fish_Frequency numeric
@attribute Keyword_3_kill_Frequency numeric
@attribute Keyword_4_show_Frequency numeric
...
@attribute Keyword_64_fear_Frequency numeric
@attribute RSSFeedCategoryDescription BFE,FCL,F,M, NCA, SNT,S

@data
0,0,0,34,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,10,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
...
20,0,64,19,0,162,0,0,36,72,179,24,24,47,24,40,0,48,0,0,0,97,24,0,48,205,143,62,78,
0,0,216,0,36,24,24,0,0,24,0,0,0,0,140,24,0,0,0,0,72,176,0,0,144,48,0,38,0,284,
221,72,0,72,0,SNT
...
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,S

依此类推:总共有 64 个关键字(列)和 570 行,每个行都包含一天中某个关键字在提要中出现的频率。在这种情况下,有 57 个供稿 10 天,总共有 570 条要分类的记录。每个关键字都有前缀 带有代理编号并以“频率”为后缀。

我对决策树的使用是使用 10 倍验证的默认参数。

Weka 报告如下:

Correctly Classified Instances         210               36.8421 %
Incorrectly Classified Instances       360               63.1579 %

具有以下混淆矩阵:

=== Confusion Matrix ===

   a   b   c   d   e   f   g   <-- classified as
  11   0   0   0  39   0   0 |   a = BFE
   0   0   0   0  60   0   0 |   b = FCL
   1   0   5   0  72   0   2 |   c = F
   0   0   1   0  69   0   0 |   d = M
   3   0   0   0 153   0   4 |   e = NCA
   0   0   0   0  90  10   0 |   f = SNT
   0   0   0   0  19   0  31 |   g = S

树如下:

Keyword_22_health_Frequency <= 0
|   Keyword_7_open_Frequency <= 0
|   |   Keyword_52_libya_Frequency <= 0
|   |   |   Keyword_21_job_Frequency <= 0
|   |   |   |   Keyword_48_pic_Frequency <= 0
|   |   |   |   |   Keyword_63_world_Frequency <= 0
|   |   |   |   |   |   Keyword_26_day_Frequency <= 0: NCA (461.0/343.0)
|   |   |   |   |   |   Keyword_26_day_Frequency > 0: BFE (8.0/3.0)
|   |   |   |   |   Keyword_63_world_Frequency > 0
|   |   |   |   |   |   Keyword_31_gaddafi_Frequency <= 0: S (4.0/1.0)
|   |   |   |   |   |   Keyword_31_gaddafi_Frequency > 0: NCA (3.0)
|   |   |   |   Keyword_48_pic_Frequency > 0: F (7.0)
|   |   |   Keyword_21_job_Frequency > 0: BFE (10.0/1.0)
|   |   Keyword_52_libya_Frequency > 0: NCA (31.0)
|   Keyword_7_open_Frequency > 0
|   |   Keyword_31_gaddafi_Frequency <= 0: S (32.0/1.0)
|   |   Keyword_31_gaddafi_Frequency > 0: NCA (4.0)
Keyword_22_health_Frequency > 0: SNT (10.0)

我的问题涉及将矩阵与树调和,反之亦然。据,直到...为止 我了解结果,像 (461.0/343.0) 这样的评级表明 461 个实例已被归类为 NCA。但是当矩阵只显示 153 时,这怎么可能呢?我是 不知道如何解释,所以欢迎任何帮助。

提前致谢。

【问题讨论】:

【参考方案1】:

每个叶子的括号中的数字应读作(此叶子上此分类的总实例数/此叶子上错误分类的数量)。

在您的第一个 NCA 叶示例中,它表示有 461 个测试实例被归类为 NCA,而在这 461 个测试实例中,有 343 个错误分类。所以在那个叶子上有 461-343 = 118 个正确分类的实例。

查看您的决策树,注意 NCA 也在其他叶子上。在 NCA 的 461 + 3 + 31 + 4 = 499 个总分类中,我计算出 118 + 3 + 31 + 4 = 156 个正确分类的实例。

您的混淆矩阵显示了 39 + 60 + 72 + 69 + 153 + 90 + 19 = 502 个 NCA 分类中的 153 个正确分类。

因此,树 (156/499) 和您的混淆矩阵 (153/502) 之间存在细微差别。

请注意,如果您从命令行运行 Weka,它会输出一棵树和一个混淆矩阵,用于测试所有训练数据以及使用交叉验证进行测试。请注意,您正在查看正确树的正确矩阵。 Weka 输出训练和测试结果,产生两对矩阵和树。你可能把它们弄混了。

【讨论】:

非常感谢您的清晰解释。我担心我的数据存在潜在问题,我有 72 个 .arff 文件需要分类。我知道树和矩阵之间的细微差别是错误分类的实例,我想总会有一些这样的实例。但是你的最后两句话让我感到困惑:我使用的是 10 倍验证,所以每个分类我应该只有一棵树和一个矩阵,不是吗? 是的,如果您使用的是 GUI,那么输出将是一棵树和一个矩阵,两者都用于交叉验证测试。我几乎总是从命令行使用 Weka,在这种模式下,它会输出一棵树和一个矩阵,用于测试训练数据和交叉验证测试。我会改变我的答案来反映这一点。 再次感谢:就我而言,我直接从 Java 生成树并通过 GraphViz 重新格式化它们以改善它们的外观。这种方法的唯一问题是我不确定如何输出混淆矩阵和其他细节。所以现在这部分是通过 GUI 手动完成的。 Weka GUI 已经具有生成树可视化的功能。在分类选项卡下,在右下角选择一个模型,然后右键单击以找到该选项。另外,感谢指向 GraphViz 的指针;我没听说过。您是否正在实施一些转换工具来将 Weka 输出移动到 GraphViz 中? 无转换实用程序。我让 Weka 将决策树编写为 .dot 文件,由 GraphViz 重新格式化。

以上是关于Weka中决策树和混淆矩阵中正确/错误分类实例之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WEKA 中测试分类数据集?

Weka RF 没有给出任何混淆矩阵或预期结果

为啥决策树显示正确分类而某些实例被错误分类

相同的决策树,不同的结果

Weka分类:错误+正确<总实例数,怎么来的?

训练和测试集在构建决策树和使用它进行分类中的作用