如何在 Weka 构建的决策树中找到特征重要性
Posted
技术标签:
【中文标题】如何在 Weka 构建的决策树中找到特征重要性【英文标题】:How to find feature importance in a Weka-built decision tree 【发布时间】:2012-07-19 02:32:51 【问题描述】:我使用 Weka 成功构建了 J48 (C4.5) 决策树。我现在想评估我的功能的有效性或重要性。
一种明显的方法是循环遍历所有特征,一次删除一个,然后每次重新运行分类测试,看看哪个特征的分类准确率下降幅度最大。但是,这可能会隐藏功能之间的相互依赖关系。
但是,我正在考虑基于理解 C4.5 算法的另一种方法。由于树中的每个拆分都基于最大信息增益决策,因此在更接近树根的特征上进行拆分必须意味着该特征比在树中具有不同特征的拆分具有更多的信息增益。因此,对于在树内多次分裂中出现的给定特征 F,我可以计算 F 到根的平均距离。然后我可以按平均距离对所有特征进行排名,最低的平均值是最有价值的特征。这是一个正确的方法吗?
【问题讨论】:
与根节点的平均距离不是一个好的度量标准,因为信息增益量在树中的各个级别上不是恒定的。最好将与特定特征对应的所有分支的信息增益相加,通过分支中存在的样本数对每个分支的增益进行加权。 Weka 是否提供每次拆分时的信息增益数据?输出文本文件不显示它。 我不知道Weka是否明确存储了信息增益,但如果您知道每个节点的观察/样本数,您可以自己计算。我不知道默认的树可视化是否为您提供了查看每个节点的样本数量的选项,但有一个插件可以显示该信息:weka.wikispaces.com/Explorer+tree+visualization+plugins 【参考方案1】:有点死灵帖子...但是这里有...
我假设您想知道属性重要性的原因是您可以仅使用相关属性来构建更好的树。
如果是这种情况,您可以随时使用元分类器“AttributeSelectedClassifier”,然后将 j48 作为分类器。
然后您必须选择属性子集的评估器和搜索方法。例如,我目前正在试验“WrapperSubsetEval”评估器和“GeneticSearch”搜索算法。
对于包装器评估,您需要选择一个分类器(它实际上会构建分类器,以查看它在搜索测试的每个属性子集上的表现如何),在我的情况下,我使用的是 j48(将其与我想使用属性集的分类器)。
通过这些设置,它将进化出与 j48 算法配合良好的属性子集(使用遗传算法),然后它将使用进化后的属性集在您的数据上运行 j48。
这在计算上很昂贵,因为它必须构建和测试许多树,但它可以产生良好的结果(并且比尝试手动完成要快得多):)
【讨论】:
【参考方案2】:您可以尝试“属性选择”选项卡。 在那里,您可以执行 PCA 分析、CfsSubsetEval + BestFirst... 以确定哪些是最佳特征。
另一种(但手动)方法是训练和测试具有不同属性的相同算法,并使用 T 检验统计检查结果,以确定改进是否具有统计显着性。
【讨论】:
有没有办法在不离开 Weka 的情况下进行 T 检验? @Vladtn:实验者窗口旨在执行统计显着性检验以上是关于如何在 Weka 构建的决策树中找到特征重要性的主要内容,如果未能解决你的问题,请参考以下文章