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?
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)
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%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%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:)
Tags und Links apache-spark random-forest pyspark apache-spark-mllib