Reptree (WEKA),只对数值属性的值排序一次

Posted

技术标签:

【中文标题】Reptree (WEKA),只对数值属性的值排序一次【英文标题】:Reptree (WEKA), Only sorts values for numeric attributes once 【发布时间】:2014-05-27 09:25:18 【问题描述】:

我正在使用 weka 的 Reptree 算法。这个算法没有详细的文档,只有:

快速决策树学习器。使用信息增益/方差减少构建决策/回归树,并使用减少错误修剪(使用反向拟合)对其进行修剪。只对数值属性的值排序一次。缺失值通过将对应的实例分割成小块来处理(即如在 C4.5 中)。

谁能解释一下,“只对数值属性的值排序一次”是什么意思。

我正在尝试重新实现这个算法,但仍然没有得到接近的结果。

谢谢

卢波米尔

【问题讨论】:

【参考方案1】:

我自己最近一直在寻找关于 Weka 的 RepTree 的相同答案,并且偶然发现了这篇文章,我无法在网上找到足够的答案,所以我打开了源代码并投入其中。

“只对数值属性的值排序一次。”意味着该算法在运行开始时对数据集中的所有数字字段进行一次排序,然后使用排序列表计算每个树节点中的正确拆分。

通过阅读源代码,我大致了解了该算法的工作原理:

1) 对于非数字(离散)的分类,它使用具有减少错误修剪的常规决策树 [http://www.stat.cmu.edu/~ryantibs/datamining/lectures/23-tree.pdf] 它最大化熵值,你可以在weka.core.ContingencyTables下的源代码中看到确切的方法实现 - entropyConditionedOnRows(double[][] matrix)

2) 对于 numeric 值的分类,变化在于它使总方差最小化。

另外,对我来说,弄清楚输出树非常令人困惑,特别是在数字分类中,这个叶子输出意味着什么:

years_since >= 9.03 : 4.64 (8/0.68) [8/6.76]

1) 在non-numeric (discrete)分类中,':'后面的第一个数字是树的分类值,()括号中的第一个数字是正确分类的实例数从该叶下的训练集中,第二个数字是叶下但具有不同分类值的实例的数量,而在 [] 括号中,第一个数字是来自修剪集的正确分类的数量,第二个数字是数字是错误的分类。 [http://weka.8497.n7.nabble.com/about-REPtree-td15188.html]

2) 在 numeric 分类中,这个输出意味着别的东西。 ':' 后面的第一个数字是训练集中属于该叶子的样本的平均值 (x_mean),() 括号中的第一个数字是属于该叶子的值的权重 -k- (权重表示我从代码中得出的样本数),而第二个值是样本的方差,即 sum_i_from_1_to_k((x_i-x_mean)^2)/k。在 [] 括号中,第一个是来自剪枝 -L- 集中属于该叶子的样本数量,而第二个数字是相对于训练集中 x_mean 的方差,即 sum_i_from_1_to_L((y_i-x_mean)^2 )/升

希望对你有帮助

【讨论】:

很好,很好地研究代码...thanx...我实际上尝试了另一个包 - scikit learn in python...似乎更快更准确... 是的,现在我使用 python ML 包而不是 weka

以上是关于Reptree (WEKA),只对数值属性的值排序一次的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WEKA 中执行属性的名义到数值转换?

weka中类属性标称值的排序

Weka 常用分类算法效果比较

为啥 WEKA NaiveBayes 分类器会给出标准。开发。全零属性的值?

WEKA 无法识别 .csv 文件中的不同属性

Weka学习笔记01:初探Weka世界