Update autoencoders.md
Wie ist das eigentlich gedacht mit dem RMSE, wenn die Sampels Vektoren sind statt 1d-Werte?
np.sqrt(((X - X_pred) ** 2).sum() / len(X))) macht ja dann was anderes als np.sqrt(((X - X_pred) ** 2).mean())), zweiteres ist aber das, was sklearn.metrics.mean_squared_error(X, X_pred,squared=False) tut (tuen sollte, s. u.) bzw. neuerdings sklearn.metrics.root_mean_squared_error(X, X_pred)
Im Projekt ist dann zweite Variante angewendet: print('RMSE (PCA): ', np.sqrt(((X - X_pca) ** 2).sum() / X.shape[0] / (28 * 28))) print('RMSE (autoencoder):', np.sqrt(((X - X_pred) ** 2).sum() / X.shape[0] / (28 * 28)))
Warum der RMSE von SKlearn allerdings was anderes macht ist mir unklar: y_true = np.array( [[0.5, 1], [-1, 1], [7, -6]]) y_pred = np.array([[0, 2], [-1, 2], [8, -5]]) root_mean_squared_error(y_true, y_pred),np.sqrt(((y_true-y_pred)**2).mean()),np.sqrt(mean_squared_error(y_true, y_pred))
(0.8227486121839513, 0.8416254115301732, 0.8416254115301732)
irgendwie mittelt der Komponentenweise:
(np.sqrt(((y_true-y_pred)**2).mean(axis=0))).mean() 0.8227486121839513