Python中的均方误差

问题描述 投票:2回答:3

我正在尝试制作函数来计算y(真值)和y_pred(预测值)的均方误差,而不是使用sklearn或其他实现。

我接下来会尝试:

def mserror(y, y_pred):
    i=0
    for i in range (len(y)):
        i+=1
        mse = ((y - y_pred) ** 2).mean(y)   
        return mse

能否请您纠正我在计算中出错的原因以及可以修复的问题?

python numpy scikit-learn
3个回答
10
投票

您无缘无故地修改索引。 for循环无论如何都会增加它。此外,您没有使用索引,例如,您没有使用任何y[i] - y_pred[i],因此您根本不需要循环。

使用数组

mse = np.mean((y - y_pred)**2)

1
投票

我会说 :

def get_mse(y, y_pred):
d1 = y - y_pred
mse = (1/N)*d1.dot(d1) # N is int(len(y))
return mse

它只有在y和y_pred是numpy数组时才有效,但只要你决定不使用其他库就可以让它们成为numpy数组,这样你就可以对它进行数学运算。

numpy dot()函数是2个numpy数组的点积(你也可以写np.dot(d1,d1))


0
投票

首先,你重复使用i并递增它但在范围内它会自动迭代到下一个数字。所以不要再使用我了。另一件事是你采取y的意思,而不是采取平均值,取((y - y_pred)** 2)的平均值。我希望,你明白了。

© www.soinside.com 2019 - 2024. All rights reserved.