Понимание функции разделения MLlib из PySpark

#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. В чем ваш вопрос или проблема?