python中的几何均方根误差
给定两个向量python中的几何均方根误差,python,forecasting,Python,Forecasting,给定两个向量ft和yt,如何在python中从头实现以下错误度量 样本数据: ft=(2,3,4.5,6,4,3,2) yt=(2.1,4.2,4.5,7,3,2,2) 目标是设计一个功能,该功能使用: grmse(ft,yt) 我建议您为此使用numpy阵列,这将是最简单的方法。要么将元组转换为数组,要么将它们存储为数组。 如果减去numpy数组,它们将被元素相减。同样的说法也适用于平方运算(顺便说一句,在Python中,平方运算不是^2,而是**2)。然后,您将得到一个包含所有(y
ft
和yt
,如何在python中从头实现以下错误度量
样本数据:
ft=(2,3,4.5,6,4,3,2)
yt=(2.1,4.2,4.5,7,3,2,2)
- 目标是设计一个功能,该功能使用:
grmse(ft,yt)
^2
,而是**2
)。然后,您将得到一个包含所有(y_t-f_t)**2的列表。从那里,您可以使用numpys乘积将所有这些元素相乘,取根,就完成了
import numpy as np
def grmse(ft, yt):
N = len(ft)
prod = np.product( (ft-yt)**2 ) # do the product
return prod**(1/(2*N)) # return the (2N)th root
if __name__ == '__main__':
ft=np.array([2,3,4.5,6,4,3,2])
yt=np.array([2.1,4.2,4.5,7,3,2,2])
print(grmse(ft,yt))
从技术上讲,如果你不感到困惑,你可以把它改成一行:
def grmse(ft, yt):
return (np.product( (ft-yt)**2 ))**(1/(2*len(ft)))
编辑再说一点,您还可以将reduce与lambda表达式一起使用,该表达式也可以在不转换列表的情况下处理列表。您可以压缩您的值(即创建一个元组列表(y_t,f_t)),然后进行列表理解以达到与前面相同的点。然后取列表元素的乘积(使用reduce)。Reduce将操作,即我们将要输入的乘法,按顺序应用于列表的元素
from functools import reduce
def grmse2(ft,yt):
prod_terms = [(x-y)**2 for x,y in zip(ft,yt)]
prod = reduce(lambda x, y: x * y, prod_terms, 1)
N = len(ft)
return prod**(1/(2*N))
或者再一次,在一行中(也许不要这样做,这只是为了展示python有多棒)
出于学习目的,我建议您也尝试仅使用基本python解决此问题,即不使用库。干杯 你的尝试是什么?我不是从一个小的代码示例开始的,如果我自己找不到解决方案,我会发布我的代码并问一些精确的问题……你知道产品符号是如何工作的吗?当你说“从头开始”时,是不是意味着你想用纯python编写它,而没有任何像numpy这样的库?有numpy就可以了,但是不要使用任何像这样使用的库:from library import grmsethance@Banana,伟大的贡献!它不应该是np.product((yt-ft)**2)吗?从技术上讲是的,但你把它平方,减号不重要:)
def grmse2(ft,yt):
return (reduce(lambda x,y:x*y, [(x-y)**2 for x,y in zip(ft,yt)], 1))**(1/(2*len(ft)))