scikit-learn 中的交叉验证:(X_test, y_test) 的平均绝对误差

Cross-validation in scikit-learn: mean absolute error of (X_test, y_test)

通常我们将原始特征和目标数据(X,y)拆分为(X_train, y_train)和(X_test, y_test).

使用方法:

mae_A = cross_val_score(clf, X_train_scaled, y_train, scoring="neg_mean_absolute_error", cv=kfold)

我得到了 (X_train, y_train) 的交叉验证平均绝对误差 (MAE),对吗?

那么,我怎样才能得到MAE(从之前使用(X_train,y_train)获得的交叉验证模型)对于(X_test,y_test)?

非常感谢!

Maicon P. Lourenço

这是正确的做法。通常,您应该只使用训练数据训练您的模型。 因此,test_set 应该在交叉验证过程中保持看不见,即通过模型的超参数,否则您可能会通过从测试样本中添加知识来使从模型获得的结果产生偏差。

I get the cross validation Mean Absolute Error (MAE) for the (X_train, y_train), right?

是的,cross_val_score 显示的错误将仅来自训练数据。 所以这个想法是,一旦你对 cross_val_score 的结果感到满意,你就用整个训练集拟合最终模型,并对 y_test 进行预测。为此,您可以使用 sklearn.metrics。例如,如果您想获得 MAE:

from sklearn.metrics import mean_absolute_error as mae
accuracy = mae(y_test, y_pred)

试试这个:

(假设你有数据 x,y 并且数据已经用 fit(x,y)

from sklearn import linear_model
from sklearn.model_selection import cross_val_score
reg = linear_model.LinearRegression()
scoring = 'neg_mean_absolute_error'
mae = cross_val_score(reg, x, y, cv=5,scoring=scoring)
mae