Che cos'è RMSE? Conosciuto anche come MSE, RMD o RMS. Che problema risolve?
Se capisci RMSE: (Errore quadratico medio radice), MSE: (Errore quadrato medio) RMD (Deviazione quadrata media radice) e RMS: (Quadrato media radice), quindi richiedere una libreria per calcolare questo per te non è necessario un eccesso di ingegneria . Tutte queste metriche sono una singola riga di codice Python lunga al massimo 2 pollici. Le tre metriche rmse, mse, rmd e rms sono fondamentalmente identiche concettualmente.
RMSE risponde alla domanda: "Come simile, in media, sono i numeri list1
a list2
?". Le due liste devono avere le stesse dimensioni. Voglio "eliminare il rumore tra due elementi qualsiasi, eliminare la dimensione dei dati raccolti e ottenere un singolo numero per cambiare nel tempo".
Intuition ed ELI5 per RMSE:
Immagina di imparare a lanciare freccette su un bersaglio per le freccette. Ogni giorno ti alleni per un'ora. Vuoi capire se stai migliorando o peggiorando. Quindi ogni giorno fai 10 tiri e misuri la distanza tra il bersaglio e dove il tuo dardo ha colpito.
Fai un elenco di quei numeri list1
. Utilizzare l'errore quadratico medio radice tra le distanze al giorno 1 e un list2
contenente tutti gli zeri. Fai lo stesso il secondo e l'ennesimo giorno. Quello che otterrai è un singolo numero che si spera diminuisca nel tempo. Quando il tuo numero RMSE è zero, colpisci ogni volta bullseyes. Se il numero rmse aumenta, stai peggiorando.
Esempio nel calcolo dell'errore al quadrato della media radice in Python:
import numpy as np
d = [0.000, 0.166, 0.333] #ideal target distances, these can be all zeros.
p = [0.000, 0.254, 0.998] #your performance goes here
print("d is: " + str(["%.8f" % elem for elem in d]))
print("p is: " + str(["%.8f" % elem for elem in p]))
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
rmse_val = rmse(np.array(d), np.array(p))
print("rms error is: " + str(rmse_val))
Che stampa:
d is: ['0.00000000', '0.16600000', '0.33300000']
p is: ['0.00000000', '0.25400000', '0.99800000']
rms error between lists d and p is: 0.387284994115
La notazione matematica:
Glyph Legend: n
è un numero intero positivo che rappresenta il numero di tiri. i
rappresenta un intero contatore intero positivo che enumera la somma. d
indica le distanze ideali, list2
contenente tutti gli zeri nell'esempio sopra. p
sta per performance, l' list1
esempio sopra. l'apice 2 indica il quadrato numerico. d i è l'indice di-esimo d
. p i è l'indice di-esimo p
.
Il rmse fatto in piccoli passi in modo che possa essere compreso:
def rmse(predictions, targets):
differences = predictions - targets #the DIFFERENCEs.
differences_squared = differences ** 2 #the SQUAREs of ^
mean_of_differences_squared = differences_squared.mean() #the MEAN of ^
rmse_val = np.sqrt(mean_of_differences_squared) #ROOT of ^
return rmse_val #get the ^
Come funziona ogni passaggio di RMSE:
Sottrarre un numero da un altro ti dà la distanza tra di loro.
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
Se moltiplichi un numero qualsiasi di volte, il risultato è sempre positivo perché i tempi negativi negativi sono positivi:
3*3 = 9 = positive
-30*-30 = 900 = positive
Aggiungili tutti, ma aspetta, quindi un array con molti elementi avrebbe un errore più grande di un array piccolo, quindi fai una media per il numero di elementi.
Ma aspetta, li abbiamo quadrati tutti prima per forzarli positivi. Annulla il danno con una radice quadrata!
Ciò ti lascia con un solo numero che rappresenta, in media, la distanza tra ogni valore di list1 e il corrispondente valore dell'elemento di list2.
Se il valore RMSE diminuisce nel tempo, siamo felici perché la varianza sta diminuendo.
RMSE non è la strategia di adattamento della linea più accurata, il totale dei minimi quadrati è:
L'errore quadratico medio di radice misura la distanza verticale tra il punto e la linea, quindi se i tuoi dati hanno la forma di una banana, piatta vicino al fondo e ripida vicino alla cima, l'RMSE segnalerà maggiori distanze ai punti alti, ma brevi distanze a punti bassi quando in effetti le distanze sono equivalenti. Ciò provoca una inclinazione in cui la linea preferisce essere più vicina ai punti più alti che più bassi.
Se questo è un problema, il metodo dei minimi quadrati risolve questo problema:
https://mubaris.com/posts/linear-regression
Gotcha che possono interrompere questa funzione RMSE:
Se ci sono valori nulli o infiniti in entrambi gli elenchi di input, allora il valore di output rmse non avrà senso. Esistono tre strategie per gestire valori nulli / mancanti / infiniti in entrambi gli elenchi: ignorare quel componente, azzerarlo o aggiungere una migliore ipotesi o un rumore casuale uniforme a tutti i timestep. Ogni rimedio ha i suoi pro e contro a seconda del significato dei tuoi dati. In generale, si preferisce ignorare qualsiasi componente con un valore mancante, ma ciò orienta l'RMSE verso lo zero facendoti pensare che le prestazioni siano migliorate quando in realtà non lo sono. L'aggiunta di rumore casuale su una migliore ipotesi potrebbe essere preferita se ci sono molti valori mancanti.
Per garantire la relativa correttezza dell'uscita RMSE, è necessario eliminare tutti i valori nulli / infiniti dall'input.
RMSE ha tolleranza zero per i punti di dati anomali che non appartengono
La radice media dei quadrati di errore si basa su tutti i dati corretti e tutti vengono considerati uguali. Ciò significa che un punto randagio che si trova nel campo di sinistra rovinerà totalmente l'intero calcolo. Per gestire i punti di dati anomali e respingere la loro enorme influenza dopo una certa soglia, vedere Stimatori robusti che incorporano una soglia per il licenziamento dei valori anomali.