如何测试随机森林回归模型的过度拟合?

2024-04-23 11:18:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用RandomForest作为回归模型,想看看我的模型是否拟合过度。以下是我所做的:

我使用GridSearchCV进行超参数优化,然后使用这些参数创建一个RandomForestRegressionor:

RF = RandomForestRegressor(n_estimators=b['n_estimators'], max_depth=b['max_depth'], min_samples_leaf=b['min_samples_leaf'], random_state=0)

然后,我使用train数据集拟合模型:

model = RF.fit(x_train, y_train.values.ravel())

然后我用测试数据集预测:

y_pred = model.predict(x_test)

然后,我对x_train进行了完全相同的测试,而不是x_测试:

y_pred = model.predict(x_train)

以下是我取得的成果:

Test Data:
MAE: 15.11
MAPE: 26.98%

Train Data:
MAE: 6.17
MAPE: 10.97%

正如你所看到的,这是一个非常显著的区别。 在使用x_train进行预测时,我是否存在过度装配的大问题,或者我是否做错了什么

MAE和MAPE的公式:

MAE:

mae = sklearn.metrics.mean_absolute_error(y_test, y_pred)

MAPE:

def percentage_error(actual, predicted):
   res = np.empty(actual.shape)
   for j in range(actual.shape[0]):
       if actual[j] != 0:
           res[j] = (actual[j] - predicted[j]) / actual[j]
       else:
           res[j] = predicted[j] / np.mean(actual)
   return res

def mean_absolute_percentage_error(y_test, y_pred): 
   return np.mean(np.abs(percentage_error(np.asarray(y_test), np.asarray(y_pred)))) * 100

MAPE公式的来源: https://stackoverflow.com/a/59033147/10603410


Tags: 模型testmodelnptrainreserrormean
1条回答
网友
1楼 · 发布于 2024-04-23 11:18:41

没有“如果这个数字x小于y那么我们是过度拟合”的说法,而是你需要总结我们是否过度拟合

根据定义,如果测试误差“比列车误差大得多”,则是过度拟合,但此“大得多”未定义-如果取决于您的数据和模型的用途。如果您的数据真的“容易”(即容易回归),您可能会预期一个接近的训练/测试错误。如果真的很吵,你可以接受更大的差异

相关问题 更多 >