PySpark & ​​MLLib: Zufällige Forest Feature-Bedeutungen

8

Ich versuche, die Feature-Imports eines zufälligen Forest-Objekts, das ich mit PySpark trainiert habe, zu extrahieren. Ich sehe jedoch kein Beispiel dafür, dies irgendwo in der Dokumentation zu tun, noch ist es eine Methode von RandomForestModel.

Wie kann ich Feature-Imports aus einem RandomForestModel Regressor oder Klassifikator in PySpark extrahieren?

Hier ist der Beispielcode, der in der Dokumentation bereitgestellt wird, um uns zu starten. Es wird jedoch nicht erwähnt, dass darin wichtige Merkmale enthalten sind.

%Vor%

Ich sehe kein Attribut model.__featureImportances_ - wo finde ich das?

    
Bryan 10.03.2015, 19:01
quelle

5 Antworten

5

Ich muss Sie enttäuschen, aber Feature-Imports in MLlib-Implementierung von RandomForest werden einfach nicht berechnet, so dass Sie sie nicht von irgendwoher bekommen können, indem Sie ihre Berechnung selbst implementieren.

So finden Sie es heraus:

Sie rufen eine Funktion RandomForest.trainClassifier deinfed hier Ссылка

Er ruft callMLlibFunc("trainRandomForestModel", ...) auf, was ein Aufruf der Scala-Funktion RandomForest.trainClassifier oder RandomForest.trainRegressor ist (je nach Algo), die Ihnen RandomForestModel object zurückgibt.

Dieses Objekt wird in Ссылка und erweitert TreeEnsembleModel in derselben Quelldatei. Und leider speichert diese Klasse nur Algorithmus (Regression oder Klassifikation), Bäume selbst, relative Gewichte der Bäume und Kombinationsstrategie (Summe, Durchschnitt, Abstimmung). Es speichert leider keine Feature-Imports und berechnet sie nicht einmal (siehe Ссылка für den Berechnungsalgorithmus)

    
0x0FFF 13.03.2015 10:55
quelle
5

UPDATE für Version & gt; 2.0.0

Ab der Version 2.0.0, wie Sie sehen können hier , FeatureImportances ist für Random Forest verfügbar.

Tatsächlich finden Sie hier , dass

  

Die DataFrame-API unterstützt zwei Hauptalgorithmen für Baumensembles: Random Forests und Gradient-Boosted Trees (GBTs). Beide verwenden spark.ml-Entscheidungsbäume als Basismodelle.

     

Benutzer können mehr Informationen über Ensemblealgorithmen im MLlib Ensemble Handbuch finden.   In diesem Abschnitt zeigen wir die DataFrame-API für Ensembles.

     

Die Hauptunterschiede zwischen dieser API und der ursprünglichen MLlib-Ensembles-API sind:

     
  • Unterstützung für DataFrames und ML Pipelines
  •   
  • Trennung von Klassifikation vs. Regression
  •   
  • Verwendung von DataFrame-Metadaten zur Unterscheidung von fortlaufenden und kategorialen Merkmalen
  •   
  • mehr Funktionalität für zufällige Gesamtstrukturen: Schätzungen der Merkmalsbedeutung sowie die vorhergesagte Wahrscheinlichkeit jeder Klasse (klassenabhängige bedingte Wahrscheinlichkeiten) für die Klassifizierung.
  •   

Wenn Sie Feature-Wichtigkeitswerte haben möchten, müssen Sie mit ml Paket arbeiten, nicht mit mllib und Dataframes verwenden.

Unten finden Sie ein Beispiel, das Sie finden können hier :

%Vor%     
titiro89 24.06.2017 15:48
quelle
2

Die Wichtigkeit der Funktion ist jetzt in Spark 1.5 implementiert. Siehe behobenes JIRA-Problem. Sie können einen Vektor von Feature-Importanzen erhalten mit:

%Vor%     
j_houg 20.11.2015 03:28
quelle
1

Ich glaube, dass das jetzt funktioniert. Sie können anrufen:

%Vor%

Wenn Fit auf einem RandomForestClassifier ausgeführt wird, wird ein RandomForestClassificationModel zurückgegeben, für das die gewünschten featureImportances berechnet wurden. Ich hoffe, dass das hilft:)

    
nbertagnolli 20.01.2017 16:34
quelle
0

Wie gesagt, Feature-Wichtigkeit ist nicht implementiert.

Vielleicht kann das für Sie nützlich sein: Ссылка

    
JoseM LM 13.03.2015 16:27
quelle