我使用了weka和python关于线性回归来预测价格数据。我得到了与附件相同的结果。linear-regression in weka linear-regression in python
我用来预测的数据如下:
英尺,床,浴缸,车库,年龄,价格
1048,2,1,1,30,104900
1052,2,2,1,20,128750
1057,2,1,1,32,102900
1060,2,2,1,31,114900
1072,2,2,1,31,119500
1076,2,1,1,24,110500
但是当我使用spark(1.6)mllib来分析这些数据时,我得到了不同的结果。我已经改变了交互的价值和步骤。但结果远离weka和python的结果。
我将数据格式化为以下类型。
104900,1048 2 1 1 30
128750,1052 2 2 1 20
102900,1057 2 1 1 32
代码是这样的:
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.regression.LinearRegressionModel
import org.apache.spark.mllib.regression.LinearRegressionWithSGD
// Load and parse the data
val data = sc.textFile("/root/data/house.data")
val parsedData = data.map { line =>
val parts = line.split(',')
LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
}.cache()
// Building the model
val numIterations = 2000
val stepSize = 0.00000001
val algorithm = new LinearRegressionWithSGD()
algorithm.setIntercept(true)
algorithm.optimizer.setNumIterations(numIterations)
algorithm.optimizer.setStepSize(stepSize)
val model = algorithm.run(parsedData)
println(model.weights)
println(model.intercept)
答案 0 :(得分:0)
我的第一个猜测是你的stepSize
太小了。
首先,尝试使用stepSize 0.1,检查结果是否发生了变化。
Weka和Python使用封闭形式的解决方案,因此结果是相同的。在Spark中你用StochasticGradientDescent迭代,所以 结果不一样,但应该接近。
如果结果不均匀,请尝试检查一些非常简单的数据代码。例如,对于像[(1,1),(2,2),(3,3),(4,4),...]这样的数据,你得到截距0和系数1吗?您是否还检查了所有内容是否都已正确解析以及RDD的外观如何?