【发布时间】:2020-01-10 09:11:50
【问题描述】:
我正在计算 Root Mean Squared Logarithmic Error 我发现的选项很少,一种是使用 sklearn 指标:mean_squared_log_error 并取其平方根
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
同样的问题,这次我遇到了域错误。
在同一篇文章中,他们对负面日志问题发表了以下评论:
你是对的。您必须转换 y_pred 和 y_test 以确保它们不带有负值。
在我的例子中,当预测天气温度(最初以摄氏度为单位)时,解决方案是在计算 RMSLE 之前将它们转换为开尔文度:
rmsle(data.temp_pred + 273.15, data.temp_real + 273.15)
是否有任何使用该指标的标准形式允许使用负值?
【问题讨论】:
标签: python machine-learning metrics logarithm