如何在 pyspark 中可视化决策树模型/对象?

Posted

技术标签:

【中文标题】如何在 pyspark 中可视化决策树模型/对象?【英文标题】:How to visualize decision tree model/object in pyspark? 【发布时间】:2018-01-24 19:19:01 【问题描述】:

有什么方法可以可视化/绘制使用 pyspark 中的 mllib 或 ml 库创建的决策树。还如何获取叶节点中的记录数等信息。谢谢

【问题讨论】:

使用python绘制pyspark决策树也可以。 【参考方案1】:

您可以得到所有叶子节点的统计数量,如杂质,增益,基尼,模型数据文件分类到每个标签的元素数组。

数据文件位于您保存模型/数据/的位置

model.save(location)
modeldf = spark.read.parquet(location+"data/*")

此文件包含决策树甚至随机森林所需的大部分元数据。您可以提取所有需要的信息,例如。

noderows = modeldf.select("id","prediction","leftChild","rightChild","split").collect()
df = pd.Dataframe([[rw['id'],rw['gain],rw['impurity'],rw['gini']] for rw in noderows if rw['leftChild'] < 0 and rw['rightChild'] < 0])
df.show()

【讨论】:

【参考方案2】:

首先,您需要使用 model.toDebugString 在随机森林模型上获得类似的输出:

 "RandomForestClassificationModel (uid=rfc_6c4ceb92ba78) with 20 trees
  Tree 0 (weight 1.0):
    If (feature 0 <= 3="" 10="" 1.0)="" if="" (feature="" <="0.0)" predict:="" 0.0="" else=""> 6.0)
       Predict: 0.0
     Else (feature 10 > 0.0)
      If (feature 12 <= 12="" 63.0)="" predict:="" 0.0="" else="" (feature=""> 63.0)
       Predict: 0.0
    Else (feature 0 > 1.0)
     If (feature 13 <= 3="" 1.0)="" if="" (feature="" <="3.0)" predict:="" 0.0="" else=""> 3.0)
       Predict: 1.0
     Else (feature 13 > 1.0)
      If (feature 7 <= 7="" 1.0)="" predict:="" 0.0="" else="" (feature=""> 1.0)
       Predict: 0.0
  Tree 1 (weight 1.0):
    If (feature 2 <= 11="" 15="" 1.0)="" if="" (feature="" <="0.0)" predict:="" 0.0="" else=""> 0.0)
       Predict: 1.0
     Else (feature 15 > 0.0)
      If (feature 11 <= 11="" 0.0)="" predict:="" 0.0="" else="" (feature=""> 0.0)
       Predict: 1.0
    Else (feature 2 > 1.0)
     If (feature 12 <= 5="" 31.0)="" if="" (feature="" <="0.0)" predict:="" 0.0="" else=""> 0.0)
       Predict: 0.0
     Else (feature 12 > 31.0)
      If (feature 3 <= 3="" 4.0)="" predict:="" 0.0="" else="" (feature=""> 4.0)
       Predict: 0.0
  Tree 2 (weight 1.0):
    If (feature 8 <= 4="" 6="" 1.0)="" if="" (feature="" <="2.0)" predict:="" 0.0="" else=""> 10875.0)
       Predict: 1.0
     Else (feature 6 > 2.0)
      If (feature 1 <= 1="" 36.0)="" predict:="" 0.0="" else="" (feature=""> 36.0)
       Predict: 1.0
    Else (feature 8 > 1.0)
     If (feature 5 <= 4="" 0.0)="" if="" (feature="" <="4113.0)" predict:="" 0.0="" else=""> 4113.0)
       Predict: 1.0
     Else (feature 5 > 0.0)
      If (feature 11 <= 11="" 2.0)="" predict:="" 0.0="" else="" (feature=""> 2.0)
       Predict: 0.0
  Tree 3 ...

将其保存在某个 .txt 文件下,然后使用:https://github.com/tristaneljed/Decision-Tree-Visualization-Spark

【讨论】:

我们是否只在 pyspark 中有一些东西,而不是使用 d3.js。 model.toDebugString 也没有给出进入每个节点的数据百分比。

以上是关于如何在 pyspark 中可视化决策树模型/对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Spark (PySpark 1.4.1) 中可视化/绘制决策树?

R语言使用rpart包构建决策树模型选择合适的树大小(复杂度)检查决策树对象的cptable内容(树的大小由分裂次数定义预测误差)使用plotcp函数可视化决策树复杂度参数与交叉验证错误的关系

如何在 R 中绘制/可视化 C50 决策树?

dtreeviz:一款超级棒的决策树可视化和模型可解释性工具

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

机器学习中---分类模型--决策树模型