0

私はSparkでロジスティック回帰モデルを持っています。
出力ベクトルからlabel = 1の確率を抽出し、areaUnderROCを計算します。Sparkでのロジスティック回帰モデルの面積UnderROCの計算

val assembler = new VectorAssembler() 
.setInputCols(Array("A","B","C","D","E"))--for example 
.setOutputCol("features") 

val data = assembler.transform(logregdata) 

val Array(training,test) = data.randomSplit(Array(0.7,0.3),seed=12345) 
val training1 = training.select("label", "features") 
val test1 = test.select("label", "features") 

val lr = new LogisticRegression() 
val model = lr.fit(training1) 
val results = model.transform(test1) 
results.show() 

label|   features|  rawPrediction| probability| prediction| 
+-----+--------------------+--------------------+--------------------+---------- 

    0.0|(54,[13,31,34,35,...|[2.44227333947447...|[0.91999457581425...|  0.0| 

import org.apache.spark.mllib.evaluation.MulticlassMetrics 

val predictionAndLabels =results.select($"probability",$"label").as[(Double,Double)].rdd 
val metrics = new MulticlassMetrics(predictionAndLabels) 
val auROC= metrics.areaUnderROC() 

確率は以下のようになります。[0.9199945758142595,0.0800054241857405]
はどのようにして、ベクターからラベル= 1の確率を抽出し、AUCを計算することができますか?

+0

質問がわかりません。デフォルトでは、areaUnderROCがどのように計算するのでしょうか? – jamborta

+0

そうだと思います。 Pythonでは、同じモデルがAUC = 91%、Spark AUC = 73%を返します。私はそれを手動でテストしたい。どのようにしてベクトルから確率値を抽出することができますか? – Liron

答えて

0

基礎となるRDDから値を得ることができます。これにより、元のラベルのtupleが返され、P(label=1)の予測値が返されます。

val predictions = results.map(row => (row.getAs[Double]("label"), row.getAs[Vector]("probability")(0))) 
+0

私はそれを試して、それは動作していない...私はこの警告を得ています: org.apache.spark.sql.AnalysisException:確率#5477から値を抽出できません。 – Liron

+0

ありがとうございます。それは働いているようだ。予測:org.apache.spark.sql.Dataset [(Double、Double)] = [_1:double、_2:double] しかし結果を表示することはできません。このエラーが発生しました:org.apache.spark.ml.linalg.DenseVectorをorg.apache.spark.mllib.linalg.Vectorにキャストできません。私が受け取った予測をどのように見ることができますか? – Liron

+0

エラーを再現できませんが、正確な型を指定しようとすると 'import org.apache.spark.ml.linalg.DenseVector'、次に' val predictions = results.map(row =>(row.getAs [Double ]( "label")、row.getAs [DenseVector]( "確率")())) – jamborta

関連する問題