首页 > 解决方案 > ValueError:当目标包含负值时,不能使用均方对数误差

问题描述

cross_val_score(estimator=LinearRegression(), X=X, y=y, scoring='neg_mean_squared_log_error', cv=5)

导致以下错误:

ValueError: Mean Squared Logarithmic Error cannot be used when targets contain negative values.

即使我的目标向量没有负值(房价)

>>> np.any(y < 0)
False

我知道对于负值未定义对数函数,并且均方对数误差使用以下公式:在此处输入图像描述

这意味着问题必须出在 y 帽子上,即在拟合线性回归后预测为负值,但事实并非如此:

>>> np.any(LinearRegression().fit(X,y).predict(X) < 0)
False

我已经阅读了类似问题的答案,但我仍然不确定是什么导致了这个错误以及如何解决它。使用交叉验证时,其他正则化线性回归器(例如 Ridge、Lasso、ElasticNet)也会发生同样的错误。但是,当我使用

mean_squared_log_error(y, model.fit(X,y).predict(X))

使用这些相同的模型,即找到训练分数,它可以完美运行,没有错误。

我的目标是在 Kaggle 上提交预测。他们使用均方根对数误差来评估性能,但是如果我的预测有时是否定的,那么 kaggle 是如何使用这个指标得出分数的呢?

与其他记分器(例如 neg_mean_squared_error)使用交叉验证时

cross_val_score(estimator=LinearRegression(), X=X, y=y, scoring='neg_mean_squared_error', cv=5)

当然没有问题,所以我可以使用带有这个指标的交叉验证分数来评估我的模型的性能,即具有最低 neg_mean_squared_error 的模型也会有最低的 neg_mean_squared_log_error 吗?

标签: python-3.xmachine-learningscikit-learndata-sciencecross-validation

解决方案


推荐阅读