ML パイプラインと DataFrame API を使用して、ロジスティック モデルから予測確率を抽出しようとしています。予測確率の出力は、以下に示すように、各クラス (0, 1) の予測確率を格納する列ベクトルです。クラス 1 の確率だけを抽出するにはどうすればよいでしょうか。ありがとうございます。
prob
"[0.13293408418007766,0.8670659158199223]"
"[0.1335112097146626,0.8664887902853374]"
ML パイプラインと DataFrame API を使用して、ロジスティック モデルから予測確率を抽出しようとしています。予測確率の出力は、以下に示すように、各クラス (0, 1) の予測確率を格納する列ベクトルです。クラス 1 の確率だけを抽出するにはどうすればよいでしょうか。ありがとうございます。
prob
"[0.13293408418007766,0.8670659158199223]"
"[0.1335112097146626,0.8664887902853374]"
このような UDF は機能するはずです。
import org.apache.spark.sql.functions.udf
val getPOne = udf((v: org.apache.spark.mllib.linalg.Vector) => v(1))
model.transform(testDf).select(getPOne($"probability"))
そのような方法でも目標に到達できます。
import org.apache.spark.mllib.linalg.Vector
model.transform(dataDF).select("prob").map(row => row.getAs[Vector]("prob").toArray)
そうすれば、今欲しいものを手に入れることができます。
また、最初に確率列を org.apache.spark.mllib.linalg.DenseVector にケース化してから、要素を抽出することもできます。
model.transform(testDf).select("probability").map(e=> e.asInstanceOf[DenseVector]).map(e=> e(1))