首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对数据进行预处理以计算均方根对数误差?

如何对数据进行预处理以计算均方根对数误差?
EN

Stack Overflow用户
提问于 2019-09-08 15:02:40
回答 5查看 4K关注 0票数 2

我正在尝试计算我找到的几个选项的均方根对数误差,其中一个是使用sklearn度量: Mean

_

平方

_

日志

_

错误并取其平方根

代码语言:javascript
复制
np.sqrt(mean_squared_log_error( target, predicted_y ))

但我得到以下错误:

代码语言:javascript
复制
Mean Squared Logarithmic Error cannot be used when targets contain negative values

我也尝试了Kaggle帖子中的一个解决方案:

代码语言:javascript
复制
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)

这个指标有什么标准的使用形式,允许使用负值吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-09-08 15:48:46

将两个数组归一化为0到1的范围

如果你正在使用scikit,你可以使用

代码语言:javascript
复制
minmax_scale(arr, feature_range=(0,1))

在执行此操作之前,请保存arr的最大值和最小值。你可以得到实际的值。

例如:

代码语言:javascript
复制
normalized = (value - arr.min()) / (arr.max() - arr.min()) # Illustration
票数 3
EN

Stack Overflow用户

发布于 2019-09-08 15:31:52

没有允许负值的标准形式,因为负数的对数是未定义的。您要么必须像温度示例那样转换数据(将最低值设置为0并缩放),要么考虑为什么要使用RMSLE,以及它是否真的是正确的度量标准。

票数 2
EN

Stack Overflow用户

发布于 2021-02-28 16:56:14

我也有类似的问题,其中一个预测是负面的,尽管所有的训练目标值都是正面的。我将范围缩小到异常值,并通过使用

RobustScaler

来自sklearn。它不仅可以缩放数据,还可以处理异常值

使用对异常值具有健壮性的统计数据来缩放要素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57839824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档