Ich arbeite am Random Forest Classifier und dieser Klassifikator hat ein Wahrscheinlichkeitsattribut in der Vorhersage. Wenn Sie also die Zusammenfassung von predictions = model.transform(testData)
wie print(predictions)
in PySpark erhalten, erhalten Sie die Wahrscheinlichkeit für jedes Label. Sie können den folgenden Code und die Ausgabe des Codes überprüfen:
from pyspark.sql import DataFrame
from pyspark import SparkContext, SQLContext
from pyspark.ml import Pipeline
from pyspark.ml.classification import RandomForestClassifier
from pyspark.ml.feature import StringIndexer, VectorIndexer
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
# Split the data into training and test sets (30% held out for testing)
(trainingData, testData) = data.randomSplit([0.7, 0.3])
# Train a Random Forest model.
rf = RandomForestClassifier(labelCol="label", featuresCol="features", numTrees=12, maxDepth=10)
# Chain RF in a Pipeline
pipeline = Pipeline(stages=[rf])
# Train model.
model = pipeline.fit(trainingData)
# Make predictions.
predictions = model.transform(testData)
Jetzt beginnt Ihre Arbeit von hier aus. Versuchen Sie, Vorhersagen und Werte von Vorhersagen zu drucken
print(predictions)
Ausgabe:
DataFrame[label: double, features: vector, indexed: double, rawPrediction: vector, probability: vector, prediction: double]
Im DataFrame haben Sie also die Wahrscheinlichkeit, die die Wahrscheinlichkeit jedes indexierten Labels ist. Außerdem habe ich sie wie folgt überprüft:
print predictions.show(3)
Ausgabe:
+-----+--------------------+-------+--------------------+--------------------+----------+
|label| features|indexed| rawPrediction| probability|prediction|
+-----+--------------------+-------+--------------------+--------------------+----------+
| 5.0|(2000,[141,260,50...| 0.0|[34.8672584923246...|[0.69734516984649...| 0.0|
| 5.0|(2000,[109,126,18...| 0.0|[34.6231572522266...|[0.69246314504453...| 0.0|
| 5.0|(2000,[185,306,34...| 0.0|[34.5016453103805...|[0.69003290620761...| 0.0|
+-----+--------------------+-------+--------------------+--------------------+----------+
only showing top 3 rows
Nur für Wahrscheinlichkeitsspalte:
print predictions.select('probability').take(2)
Ausgabe:
[Row(probability=DenseVector([0.6973, 0.1889, 0.0532, 0.0448, 0.0157])), Row(probability=DenseVector([0.6925, 0.1825, 0.0579, 0.0497, 0.0174]))]
In meinem Fall habe ich 5 indexedLabels und so die Wahrscheinlichkeit Vektorlänge ist 5 , Hoffnung dies wird Ihnen helfen, das bekommen Wahrscheinlichkeit jeder Etiketten in Ihr Problem.
PS: Sie werden wahrscheinlich die Wahrscheinlichkeit , in erhalten Decision Tree , logistischer Regression . Versuchen Sie einfach, die Zusammenfassung von zu erhalten model.transform(testData)
.
Um alle Wahrscheinlichkeiten anstelle aller Klassen anstelle nur der beschrifteten Klasse zu erhalten, gibt es in Spark MLlib oder ML bisher keine explizite Methode (Spark 2.0). Sie können die Logistic Regression-Klasse jedoch aus dem MLlib-Quellcode erweitern, um diese Wahrscheinlichkeiten abzurufen.
Ein Beispielcode-Snippet finden Sie in dieser Antwort .
quelle