python-3.x - 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 吗?
解决方案
推荐阅读
- openrefine - 在 OpenRefine 中使用 GREL 提取文本
- python - JSON的单元测试以检查列数
- python - Jupyter Lab 启动时缺少令牌或密码
- c# - 如何托管本地文件以从 C# Windows 应用程序进行外部 http 访问
- c++ - 使用 openCV SurfFeatureDetector 后崩溃
- python-3.x - 在gdspy库python中将顶部单元格平展1级
- c# - OnPropertyChanged 事件不会切换按钮可见性
- vb.net - 我在使用 ForeColor 为 vb.net 中的文本框设置颜色时遇到问题
- java - 无法保存到数据库外部表新记录生成休眠 jpa
- flutter - 我们不能创建 Flutter 自定义表单字段返回功能吗?