Линейная регрессия СГБД для временной последовательности спроса на продукт - PullRequest
0 голосов
/ 11 июня 2018

У меня есть следующие данные, на которые я хочу сделать прогнозы:

demanda.show

+-------------------+-----------------+
|               date|           demand|
+-------------------+-----------------+
|2011-01-01 00:15:00|68513.11533807972|
|2011-01-01 00:30:00|69180.30436102377|
|2011-01-01 00:45:00|69364.85057321166|
|2011-01-01 01:00:00|68350.48066028186|
|2011-01-01 01:15:00|66166.87430261481|
|2011-01-01 01:30:00| 64843.1919395499|
|2011-01-01 01:45:00|66017.96384408326|
|2011-01-01 02:00:00|65345.51379388567|
|2011-01-01 02:15:00|65567.57817136438|
|2011-01-01 02:30:00|65765.80224690547|
|2011-01-01 02:45:00|67245.32532103594|
|2011-01-01 03:00:00|68103.69418448425|
|2011-01-01 03:15:00|65008.59392258343|
|2011-01-01 03:30:00| 66561.9182807065|
|2011-01-01 03:45:00|66631.92787613077|
|2011-01-01 04:00:00|65307.52861877842|
|2011-01-01 04:15:00|64336.19586473244|
|2011-01-01 04:30:00| 64751.6848532353|
|2011-01-01 04:45:00|65458.80136387812|
|2011-01-01 05:00:00|64744.29165508993|
+-------------------+-----------------+
only showing top 20 rows

Это DF с 140256 измерениями.Проблема в том, что я не знаю, как передать дату алгоритму регрессии.

Я делаю следующее:

val parsedData = demanda.rdd.map(x=> LabeledPoint(x(1).asInstanceOf[Double],Vectors.dense(x(0).asInstanceOf[Double]))).cache()

val numIterations = 10
val stepSize = 0.00000001
val model = LinearRegressionWithSGD.train(parsedData, numIterations, stepSize)

val valuesAndPreds = parsedData.map { point =>
val prediction = model.predict(point.features)
(point.label, prediction)
}

valuesAndPreds.foreach((result) => println(s"predicted label: ${result._1}, actual label: ${result._2}"))

val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2) }.mean()
println("training Mean Squared Error = " + MSE)

Он получает MSE очень высоко, поэтому регрессия это не хорошо.Представление данных выглядит так: введите описание изображения здесь

Итак, как я могу сделать регрессию?как передать значения даты?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...