我正在尝试计算我找到的几个选项的均方根对数误差,其中一个是使用sklearn度量: Mean
_
平方
_
日志
_
错误并取其平方根
np.sqrt(mean_squared_log_error( target, predicted_y ))但我得到以下错误:
Mean Squared Logarithmic Error cannot be used when targets contain negative values我也尝试了Kaggle帖子中的一个解决方案:
import math
#A function to calculate Root Mean Squared Logarithmic Error (RMSLE)
def rmsle(y, y_pred):
assert len(y) == len(y_pred)
terms_to_sum = [(math.log(y_pred[i] + 1) - math.log(y[i] + 1)) ** 2.0 for i,pred in enumerate(y_pred)]
return (sum(terms_to_sum) * (1.0/len(y))) ** 0.5同样的问题,这次我得到一个域错误。
在同一篇文章中,他们对负面日志问题发表了以下评论:
你说得对。你必须改变你
_
pred和Y
_
测试以确保它们不带负值。
在我的例子中,当预测天气温度(最初以摄氏度为单位)时,解决方案是在计算RMSLE之前将它们转换为开尔文度:
rmsle(data.temp
_
pred + 273.15,data.temp
_
实数+ 273.15)
这个指标有什么标准的使用形式,允许使用负值吗?
发布于 2019-09-08 15:48:46
将两个数组归一化为0到1的范围
如果你正在使用scikit,你可以使用
minmax_scale(arr, feature_range=(0,1))在执行此操作之前,请保存arr的最大值和最小值。你可以得到实际的值。
例如:
normalized = (value - arr.min()) / (arr.max() - arr.min()) # Illustration发布于 2019-09-08 15:31:52
没有允许负值的标准形式,因为负数的对数是未定义的。您要么必须像温度示例那样转换数据(将最低值设置为0并缩放),要么考虑为什么要使用RMSLE,以及它是否真的是正确的度量标准。
发布于 2021-02-28 16:56:14
我也有类似的问题,其中一个预测是负面的,尽管所有的训练目标值都是正面的。我将范围缩小到异常值,并通过使用
RobustScaler
来自sklearn。它不仅可以缩放数据,还可以处理异常值
使用对异常值具有健壮性的统计数据来缩放要素。
https://stackoverflow.com/questions/57839824
复制相似问题