Как визуализировать модель/объект дерева решений в pyspark?

Есть ли способ визуализировать/построить дерево решений, созданное с использованием библиотеки mllib или ml в pyspark. Также как получить такую ​​информацию, как количество записей в листовых узлах. Спасибо


person Neo    schedule 16.08.2017    source источник
comment
Использование python для построения дерева решений pyspark также подходит.   -  person Neo    schedule 16.08.2017


Ответы (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

person Tiffany    schedule 17.08.2017
comment
У нас есть что-то только в pyspark вместо использования d3.js. Также model.toDebugString не дает, какой % данных поступает в каждый узел. - person Neo; 23.08.2017

Вы можете получить количество статистических данных всех листовых узлов, таких как примесь, усиление, Джини, массив элементов, классифицированных по каждой метке файлом данных модели.

Файл данных находится там, где вы сохраняете модель/данные/

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

Этот файл содержит большую часть необходимых метаданных для дерева решений или даже randomForest. Вы можете извлечь всю необходимую информацию, например.

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()
person pratiklodha    schedule 15.02.2019