Python中的均方误差

时间:2016-08-21 13:23:57

标签: python numpy scikit-learn

我试图创建函数来计算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

请你帮我解释一下我的计算错误以及可以解决的问题?

4 个答案:

答案 0 :(得分:9)

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

使用数组

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

答案 1 :(得分: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))

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

以下是在python中实现MSE的方法:

def mse_metric(actual, predicted):
    sum_error = 0.0
    # loop over all values
    for i in range(len(actual)):
        # the error is the sum of (actual - prediction)^2
        prediction_error =  actual[i] - predicted[i]
        sum_error += (prediction_error ** 2)
    # now normalize
    mean_error = sum_error / float(len(actual))
    return (mean_error)