在 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|
+-----+---------+--------------------+--------------------+----------+
使用 RDD,您可以使用 spark.mllib:
val model = new spark.mllib.classification.LogisticRegressionWithLBFGS().run(data)
此模型不公开原始预测和概率。你可以看看predictPoint。它将向量相乘并选择具有最高预测的类。权重可公开访问,因此您可以复制该算法并保存预测,而不是只返回最高的。