我想为同一训练集计算训练误差和交叉验证误差。
型号: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()之前不需要显式拟合。
上述代码有任何问题吗?我遇到的培训错误比简历错误大。我的上述理解不正确吗?
答案 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)
比验证错误大多少? 训练误差是否大于验证误差是否自然地只是“验证”或“交叉验证”,这不是很自然的事。