Weka - 分类和回归树

Weka - Classification and Regression Trees

我有 运行 个分类和回归树 (trees.REPTree) 在 housing.arff 数据上(66% 百分比拆分)。这就是结果。

REPTree
============

RM < 6.84
|   LSTAT < 14.8
|   |   LSTAT < 9.75 : 25.15 (88/21.02) [47/55.38]

叶子上的值(25.15、88/21.02 等)是什么意思?

我已经尝试对一个答案进行逆向工程,如果我得到更明确的信息,我会更新它。

I 运行 Toyota Corolla 数据集上的一棵非常小的树(预测二手车的价格)。这是树:

Age_08_04 < 32.5
|   Weight < 1297.5 : 18033.54 (121/6009564.12) [59/6768951.55]
|   Weight >= 1297.5 : 27945.83 (3/10945416.67) [3/22217291.67]
Age_08_04 >= 32.5
|   Age_08_04 < 57.5 : 11363.26 (296/2827594.01) [144/2999066.05]
|   Age_08_04 >= 57.5 : 8636.94 (537/1487597.91) [273/1821232.47]

叶节点中的第一个数字 (18033、27945、11363、8636) 是这些汽车的预测价格。 第二个和第四个数字加起来就是实例数: 121 + 59 + 3 + 3 ...+273 = 1436,整个集合中的实例数。 第二个数字加起来是 957(三分之二的实例),第四个数字加起来是 479(三分之一的实例)。

Witten 等人的书(数据挖掘:实用机器学习工具和技术,第 4 版),第 6.1 节(决策树:错误估计错误率)注释

"One way of coming up with an error estimate is the standard verification technique: hold back some of the data originally given and use it as an independent test set to estimate the error at each node. This is called reduced-error pruning." (Kindle location 5403)

所以我认为它正在对数据进行 2/3、1/3 分割,即使我们也在进行 10 折交叉验证。

第三个和第五个数字(在/之后)似乎是MSE。做一点代数,第五个数字的加权平均值与交叉验证摘要中报告的均方根误差和相对平方根误差一致。 (不太准确,但我不认为我会期望它)

同样,如果我找到更多信息,我会更新这个答案——我很乐意从其他人那里获得更明确的信息。

为了对标称数据进行分类,https://www.analyticsvidhya.com/blog/2020/03/decision-tree-weka-no-coding/ 表示这些是 REPTree(减少错误修剪树)算法的产物。

  • 括号前的值为分类值
  • 第一个括号中的第一个值是总数 来自该叶子中训练集的实例。第二个值是 该叶中错误分类的实例数
  • 第二个括号中的第一个值是总数 来自该叶子中修剪集的实例。第二个值是 该叶中错误分类的实例数

这与@zbicyclist 的一致。

为了完整起见,这是来自 Weka 邮件列表(日期为 2015/01/21)的 Eibe Frank answer 的副本:

请记住,REPTree 将数据拆分为一个增长集和一个修剪集(除非您关闭修剪)。

假设你有

  (A/B) [C/D]

这个表达式的含义取决于你是在做回归(你的案例)还是分类。

回归案例

  • A: 生长集中所有实例的总权重,最终出现在这个叶子
  • B: 生长集中最终出现在该叶中的所有实例的平均平方误差(考虑实例权重)
  • C:剪枝集中最终出现在这个叶子中的所有实例的总权重
  • D: 修剪集中最终出现在该叶中的所有实例的平均平方误差(考虑实例权重)

分类案例

  • A:同上A
  • B: 生长集中所有错误分类实例的总权重,最终出现在这个叶子中
  • C:同上C
  • D: 修剪集中所有错误分类实例的总权重,最终出现在该叶子中

修剪集上的误差通常会比增长集上的误差大,就像您的情况一样。

请注意,A、B、C 和 D 是在 回溯之前计算的,这是 REPTree 算法中发生在生长和修剪树之后的最后一步。在反向拟合期间,来自修剪集的数据用于更新在叶节点处所做的预测,以便这些预测基于完整的组合数据。

输出中显示的叶节点处的预测是 backfitting 后获得的预测。