#pyspark #linear-regression #apache-spark-mllib
#PySpark #линейная регрессия #apache-spark-mllib
Вопрос:
У меня есть следующие преобразованные данные.
dataframe: rev
-------- ------------------
|features| label|
-------- ------------------
| [24.0]| 6.382551510879452|
| [29.0]| 6.233604067150788|
| [35.0]|15.604956217859785|
-------- ------------------
Когда я разделяю его на два набора, как показано ниже, я получаю нечто действительно неожиданное. Сначала извините, я новичок в PySpark.
(trainingData, testData) = rev.randomSplit([0.7, 0.3])
Теперь, когда я проверяю, я нахожу:
trainingData.show(3)
-------- --------------------
|features| label|
-------- --------------------
| [22.0]|0.007807592294154144|
| [22.0]|0.016228017481755445|
| [22.0]|0.029326273621380787|
-------- --------------------
И, к сожалению, когда я запускаю модель и проверяю прогноз на тестовом наборе, я получаю следующее:
------------------ -------------------- --------
| prediction| label|features|
------------------ -------------------- --------
|11.316183853894138|0.023462300065135114| [22.0]|
|11.316183853894138| 0.02558467547137103| [22.0]|
|11.316183853894138| 0.03734394063419729| [22.0]|
|11.316183853894138| 0.07660100900324195| [22.0]|
|11.316183853894138| 0.08032742812331381| [22.0]|
------------------ -------------------- --------
Prediction and Label are in horrible relationship.
Заранее спасибо.
Обновление информации:
Весь набор данных:
rev.describe().show()
------- --------------------
|summary| label|
------- --------------------
| count| 28755967|
| mean| 11.326884020257475|
| stddev| 6.0085535870540125|
| min|5.158072668697356E-4|
| max| 621.5236222433649|
------- --------------------
И поезд установлен:
------- --------------------
|summary| label|
------- --------------------
| count| 20132404|
| mean| 11.327304652511287|
| stddev| 6.006384709888342|
| min|5.158072668697356E-4|
| max| 294.9624797344751|
------- --------------------
Комментарии:
1. Похоже, что ваша функция инвариантна, поэтому прогноз равен перехвату (смещению). Сделайте сводную статистику по функциям и посмотрите на свои коэффициенты
Ответ №1:
Попробуйте установить начальное значение pyspark.sql.DataFrame.randomSplit
(trainingData, testData) = rev.randomSplit([7.0, 3.0], 100)
Комментарии:
1. На самом деле это создает тот же странный поезд и тестовый образец. Не повезло. 🙁
2. Я обновил информацию по этому вопросу. Не могли бы вы, пожалуйста, дать какое-нибудь предложение? Спасибо.
3. В чем ваш вопрос или проблема?