2016-11-04 6 views
3

Ich glaube, ich mache einen Fehler in meiner Berechnung von RMSE in reinem Python. Unten ist Code.Python Pure 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 

aber wenn ich versuche, mit Sklearn

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

Jede Idee, was los ist? Ziemlich sicher, dass mein Python-Code korrekt ist.

Antwort

6

Sie machen keinen Fehler. Sie Dividieren durch 3 und sklearn wird Dividieren durch 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 

Dividing von n-1 gibt Ihnen eine unvoreingenommene Schätzung und wird verwendet, wenn der 2. Momente für die Proben zu berechnen. Wenn wir diese gleichen Momente für Populationen berechnen, teilen wir uns durch n. Hier ist, sind Links, die WikipediaSome other link

+0

Warum teilt sich Sklearn durch 4? – cloud36

+0

@ Cloud36: Schau auf meine Antwort – MMF

2

Die richtige Formel der RMSE ist relevant sein könnten:

RMSE

Oder in Ihrem Fall n=len(y_pred)=len(y_true)=4. Also, um das richtige Ergebnis zu haben, ändern Sie np.sqrt(ee.sum()/3) zu np.sqrt(ee.sum()/len(y_pred))