繁体   English   中英

Spark中的线性回归权重和预测

[英]Linear regression weights and prediction in spark

我从带有Scala的Spark MLib库开始。 根据到目前为止的测试,我什至无法获得正确的结果。 正在尝试几种方法来实现它,但没有成功。 到目前为止,即使是相对简单的数据:

1,1
2,2
3,3
4,4
5,5
6,6
7,7
8,8
9,9
10,10

我无法取得任何体面的结果。 到目前为止,这是我的代码:[我猜是相当标准的]

import org.apache.spark.mllib.regression.LinearRegressionWithSGD
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.Vectors

val data = sc.textFile("/Users/jacek/oo.csv")
val parsedData = data.map { line =>
    val parts = line.split(',')
    LabeledPoint(parts(0).toDouble, Vectors.dense(Array(1.0, parts(1).toDouble)))
}

val numIterations = 20
val model = LinearRegressionWithSGD.train(parsedData, numIterations)

val valuesAndPreds = parsedData.map { point =>
    val prediction = model.predict(point.features)
    (point.label, prediction)
}

这些是我得到的结果:

model: org.apache.spark.mllib.regression.LinearRegressionModel = (weights=[-1.3423470408513295E21,-9.345181656001024E21], intercept=0.0)

scala> parsedData.take(10)
res48: Array[org.apache.spark.mllib.regression.LabeledPoint] = Array((1.0,[1.0,1.0]), (2.0,[1.0,2.0]), (3.0,[1.0,3.0]), (4.0,[1.0,4.0]), (5.0,[1.0,5.0]), (6.0,[1.0,6.0]), (7.0,[1.0,7.0]), (8.0,[1.0,8.0]), (9.0,[1.0,9.0]), (10.0,[1.0,10.0]))

scala> valuesAndPreds.take(10)
res49: Array[(Double, Double)] = Array((1.0,-6.133210764535208E21), (2.0,-1.2266421529070415E22), (3.0,-1.8399632293605623E22), (4.0,-2.453284305814083E22), (5.0,-3.0666053822676038E22), (6.0,-3.6799264587211245E22), (7.0,-4.293247535174645E22), (8.0,-4.906568611628166E22), (9.0,-5.519889688081687E22), (10.0,-6.1332107645352076E22))

scala>

我尝试了不同的LinearRegression算法设置,但运气不佳。 任何帮助表示赞赏。

尚未完全阅读您的问题(对不起),但您可能需要将拦截设置为true:

val alg = new LinearRegressionWithSGD()
alg.setIntercept(true)
alg.optimizer.setNumIterations(numIterations)
val model = alg.run(parsedData)

此外,20次迭代可能太少。

我猜想这里基于一些测试是回归优化器设置,它将使数字尽可能的好。

var regression = new LinearRegressionWithSGD().setIntercept(true)
regression.optimizer.setStepSize(0.1)
regression.optimizer.setNumIterations(1000)
val model2 = regression.run(parsedData)

感谢@pzecevic的帮助。 您已将我指出正确的方向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM