Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的几何均方根误差_Python_Forecasting - Fatal编程技术网

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)
    

我建议您为此使用numpy阵列,这将是最简单的方法。要么将元组转换为数组,要么将它们存储为数组。 如果减去numpy数组,它们将被元素相减。同样的说法也适用于平方运算(顺便说一句,在Python中,平方运算不是
^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)))