欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sklearn决策树可视化

程序员文章站 2024-03-19 20:23:16
...

决策树算法的原理,对于研究机器学习的同学想必都非常的熟悉。

在进行数据分析过程中,我们想进一步深入的了解数据特征重要性等等时,最好能够通过数据可视化的方式深入的了解每一个特征对于数据分类划分的重要性。

这时,我们学习《机器学习实战:基于Scikit-Learn和TensorFlow》的案例,引入sklearn模块中的graphviz模块

首先,构建存储图片位置的路径

import os

PROJECT_ROOT_DIR = "."
CHAPTER_ID = "decision_trees"
IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, "images", CHAPTER_ID)
os.makedirs(IMAGES_PATH, exist_ok=True)

随后,利用鸢尾花数据集构建模型

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target

tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)
tree_clf.fit(X, y)

在构建模型的基础上,导出模型结构,并进行可视化

from graphviz import Source
from sklearn.tree import export_graphviz

export_graphviz(
        tree_clf,
        out_file=os.path.join(IMAGES_PATH, "iris_tree.dot"),
        feature_names=iris.feature_names[2:],
        class_names=iris.target_names,
        rounded=True,
        filled=True
    )

Source.from_file(os.path.join(IMAGES_PATH, "iris_tree.dot"))

获得决策树的特征划分结果如下
Sklearn决策树可视化
每个节点上依次是
划分数据的特征名称
gini系数:数值越小划分的样本纯度越高,由图可见左下角节点的gini为0。
samples:划分到当前节点上的数据量
value:每种样本的数据量,对于左下角节点而言,由于gini为0,因此数据都被正确划分到了第一类,因此后两类数据为0,[50,0,0]
class:代表最终划分的类别,左下角划分到了setosa这一类


需要说明的一点是,在使用pip成功安装graphviz模块后,调用时可能会出现以下错误

ExecutableNotFound: failed to execute [‘dot’, ‘-Tsvg’], make sure the Graphviz executables are on your systems

这一般是因为没有配置环境变量导致的,解决方法参考这里