如何在 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 中可视化回归树的主要内容,如果未能解决你的问题,请参考以下文章