有兩種方法可以在Spark中進行邏輯迴歸:spark.ml
和spark.mllib
。
隨着DataFrames您可以使用spark.ml
:
import org.apache.spark
import sqlContext.implicits._
def p(label: Double, a: Double, b: Double) =
new spark.mllib.regression.LabeledPoint(
label, new spark.mllib.linalg.DenseVector(Array(a, b)))
val data = sc.parallelize(Seq(p(1.0, 0.0, 0.5), p(0.0, 0.5, 1.0)))
val df = data.toDF
val model = new spark.ml.classification.LogisticRegression().fit(df)
model.transform(df).show
你得到的原始預測和概率:
+-----+---------+--------------------+--------------------+----------+
|label| features| rawPrediction| probability|prediction|
+-----+---------+--------------------+--------------------+----------+
| 1.0|[0.0,0.5]|[-19.037302860930...|[5.39764620520461...| 1.0|
| 0.0|[0.5,1.0]|[18.9861466274786...|[0.99999999431904...| 0.0|
+-----+---------+--------------------+--------------------+----------+
隨着RDDS您可以使用spark.mllib
:
val model = new spark.mllib.classification.LogisticRegressionWithLBFGS().run(data)
這種模式確實不公開原始預測和概率。你可以看看predictPoint
。它乘以向量並選擇最高預測的類。權重是可公開訪問的,因此您可以複製該算法並保存預測,而不是僅返回最高的那個。
感謝您的回答。雖然,我正在努力理解如何使用ProbabilisticClassificationModel。 1)我不確定LogisticRegressionWithLBFGS是ProbabilisticClassificationModel的子類。 2)網上沒有關於如何使用ProbabilisticClassificationModel的例子 3)什麼是將數據幀傳遞給轉換函數?我用於LogisticRegression的訓練集? 對不起,有很大的困惑。 – bobo32
你說得對,這並不明顯。我會在幾個小時內回來一個完整的例子! –
關於此@Daniel Darabos的任何更新 – bobo32