【发布时间】:2016-12-12 00:59:12
【问题描述】:
查看问题底部的更新
总结:我有一个行为不是线性的数据集。我正在尝试使用 Spark 的 MLlib(v1.5.2) 来拟合一个更像多项式函数的模型,但我总是得到一个线性模型。我不知道是否无法使用线性回归获得非线性模型。
[TL;DR] 我正在尝试拟合一个模型,该模型可以充分代表以下数据:
我的代码非常简单(和每个教程中的差不多)
object LinearRegressionTest {
def main(args: Array[String]): Unit = {
val sc = new SparkContext("local[2]", "Linear Regression")
val data = sc.textFile("data2.csv")
val parsedData = data.map { line =>
val parts = line.split(',')
LabeledPoint(parts(1).toDouble, Vectors.dense(parts(2).toDouble))
}.cache()
val numIterations = 1000
val stepSize = 0.001
val model = LinearRegressionWithSGD.train(parsedData, numIterations, stepSize)
sc.stop
}
}
获得的结果在正确的范围内,但它们始终处于单调递增的行中。我试图绕着它转,但我无法弄清楚为什么没有拟合更好的曲线。
有什么建议吗?
谢谢大家
更新
问题是由我们使用的 spark 和 spark-ml 库的版本引起的。出于某种原因,即使我提供了更多功能(输入数据的平方或立方版本),1.5.2 版也没有拟合更好的曲线。在升级到版本 2.0.0 并从主 API(不是 RDD API)的弃用 LinearRegressionWithSGD 切换到 LinearRegression 后,算法的行为符合预期。使用这种新方法,模型拟合了正确的曲线。
【问题讨论】:
标签: scala apache-spark linear-regression apache-spark-mllib