如何在 Python 中可视化回归树

Posted

技术标签:

【中文标题】如何在 Python 中可视化回归树【英文标题】:How to visualize a Regression Tree in Python 【发布时间】:2018-04-23 03:12:51 【问题描述】:

我希望可视化使用 scikit learn 中的任何集成方法(梯度提升回归器、随机森林回归器、装袋回归器)构建的回归树。 接近的I've looked at this question和this question 它处理分类树。但这些问题需要用到 SKLearn 中的回归模型所不具备的“树”方法。

但它似乎没有产生结果。 我遇到了问题,因为这些树的回归版本没有 .tree 方法(该方法仅适用于分类版本)。 我想要一个类似于 this 但基于 sci kit 学习构造树的输出。

我已经探索了与对象相关的方法,但无法给出答案。

【问题讨论】:

Visualizing decision tree in scikit-learn的可能重复 再次,那是决策树,不是回归树,函数的方法不一样。 我觉得你有点困惑......你的意思是用tree.DecisionTreeRegressor() 改变那个问题的tree.DecisionTreeClassifier() 不会做这项工作?或者您只对 ensemble 的树感兴趣(在这种情况下,您的问题主题表述不佳)? sklearn.tree.export_graphviz 功能不限于DecisionTreeClassifiers。您同样可以将其与回归等效项一起使用。 @desertnaut;我很抱歉。你是对的。这个问题确实是重复的,你指出我的答案解决了我的问题。 【参考方案1】:

正如我所评论的,分类和回归决策树图之间没有功能差异。改编自 docs 的回归玩具示例:

from sklearn import tree
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)

然后,类似地,来自分类docs 的一些代码关于graphviz

import graphviz 
dot_data = tree.export_graphviz(clf, out_file='tree.dot') 

我们最终得到一个文件tree.dot,看起来像这样:

digraph Tree 
node [shape=box] ;
0 [label="X[0] <= 1.0\nmse = 1.0\nsamples = 2\nvalue = 1.5"] ;
1 [label="mse = 0.0\nsamples = 1\nvalue = 0.5"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="mse = 0.0\nsamples = 1\nvalue = 2.5"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;

现在,您可以继续将其可视化,如文档中所示 - 但如果由于某种原因您无法呈现 Graphviz 对象,您可以使用方便的服务WebGraphviz(在链接问题中为relevant answer +1) ;结果如下所示:

您自己的答案,即为了可视化而一路安装graphlab,听起来有点矫枉过正......

最后一句话:不要被树形布局的表面差异所欺骗,这仅反映了各个可视化包的设计选择;您绘制的回归树(诚然,它看起来不太像 )在结构上类似于从文档中获取的分类 - 只需想象一个自上而下的树,您的 @987654333 @ 顶部的节点,然后是绿色节点并终止于蓝色和橙色节点(并将“是/否”替换为“真/假”)...

【讨论】:

【参考方案2】:

经过大量搜索,我发现 Turi 提供的软件可以模拟 回归 树,不要与 决策 树混淆。 Hope this helps

对于它的价值,回归树如下所示:

虽然决策/分类器树如下所示:

虽然它们看起来一样,但创建它所需的属性是 tree_,它仅适用于 classifiers,而不是 regressors。

【讨论】:

不过,您似乎很困惑...您链接到 决策树 分类器与 随机森林 回归器... Decision trees 来分类器和回归器版本... 这个现在已经被 Apple 开源了,叫做 Turi Create【参考方案3】:

DTR 将为所有值创建一个分区级别 检查图表 - Click here

from sklearn.tree import DecisionTreeRegressor

#Getting X and y variable
X = df.iloc[:,1:2].values
y =df.iloc[:,2].values

#Creating a model object and fiting the data
reg = DecisionTreeRegressor(random_state=0)
reg.fit(X,y)

# Visualising the Decision Tree Regression results (higher resolution)
X_grid = np.arange(min(X), max(X), 0.01)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X, y, color = 'red')
plt.plot(X_grid, reg.predict(X_grid), color = 'blue')
plt.title('Truth or Bluff (Decision Tree Regression)')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

【讨论】:

以上是关于如何在 Python 中可视化回归树的主要内容,如果未能解决你的问题,请参考以下文章

如何查看回归树? [复制]

从 sklearn 随机森林回归器可视化决策树

Python数模笔记-StatsModels 统计回归可视化

如何在python中可视化决策树?

决策树决策树与Jupyter小部件的交互式可视化

以 png 或 pdf 可视化 scikit-learn/sklearn 多输出决策树回归