SPARK Mllib:マルチクラスロジスティック回帰、上位クラスではなくすべてのクラスの確率を取得する方法は?


7

LogisticRegressionWithLBFGSマルチクラス分類器のトレーニングに使用しています。

新しい目に見えないサンプルでモデルをテストするときに、すべてのクラス(最上位の候補クラスだけでなく)の確率を取得する方法はありますか?

PS私は必ずしもLBFGS分類子を使用する義務があるわけではありませんが、私の問題ではロジスティック回帰を使用したいと思います。したがって、別のLR分類子タイプを使用した解決策がある場合は、それを採用します。

回答:


4

私はランダムフォレスト分類器に取り組んでおり、この分類器には予測の確率属性があります。つまり、PySparkpredictions = model.transform(testData)ようprint(predictions)に要約を取得すると、各ラベルの確率が得られます。以下のコードとコードの出力を確認できます。

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)

ここから作業が始まります。予測と予測の値を出力してみてください

print(predictions)

出力:

DataFrame[label: double, features: vector, indexed: double, rawPrediction: vector, probability: vector, prediction: double]

だから、データフレームであなたが持っている確率がさらに私のようにそれをチェックして、各indexedLabelの確率です。

print predictions.show(3)

出力:

+-----+--------------------+-------+--------------------+--------------------+----------+
|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

確率列のみ:

print predictions.select('probability').take(2)

出力:

[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]))]

私の場合、5つの indexedLabelsがあるため、確率ベクトルの長さ5です。これが問題の各ラベルの確率を取得するのに役立つことを願っています。

シモンズ:あなたはおそらくディシジョンツリーロジスティック回帰で確率を得るでしょう。の概要を取得してみてくださいmodel.transform(testData)


参照については、ここで
クリシュナプラサード

1

ラベル付けされたクラスだけでなく、すべてのクラスではなくすべての確率を取得するために、Spark MLlibまたはMLには、これまで(Spark 2.0)の明示的なメソッドはありません。ただし、MLlibソースコードからLogistic Regressionクラスを拡張して、これらの確率を取得できます。

サンプルコードスニペットはこの回答にあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.