为什么在调整模型 RFR 模型时 "Mae" 增加
Why is "Mae" increasing when tuning a model RFR model
我遇到一个问题,即在调整 RandomForestRegressor 的参数时,平均绝对误差会增加。我已将评分设置为 neg_mean_absolute_error
但出于某种原因它仍然增加?
我的数据集包含 300 个变量的 100.000 个观测值,其中我使用 train/test 拆分 test_size=0.2
。
我已经用 randomgridsearchcv 尝试了 200 种组合,我设置了 scoring=neg_mean_absolute_error
。当在测试数据上测量 MAE 时,我得到一个 mae=6500
(默认 RFR 模型),在调优模型上我得到一个 mae=9000
。它不应该减少或至少保持不变吗?似乎它在调整模型时欠拟合
我用来调整模型的代码如下所示:
max_features=['auto','sqrt']
min_samples_split = [2,5,10,20,30,40]
min_samples_leaf = [5,10,20,50,60,80]
max_depth = [int(x) for x in np.linspace(5, 200, num = 20)]
random_grid = {'max_features': max_features,
'max_depth': max_depth,
'min_samples_split': min_samples_split,
'min_samples_leaf': min_samples_leaf
}
kf = KFold(n_splits=3, random_state=1)
rfr=RandomForestRegressor(n_estimators=100)
rfr_random=RandomizedSearchCV(estimator = rfr,
param_distributions=random_grid,
n_iter=200,
cv=kf,
n_jobs=-1,
random_state=53,
scoring='neg_mean_absolute_error')
rfr_random.fit(x_train,y_train)
RF=RandomForestRegressor(**rfr_random.best_params_)
RF.fit(x_train,y_train)
y_pred=RF.predict(x_test)
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))
谁能解释一下为什么在优化初始模型时 MAE 会增加?
这可能会发生。
你在训练集上训练,这并不意味着它适合测试集。
你预测过训练集吗?
y_pred_train=RF.predict(x_train)
print('Mean Absolute Error (Train):', metrics.mean_absolute_error(y_train, y_pred_train))
如果这个误差很小,说明你过拟合了!这意味着您对训练数据有 'perfect' 预测,但对测试数据无效。
在您的情况下,您可以尝试:k 折交叉验证。这基本上会尝试几次 train/test-splits 以找到最佳预测。
也有利于您将数据集划分为训练集、开发集和测试集。 (例如,测试和开发大小总共 = 0.2)。然后你做训练,在开发集上试一下,再调整训练,在开发集上试一下,当你有一个好的结果,在测试集上推出,然后你看看它是否真的很好!
我遇到一个问题,即在调整 RandomForestRegressor 的参数时,平均绝对误差会增加。我已将评分设置为 neg_mean_absolute_error
但出于某种原因它仍然增加?
我的数据集包含 300 个变量的 100.000 个观测值,其中我使用 train/test 拆分 test_size=0.2
。
我已经用 randomgridsearchcv 尝试了 200 种组合,我设置了 scoring=neg_mean_absolute_error
。当在测试数据上测量 MAE 时,我得到一个 mae=6500
(默认 RFR 模型),在调优模型上我得到一个 mae=9000
。它不应该减少或至少保持不变吗?似乎它在调整模型时欠拟合
我用来调整模型的代码如下所示:
max_features=['auto','sqrt']
min_samples_split = [2,5,10,20,30,40]
min_samples_leaf = [5,10,20,50,60,80]
max_depth = [int(x) for x in np.linspace(5, 200, num = 20)]
random_grid = {'max_features': max_features,
'max_depth': max_depth,
'min_samples_split': min_samples_split,
'min_samples_leaf': min_samples_leaf
}
kf = KFold(n_splits=3, random_state=1)
rfr=RandomForestRegressor(n_estimators=100)
rfr_random=RandomizedSearchCV(estimator = rfr,
param_distributions=random_grid,
n_iter=200,
cv=kf,
n_jobs=-1,
random_state=53,
scoring='neg_mean_absolute_error')
rfr_random.fit(x_train,y_train)
RF=RandomForestRegressor(**rfr_random.best_params_)
RF.fit(x_train,y_train)
y_pred=RF.predict(x_test)
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))
谁能解释一下为什么在优化初始模型时 MAE 会增加?
这可能会发生。
你在训练集上训练,这并不意味着它适合测试集。 你预测过训练集吗?
y_pred_train=RF.predict(x_train)
print('Mean Absolute Error (Train):', metrics.mean_absolute_error(y_train, y_pred_train))
如果这个误差很小,说明你过拟合了!这意味着您对训练数据有 'perfect' 预测,但对测试数据无效。
在您的情况下,您可以尝试:k 折交叉验证。这基本上会尝试几次 train/test-splits 以找到最佳预测。
也有利于您将数据集划分为训练集、开发集和测试集。 (例如,测试和开发大小总共 = 0.2)。然后你做训练,在开发集上试一下,再调整训练,在开发集上试一下,当你有一个好的结果,在测试集上推出,然后你看看它是否真的很好!