评估交叉验证结果以检查是否过拟合

时间:2019-07-07 08:59:51

标签: python-3.x pyspark jupyter-notebook data-analysis cross-validation

我不确定我是否正确掌握了如何检查ML模型是否过拟合:我在线性回归模型上使用交叉验证(3倍)。

没有交叉验证,我在训练测试分组中的 r2 r2 = 0.9896363826463499,而我的 RMSE rmse = 379.5375558287131

交叉验证:r2 = 0.9896363815481128rmse = 379.5375759385925

我的数据集每1.17亿行有136列,因此我希望获得很好的 r2 得分,但是我不确定我是否真的过度拟合了模型...如何评估是过度拟合还是非常精确?

PS。我有136列,因为我必须为其中一个具有128个唯一值的列创建虚拟特征,因此我认为所有这些列都是非常必要的...

这是我的数据框架构(使用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)

0 个答案:

没有答案