Среднеквадратическая ошибка (MSE) возвращает огромное число

Я новичок в 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), искровая оболочка вернет ошибку (ошибка: не найдено: значение True)


person Ioannis Apomachos    schedule 05.12.2016    source источник


Ответы (1)


Вы преодолели крошечный размер шага и ограничили количество итераций до 100. Максимальное значение, на которое могут измениться ваши параметры, равно 0.00000001 * 100 = 0.000001. Попробуйте использовать размер шага по умолчанию, думаю, это исправит ситуацию.

person Tim    schedule 05.12.2016