2016-12-05 23 views
0

Я новичок в Scala и Spark в целом. Я использую этот код для регрессии (на основе этой ссылки Spark official site):Средняя квадратичная ошибка (MSE) возвращает огромное количество

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 link.

Так что мой вопрос: почему MSE равна 889717.74 (что огромное количество)?

Edit: Как предложил комментаторы, я попытался это:

1) Я изменил шаг по умолчанию и MSE теперь возвращается, как NaN

2) Если бы я попробовать этот конструктор: LinearRegressionWithSGD.train (parsedData, numIterations, stepSize, intercept = True) искровая оболочка возвращает ошибку (ошибка: не найдена: значение True)

+0

Возможный дубликат [pyspark Линейная регрессия Пример из официальной документации - Плохие результаты?] (Http://stackoverflow.com/questions/33842982/pyspark-linear-regression-example-from-official-documentation-bad-results) –

ответ

0

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