如何测试过度拟合的随机森林回归模型?
Posted
技术标签:
【中文标题】如何测试过度拟合的随机森林回归模型?【英文标题】:How to test a Random Forest regression model for Overfitting? 【发布时间】:2021-03-25 17:58:32 【问题描述】:我将 RandomForest 用于回归模型,并想看看我的模型是否过拟合。这是我所做的:
我使用 GridSearchCV 进行超参数调整,然后使用这些参数创建一个 RandomForestRegressor:
RF = RandomForestRegressor(n_estimators=b['n_estimators'], max_depth=b['max_depth'], min_samples_leaf=b['min_samples_leaf'], random_state=0)
然后我使用训练数据集拟合模型:
model = RF.fit(x_train, y_train.values.ravel())
然后我用测试数据集进行预测:
y_pred = model.predict(x_test)
然后我用 x_train 代替 x_test 做了同样的事情:
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://***.com/a/59033147/10603410
【问题讨论】:
请同时显示生成 MAPE 和 MAE 的代码 感谢您的建议,我在原帖中添加了代码! 看起来只是一个过度拟合的问题。我没有看到 X_train 的预测有任何问题。尝试让模型更简单... 感谢您的回复!当你说让模型更简单时,我究竟该怎么做? 查看如何减少过拟合。简单来说,我的意思是采用较少的特征、正则化、使用 PCA 进行降维、进行交叉验证等。随着模型变得越来越复杂,具有比必要更多的特征,它学习了太多并且不能很好地在测试集上泛化. 【参考方案1】:没有“如果这个数字x
小于y
那么我们过拟合”,是你需要断定我们是否过拟合。
根据定义,如果测试误差“比训练误差大得多”,则说明您过度拟合,但未定义“大得多” - 如果取决于您的数据和模型的用途。如果您的数据真的很“容易”(即容易回归),您会期望接近训练/测试错误。如果真的很吵,你可以接受更大的差异
【讨论】:
非常感谢您的回复!这很有意义。对于我在上面发布的结果,max_depth 设置为“无”。当我将 max_depth 设置为较低的值时,例如 max_depth = 10,测试和训练结果之间的差异会变得更小,而测试数据集的结果只会稍微差一些。这是否指向您所说的噪声数据? 那么你首先肯定是过拟合(深树过拟合!)。请注意,仅仅因为您没有过度拟合并不意味着您的模型是“好”的 - 它可能意味着预测训练/测试集同样糟糕。例如,如果您的模型仅计算目标的平均值。由于您的训练/测试应该来自相同的分布,因此训练/测试集的预测可能彼此接近(没有过度拟合),但误差很大(例如,如果您的目标是正弦曲线 + 噪声,则. 真的很不合适) 好的,我明白了。在那种情况下,仅仅为了减少过度拟合问题而减少 max_depth 是没有意义的,对吧?我还能做些什么来减少过度拟合,还是只是我的数据的性质导致了这种情况的发生? 减少 max_depth 确实会减少过度拟合,但它(很可能)也会增加你的偏差(降低你的准确性)。大多数时候,您将拥有一些最小化/优化的功能,例如 MAPE 或 AUC,并且您在验证集(测试集)上使用该指标来找到合适的超参数。您还可以将训练/验证误差绘制为最大深度的函数,您应该看到验证误差下降到某个点再次开始上升 - 这应该是您的最佳选择。以上是关于如何测试过度拟合的随机森林回归模型?的主要内容,如果未能解决你的问题,请参考以下文章
Kaggle 快速模型之 Random Forrest 随机森林