2016-11-04 89 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))