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"))
获得决策树的特征划分结果如下
每个节点上依次是划分数据的特征名称
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
这一般是因为没有配置环境变量导致的,解决方法参考这里