Machine learning 如何在Weka构建的决策树中发现特征重要性

Machine learning 如何在Weka构建的决策树中发现特征重要性,machine-learning,data-mining,weka,decision-tree,Machine Learning,Data Mining,Weka,Decision Tree,我使用Weka成功构建了一个J48(C4.5)决策树。我现在想评估我的功能的有效性或重要性 一个明显的方法是循环遍历所有特征,一次删除一个,然后每次重新运行分类测试,看看哪个特征的分类精度下降最大。但是,这可能会隐藏功能之间的相关性 然而,我正在考虑另一种基于理解C4.5算法的方法。由于树中的每个分割都基于最大信息增益决策,因此,靠近树根的特征上的分割必须意味着该特征的信息增益大于树下具有不同特征的分割。因此,对于一个给定的特征F,它发生在树中的几个分裂中,我可以计算F到根的平均距离。然后,我可

我使用Weka成功构建了一个J48(C4.5)决策树。我现在想评估我的功能的有效性或重要性

一个明显的方法是循环遍历所有特征,一次删除一个,然后每次重新运行分类测试,看看哪个特征的分类精度下降最大。但是,这可能会隐藏功能之间的相关性

然而,我正在考虑另一种基于理解C4.5算法的方法。由于树中的每个分割都基于最大信息增益决策,因此,靠近树根的特征上的分割必须意味着该特征的信息增益大于树下具有不同特征的分割。因此,对于一个给定的特征F,它发生在树中的几个分裂中,我可以计算F到根的平均距离。然后,我可以按平均距离对所有特征进行排序,最低的平均值是最有价值的特征。这是正确的方法吗?

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


另一种(但手动)方法是训练和测试具有不同属性的相同算法,并使用T检验对结果进行统计检查,以确定改进是否具有统计显著性。

一点necro post。。。但这是

我假设您想知道属性重要性的原因是,您可以只使用相关属性来构建更好的树

如果是这种情况,您可以始终使用元分类器“AttributeSelectedClassifier”,然后将j48作为分类器

然后必须为属性子集选择求值器和搜索方法。例如,我目前正在试验“WrapperSubsetEval”计算器和“GeneticSearch”搜索算法

对于包装器评估,您需要选择一个分类器(它将实际构建分类器,以查看它在搜索测试的每个属性子集上的表现如何),在我的例子中,我使用的是j48(与我想要使用属性集的分类器相匹配)

通过这些设置,它将进化出一个属性子集(使用遗传算法),该子集与j48算法很好地配合,然后它将使用进化后的属性集在您的数据上运行j48


这在计算上是昂贵的,因为它必须构建和测试许多树,但它可以给出很好的结果(并且比尝试手动操作要快得多):

距离根节点的平均距离不是一个很好的指标,因为树中不同级别的信息增益不是恒定的。最好将与特定特征对应的所有分支的信息增益相加,用分支上存在的样本数加权每个分支上的增益。Weka是否提供了每个分割上的信息增益数据?输出文本文件没有显示它。我不知道Weka是否明确存储了信息增益,但如果您知道每个节点上的观测值/样本数,您可以自己计算。我不知道默认的树可视化是否为您提供了查看每个节点上样本数量的选项,但有一个插件将显示该信息:有没有一种方法可以在不离开Weka的情况下进行t检验?@Vladtn:Experiator窗口用于执行统计显著性检验