在jupyter笔记本中显示scikit决策树图

问题描述 投票:0回答:5

我目前正在创建一个机器学习 jupyter 笔记本作为一个小项目,并想展示我的决策树。然而,我能找到的所有选项都是导出图形然后加载图片,这相当复杂。

因此,我想问是否有一种方法可以直接显示我的决策树,而不需要导出和加载图形。

python scikit-learn jupyter-notebook decision-tree
5个回答
10
投票

从 scikit-learn 版本 21.0(大约 2019 年 5 月)开始,现在可以使用 scikit-learn 的 tree.plot_tree 通过 matplotlib 绘制决策树,而无需依赖 graphviz。

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

X, y = load_iris(return_X_y=True)

# Make an instance of the Model
clf = DecisionTreeClassifier(max_depth = 5)

# Train the model on the data
clf.fit(X, y)

fn=['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)']
cn=['setosa', 'versicolor', 'virginica']

# Setting dpi = 300 to make image clearer than default
fig, axes = plt.subplots(nrows = 1,ncols = 1,figsize = (4,4), dpi=300)

tree.plot_tree(clf,
           feature_names = fn, 
           class_names=cn,
           filled = True);

# You can save your plot if you want
#fig.savefig('imagename.png')

您的 jupyter 笔记本中将输出类似于以下内容的内容。
enter image description here

代码改编自这篇post


9
投票

您可以直接使用

IPython.display
:

显示树
import graphviz
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier,export_graphviz
from sklearn.datasets import make_regression

# Generate a simple dataset
X, y = make_regression(n_features=2, n_informative=2, random_state=0)
clf = DecisionTreeRegressor(random_state=0, max_depth=2)
clf.fit(X, y)
# Visualize the tree
from IPython.display import display
display(graphviz.Source(export_graphviz(clf)))

4
投票

有一个名为 graphviz 的简单库,您可以使用它来查看决策树。在这里你不必导出图形,它会直接为你打开树的图形,你可以稍后决定是否要保存它。您可以按以下方式使用它 -

import graphviz
from sklearn.tree import DecisionTreeClassifier()
from sklearn import tree

clf = DecisionTreeClassifier()
clf.fit(trainX,trainY)
columns=list(trainX.columns)
dot_data = tree.export_graphviz(clf,out_file=None,feature_names=columns,class_names=True)
graph = graphviz.Source(dot_data)
graph.render("image",view=True)
f = open("classifiers/classifier.txt","w+")
f.write(dot_data)
f.close()

因为 view = True 你的图表将在渲染后立即打开,但如果你不希望这样而只想保存图表,你可以使用 view = False

希望这有帮助


4
投票

我知道有 4 种绘制 scikit-learn 决策树的方法:

  • 使用
    sklearn.tree.export_text
    方法打印树的文本表示
  • 使用
    sklearn.tree.plot_tree
    方法绘图(需要
    matplotlib
  • 使用
    sklearn.tree.export_graphviz
    方法绘图(需要
    graphviz
  • 使用
    dtreeviz
    包绘制(需要
    dtreeviz
    graphviz

您可以在此博文中找到 sklearn 决策树的不同可视化与代码片段的比较:链接

使用 Jupiter Notebook 时,请记住用绘图显示变量。

dtreeviz
的示例:

from dtreeviz.trees import dtreeviz # remember to load the package

viz = dtreeviz(clf, X, y,
                target_name="target",
                feature_names=iris.feature_names,
                class_names=list(iris.target_names))

viz # display the tree

0
投票
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz

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

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

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

$ 点-Tpng iris_tree.dot -o iris_tree.png

  • 首先运行代码,然后从命令行运行点脚本。
  • 确保在代码所在的同一文件夹中运行它。
  • 您将获得一个名为“iris_tree.png”的图像文件。iris_tree 图像
© www.soinside.com 2019 - 2024. All rights reserved.