我正在使用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
没有“如果这个数字
x
小于y
那么我们是过度拟合”的说法,而是你需要总结我们是否过度拟合根据定义,如果测试误差“比列车误差大得多”,则是过度拟合,但此“大得多”未定义-如果取决于您的数据和模型的用途。如果您的数据真的“容易”(即容易回归),您可能会预期一个接近的训练/测试错误。如果真的很吵,你可以接受更大的差异
相关问题 更多 >
编程相关推荐