计算训练误差和交叉验证误差时的模型训练

时间:2020-06-26 03:57:46

标签: machine-learning scikit-learn

我想为同一训练集计算训练误差和交叉验证误差。

型号:RandomForestRegressor
指标:训练错误-> RMSE,交叉验证错误-> k折交叉验证

from sklearn.ensemble import RandomForestRegressor

forest_reg = RandomForestRegressor()
scores = cross_val_score(forest_reg, X_train_transformed, y_train,
                         scoring="neg_mean_squared_error", cv=10)
tree_rmse_scores = np.sqrt(-scores)
print(tree_rmse_scores.mean())

forest_reg = RandomForestRegressor()
forest_reg.fit(X_train_transformed, y_train)
error = mean_squared_error(y_train, forest_reg.predict(X_train_transformed))
print(error)

我的理解是,在计算训练误差时必须对模型进行明确训练,但是对于交叉验证分数,模型每k-1折合一次,并在1折上验证k次。在这种情况下,在调用cross_val_score()之前不需要显式拟合。

上述代码有任何问题吗?我遇到的培训错误比简历错误大。我的上述理解不正确吗?

2 个答案:

答案 0 :(得分:1)

在没有CV的方法中,您忘记了MSE的平方根:

forest_reg = RandomForestRegressor()
forest_reg.fit(X_train_transformed, y_train)
error = mean_squared_error(y_train, forest_reg.predict(X_train_transformed))
print(np.sqrt(error)) # <-- take the square root here or already above

差异之所以如此之大,是因为您将RMSE与MSE进行了比较。现在您应该看到预期的结果。

答案 1 :(得分:0)

比验证错误大多少? 训练误差是否大于验证误差是否自然地只是“验证”或“交叉验证”,这不是很自然的事。