2012-07-19 178 views
1

我使用Weka成功构建了J48(C4.5)决策树。我现在想评估我的功能有多么有效或重要。如何在Weka构建的决策树中查找特征重要性

一个显而易见的方法是遍历所有功能,一次删除一个,并重新运行分类测试每次看到它配备了具有分类准确率的最大跌幅。但是,这可能会隐藏功能之间的相互依赖关系。

不过,我基于理解的C4.5算法思维的另一种方法。由于树中的每个分割都基于最大信息增益决策,因此靠近树根的特征上的分割必定意味着该特征比树中具有较低特征的分割具有更多的信息增益。因此,对于在树内几次分割中出现的给定特征F,我可以计算出F距离根的平均距离。然后,我可以按平均距离排列所有特征,最低的平均值是最有价值的特征。这是否是一个正确的方法?

+0

平均距离根节点不会一个好的度量标准,因为信息增益的量在树中的各个层次上不是恒定的。最好总结与特定特征对应的所有分支的信息增益,并将每个分支处的增益与分支处存在的采样数加权。 – bogatron 2012-07-20 13:45:08

+0

Weka是否提供每个拆分信息获取的数据?输出文本文件不显示它。 – stackoverflowuser2010 2012-07-20 17:36:36

+0

我不知道Weka是否明确存储了信息增益,但如果知道每个节点处的观察值/采样数,则可以自己计算。我不知道默认树形可视化是否让您可以选择查看每个节点上的样本数量,但是有一个插件可显示该信息:http://weka.wikispaces。com/Explorer + tree +可视化+插件 – bogatron 2012-07-23 18:11:16

回答

2

您可以尝试“属性选择”选项卡。 在那里,您可以执行PCA分析,CfsSubsetEval + BestFirst ...以确定哪些是最佳功能。

另一个(但手动)方法,是训练和测试具有不同属性的相同的算法和统计使用T-检验,以确定该改善是统计学显著检查结果。

+0

有没有办法在不离开Weka的情况下进行T检验? – Vladtn 2013-08-01 11:27:38

+0

@弗拉特恩:实验者窗口旨在执行统计显着性检验 – 2016-06-06 01:18:01

4

位一个死灵后的...但在这里不用...

我假设你想知道属性的重要性的原因,所以你可以只使用相关建设更美好的树属性。

如果是这样的话,你总是可以使用元分类“AttributeSelectedClassifier”然后把J48作为分类。

则必须选择属性的子集的评估和搜索方法。例如,我目前正在使用“WrapperSubsetEval”评估器和“GeneticSearch”搜索算法进行实验。

对于包装评估,你需要选择一个分类器(它实际上会建立分类器,看它在搜索测试的每个属性子集上的表现如何),在我的情况下,我使用j48(匹配它我想要使​​用属性集的分类器)。

通过这些设置,就会演变属性的子集(用遗传算法),这与J48的算法效果很好,然后它会运行与设置演进属性对数据的J48。

这是计算成本,因为它必须建立和测试许多树,但它可以提供良好的结果(然后试图通过做手工快得多):)