我试图创建函数来计算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
请你帮我解释一下我的计算错误以及可以解决的问题?
答案 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)