私はSparkとPythonの両方に新しいです。私はスパークを使用して、わずか2つのクラス(0と1)でロジスティック回帰モデルを訓練しました。列車のデータフレームを使って訓練しました。私lr_predictionsがどのように見える列「確率」があり、今バイナリ分類のためのロジスティック回帰のスパーク:2つのクラスを予測するための新しいしきい値の適用
lr_predictions = lrModel.transform(test)
:私は私のテストデータフレームを使用して予測を実行した
その後# Model definition:
lr = LogisticRegression(featuresCol = "lr_features", labelCol = "targetvar")
# Pipeline definition:
lr_pipeline = Pipeline(stages = indexStages + encodeStages +[lr_assembler, lr])
# Fit the logistic regression model:
lrModel = lr_pipeline.fit(train)
:
は、これは私のパイプラインモデルが定義されていた方法です私にネストされたリスト。例えば、最初のセルには次のものが含まれます。 [1,2] []、[0.88,0.11]]
クラス1の確率(= 0)は0.88、クラス2の確率(= 1)は0.11である。デフォルト(閾値= 0.5)で
この観察は0として 予測される。しかし、私は(私の場合、それは0.21'S)F値を最大値(bestThreshold)の実測値:
fMeasure = lr_summary.fMeasureByThreshold
bestThreshold = fMeasure.orderBy(fMeasure['F-Measure'].desc()).first().threshold
I bestThresholdを 'probability'列に適用し、bestThresholdに基づいて0.5を基準にしたクラス割り当て(0または1)を含む新しい 列(たとえば 'pred_new')を取得したいとします。
「確率」列が複雑すぎるので、私は、以下のコードを使用することはできません。
from pyspark.sql.functions import when
lr_predictions = lr_predictions.withColumn("prob_best", \
when(lr_predictions["probability"] >= bestThreshold, 1).otherwise(0)
私は新しいしきい値に基づいて新しい列に「確率」をマッピングする必要がありますする必要があります感じています。しかし、私はそれを行う方法がわかりません - この「複雑な(私にとって)」確率の列の構造を考えると、
ありがとうございました!
(+1)...! – desertnaut