Python Pure RMSE vs Sklearn

时间:2016-11-04 16:30:05

标签: python pandas numpy statistics scikit-learn

我相信我在纯python中计算RMSE时出错了。下面是代码。

y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
e = abs(np.matrix(y_pred) - np.matrix(y_true)).A1
ee = np.dot(e,e)
np.sqrt(ee.sum()/3)

This returns: 0.707

然而,当我尝试使用Sklearn时

mean_squared_error(np.matrix(y_true),np.matrix(y_pred))**0.5
This returns: 0.612

知道发生了什么事吗?很确定我的python代码是正确的。

2 个答案:

答案 0 :(得分:6)

你没有犯错误。您除以3sklearn除以4

y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
e = abs(np.matrix(y_pred) - np.matrix(y_true)).A1
ee = np.dot(e,e)
np.sqrt(ee.sum()/4)

0.61237243569579447

除以n-1为您提供无偏估计,并在计算样本的第二时刻时使用。在计算人口的这些相同时刻时,我们除以n。以下是可能相关的链接Wikipedia Some other link

答案 1 :(得分:2)

RMSE的正确公式是:

RMSE

或者在您的情况下,n=len(y_pred)=len(y_true)=4。 因此,为了获得正确的结果,请将np.sqrt(ee.sum()/3)更改为np.sqrt(ee.sum()/len(y_pred))