Wie kann man auf einzelne Bäume in einem Modell zugreifen, das von Spark ML RandomForestClassifier generiert wurde? Ich benutze die Scala-Version von RandomForestClassifier.Zugriff auf einzelne Bäume in einem Modell, das von RandomForestClassifier (spark.ml-version) erstellt wurde?
4
A
Antwort
6
Eigentlich hat es trees
Attribut:
import org.apache.spark.ml.attribute.NominalAttribute
import org.apache.spark.ml.classification.{
RandomForestClassificationModel, RandomForestClassifier,
DecisionTreeClassificationModel
}
val meta = NominalAttribute
.defaultAttr
.withName("label")
.withValues("0.0", "1.0")
.toMetadata
val data = sqlContext.read.format("libsvm")
.load("data/mllib/sample_libsvm_data.txt")
.withColumn("label", $"label".as("label", meta))
val rf: RandomForestClassifier = new RandomForestClassifier()
.setLabelCol("label")
.setFeaturesCol("features")
val trees: Array[DecisionTreeClassificationModel] = rf.fit(data).trees.collect {
case t: DecisionTreeClassificationModel => t
}
Wie Sie das einzige Problem zu sehen ist Typen richtig zu machen, damit wir diese tatsächlich nutzen:
trees.head.transform(data).show(3)
// +-----+--------------------+-------------+-----------+----------+
// |label| features|rawPrediction|probability|prediction|
// +-----+--------------------+-------------+-----------+----------+
// | 0.0|(692,[127,128,129...| [33.0,0.0]| [1.0,0.0]| 0.0|
// | 1.0|(692,[158,159,160...| [0.0,59.0]| [0.0,1.0]| 1.0|
// | 1.0|(692,[124,125,126...| [0.0,59.0]| [0.0,1.0]| 1.0|
// +-----+--------------------+-------------+-----------+----------+
// only showing top 3 rows
Hinweis:
Wenn Sie mit Pipelines arbeiten, können Sie auch einzelne Bäume extrahieren:
import org.apache.spark.ml.Pipeline
val model = new Pipeline().setStages(Array(rf)).fit(data)
// There is only one stage and know its type
// but lets be thorough
val rfModelOption = model.stages.headOption match {
case Some(m: RandomForestClassificationModel) => Some(m)
case _ => None
}
val trees = rfModelOption.map {
_.trees // ... as before
}.getOrElse(Array())
Verwandte Themen
- 1. Zugriff auf einzelne Bytes in einem Array
- 2. ASP.NET MVC 2: Benutzerdefinierte Validierung, Zugriff auf das gesamte Modell?
- 3. WPF - Zugriff auf das Steuerelement, das auf MouseOver angezeigt wurde
- 4. Zugriff auf ein Objekt, das in einer anderen Klasse erstellt wurde
- 5. Zugriff auf $ Scope-Modell
- 6. Zugriff auf ein Textfeld/Movieclip in einem dynamischen Clip, der in einer for-Schleife erstellt wurde?
- 7. Wie ein Bild zu einem Modell für die Klassifizierung passieren, nachdem das Modell in Tensorflow erstellt wurde
- 8. codeIgniter -Wie Zugriff auf eine Textdatei von einem Modell
- 9. Zugriff auf Arraylist, die in einer Aktivität in einem anderen erstellt wurde mit Index
- 10. Zugriff auf RDS-Datenbank, die mit Elastic Beanstalk erstellt wurde
- 11. Zugriff auf das 3D-Modell mit C# Skript in Unity3d
- 12. Zugriff auf Attribute von verschiedenen Modell
- 13. Zugriff auf den Optionsfeldwert, der mit ng-repeat erstellt wurde
- 14. Wie Zugriff auf Wert von einem QML-Kombinationsfeld, das Werte von Tabelle/Modell abruft?
- 15. Zugriff auf ein Objekt, das in einer anderen Klasse erstellt wurde
- 16. Wie "abonniere" Sie Ereignisse auf einem Objekt, das von einer Factory in Java erstellt wurde?
- 17. Zugriff auf das Modell aus einer Layoutansicht in Grails
- 18. Kann eine Web-API ActionFilterAttribute Zugriff auf das Modell haben?
- 19. Das Modell schlägt in der Validierung fehl, ist aber erstellt
- 20. Zugriff auf einzelne Flächenelemente mit d3
- 21. Zugriff auf einzelne Werte von k bedeutet Clustering in r
- 22. Zugriff auf Validierungsregeln in zugehörigem Modell (CakePHP)
- 23. Zugriff auf andere Modelle in einer Sequelize-Modell-Hook-Funktion
- 24. Zugriff auf Daten im Modell von JavaScript in Sicht
- 25. JavaFX - Zugriff auf DOM-Modell der WebEngine
- 26. Zugriff auf das übergeordnete Modell aus der Teilansicht
- 27. Zugriff auf einzelne Azure Cloud Service-Endpunkte
- 28. Zugriff auf Qt Layout in der Benutzeroberfläche von Code erstellt?
- 29. Zugriff auf Objekte, die von ModelBinders in ActionFilters erstellt werden
- 30. Was ist das größte Webformular, das mit Orbeon erstellt wurde?
Hallo Zero323, danke für deine Hilfe. Ich habe eine Follow-up-Frage. Ich möchte Regeln aus Baumknoten mit hohen Vorhersagewahrscheinlichkeiten extrahieren (sagen wir über 0,3). In 'spark.ml' ist das Objekt" instantationStats "in einem internen Knoten des Baums privat und das sind auch die Methoden toOld und fromOld. Ich brauche diese Details (auf die ich nicht zugreifen kann, da sie privat sind), um etwas extrahieren zu können. In ähnlicher Weise liefert die Aufteilung des Knotens keine Informationen über seine Kategorien und Merkmalschwellenwerte. Gibt es eine Möglichkeit, Regeln aus Knoten mit hoher Wahrscheinlichkeit in 'spark.ml' zu extrahieren? –
Mir ist keine triviale Lösung bekannt. Sie sollten es getrennt fragen - vielleicht hat jemand bereits eine Lösung an Ort und Stelle. Wenn Sie dies tun, bitte ping mich mit einem Link. – zero323
Danke zero323. Ich habe gerade die Frage "Wie man Regeln von Spark ML RandomForestClassifier Modell (Scala-Version) extrahieren?". Bleib auf dem laufenden, wenn ich eine Antwort bekomme. –