2016-11-04 92 views
3

我相信我在纯python中计算RMSE时发生错误。以下是代码。Python纯RMSE vs Sklearn

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代码是正确的。

回答

6

你没有犯错误。你被3划分和sklearn4

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。这里是有联系,可能是相关WikipediaSome other link

+0

为什么sklearn除以4? – cloud36

+0

@ cloud36:看看我的回答 – MMF

2

的RMSE的权公式为:

RMSE

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