鸢尾花数据集决策树:如何提取、可视化versicolor类决策规则?
提取决策树指定类别专属规则及可视化实现方案
规则提取实现
现有代码已经完成了决策树全量叶节点路径的规则生成,只需要增加一步类别匹配过滤,就能拿到目标类别的专属规则:
- 设定需要提取的目标类别名(本示例为
versicolor) - 遍历全量规则字符串,匹配规则中输出类别字段与目标类别名一致的条目,即为该类别的专属决策规则
对应补充代码如下:
# 定义待提取规则的目标类别 target_class = "versicolor" # 筛选匹配的目标规则 target_rules = [rule for rule in rules if f"class: {target_class}" in rule] # 输出筛选结果 print(f"=== {target_class}类专属决策规则 ===") for rule in target_rules: print(rule)
基于示例的训练结果,筛选得到的versicolor类专属规则为:
if (petal length (cm) > 2.45) and (petal width (cm) <= 1.75) and (petal length (cm) <= 4.95) then class: versicolor (proba: 97.92%) | based on 48 samples
规则可视化实现
可通过两种直观方式展示目标类别的规则,无需额外依赖外部工具:
1. 决策树结构高亮可视化
直接调用scikit-learn内置的决策树绘制接口,在完整树结构上用高亮边框标记所有判定为versicolor的叶节点路径:
plt.figure(figsize=(12, 8)) # 绘制基础决策树 tree.plot_tree( clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True ) # 高亮versicolor类对应的叶节点 ax = plt.gca() for patch in ax.patches: # 匹配iris数据集versicolor类的默认色块特征,设置红色加粗边框 if patch.get_facecolor()[1] == 0.7: patch.set_edgecolor('red') patch.set_linewidth(3) plt.title(f"决策树结构(红色边框为{target_class}类的判定路径)") plt.show()
2. 规则文本清单可视化
将筛选得到的结构化规则渲染为清晰的文本展示页,直接呈现每条规则的判定条件、分类结果、置信度和覆盖样本量:
plt.figure(figsize=(10, 6)) plt.axis('off') # 拼接规则文本 display_text = f"目标类别:{target_class}\n\n" for idx, rule in enumerate(target_rules, 1): display_text += f"规则{idx}:\n{rule}\n\n" plt.text(0.05, 0.95, display_text, fontsize=12, va='top') plt.title("versicolor类专属决策规则清单") plt.show()
效果说明
- 提取得到的规则为该类别的完整判定逻辑,覆盖所有会被判定为versicolor的样本路径
- 筛选过程完全基于已生成的规则文本匹配,不需要改动原有决策树遍历的核心逻辑,兼容性好
- 可视化输出可直接嵌入分析报告或演示材料,不需要额外处理
内容的提问来源于stack exchange,提问作者James P.
相关产品推荐
相关产品推荐

