Оцените результаты перекрестной проверки, чтобы проверить на предмет соответствия - PullRequest
0 голосов
/ 07 июля 2019

Я не уверен, что правильно понял, как проверить наложение на моей модели ML: я использую перекрестную проверку (3 раза) на модели линейной регрессии.

БЕЗ перекрестной проверки, мой r2 в разбивке по тесту поезда составляет r2 = 0.9896363826463499, а мой RMSE равен rmse = 379.5375558287131

С перекрестной проверкой: r2 = 0.9896363815481128 и rmse = 379.5375759385925

В моем наборе данных 136 столбцов на 117 миллионов строк, поэтому я рассчитываю получить очень хороший результат r2 , но я не уверен, что я на самом деле перегружаю свою модель ... Как я могу оценить, если это переоснащение или просто очень точное?

PS. У меня 136 столбцов, потому что мне пришлось создать фиктивные объекты для одного из столбцов, который имеет 128 уникальных значений, поэтому я думаю, что все эти столбцы совершенно необходимы ...

Это моя схема Dataframe (с использованием pySpark): PPS. В качестве краткой справки о значении я пытаюсь предсказать метку , которая является временем прибытия автобуса на автобусную станцию ​​( STOPPOINTID ). все столбцы после rhum являются фиктивными элементами (по одному на каждую линию шины).

root
 |-- MONTHOFSERVICE: integer (nullable = true)
 |-- STOPPOINTID: integer (nullable = true)
 |-- label: integer (nullable = true)
 |-- WEEKDAY: integer (nullable = true)
 |-- rain: float (nullable = true)
 |-- temp: float (nullable = true)
 |-- wetb: float (nullable = true)
 |-- rhum: float (nullable = true)
 |-- .....
...

Вот как я тренировался и приспосабливал свою модель:

train_data,test_data = final_data.randomSplit([0.7,0.3])
lr = LinearRegression()
lr_model = lr.fit(train_data)

Перекрестная проверка:

lr = LinearRegression(maxIter=3)
modelEvaluator=RegressionEvaluator()
pipeline = Pipeline(stages=[lr])
paramGrid = ParamGridBuilder().addGrid(lr.regParam, [0.1, 0.01]).addGrid(lr.elasticNetParam, [0, 1]).build()

crossval = CrossValidator(estimator=pipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=modelEvaluator,
                          numFolds=3)

cvModel = crossval.fit(train_data)
...