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

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

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

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

【问题讨论】:

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

标签: python machine-learning scikit-learn random-forest decision-tree


【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 2019-09-23
      • 1970-01-01
      • 2021-07-22
      • 2021-08-04
      • 2017-08-10
      • 2020-07-05
      • 2021-12-25
      • 2019-11-18
      相关资源
      最近更新 更多