Я не уверен, что правильно понял, как проверить наложение на моей модели 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)