我正在尝试编写一个函数,用于计算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
请问您能否纠正我在计算上的错误并告诉我如何修复它?
我正在尝试编写一个函数,用于计算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
请问您能否纠正我在计算上的错误并告诉我如何修复它?
你无缘无故地修改了索引。for循环会自动增加它。此外,你没有使用索引,例如,你没有使用任何y[i] - y_pred[i]
,因此根本不需要循环。
请使用数组
mse = np.mean((y - y_pred)**2)
我会说:
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))
以下是在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)
i+=1
看起来不对,因为你已经有了一个名为i
的迭代器。 - Divakarmse
的值。另外,我不知道你想用那个i
做什么。你将其初始化为0,然后递增它,但是你在for
循环中使用i
作为迭代器。请仔细检查你的代码。 - idjaw