1

一般来说,我是 Scala 和 Spark 的新手。我正在使用此代码进行回归(基于此链接Spark 官方网站):

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

// Load and parse the data
val data = sc.textFile("Year100")
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 = 100
val stepSize = 0.00000001
val model = LinearRegressionWithSGD.train(parsedData, numIterations,stepSize )

// Evaluate model on training examples and compute training error
val valuesAndPreds = parsedData.map { point =>
  val prediction = model.predict(point.features)
  (point.label, prediction)
    }
val MSE = valuesAndPreds.map{case(v, p) => math.pow((v - p), 2)}.mean()
println("training Mean Squared Error = " + MSE)

我正在使用的数据集可以在这里看到:Pastebin 链接

所以我的问题是:为什么 MSE 等于 889717.74(这是一个巨大的数字)?

编辑:正如评论员所建议的,我尝试了这些:

1)我将步骤更改为默认值,MSE 现在返回为 NaN

2)如果我尝试这个构造函数: LinearRegressionWithSGD.train(parsedData, numIterations,stepSize,intercept=True) spark-shell 返回错误(错误:未找到:值 True)

4

1 回答 1

1

您已经通过了一个很小的步长并将迭代次数限制为 100。您的参数可以更改的最大值是0.00000001 * 100= 0.000001。尝试使用默认步长,我想这会解决它。

于 2016-12-05T22:41:04.673 回答