¿Qué es el RMSE? También conocido como MSE, RMD o RMS. ¿Qué problema soluciona?
Si comprende RMSE: (error cuadrático medio cuadrático), MSE: (error cuadrático medio) RMD (desviación cuadrática media cuadrática) y RMS: (cuadrático medio cuadrático), entonces solicitar una biblioteca para calcular esto es una ingeniería innecesaria . Todas estas métricas son una sola línea de código de Python con un máximo de 2 pulgadas de largo. Las tres métricas rmse, mse, rmd y rms son, en su núcleo, conceptualmente idénticas.
RMSE responde a la pregunta: "¿Qué tan similares, en promedio, son los números en list1
a list2
?". Las dos listas deben ser del mismo tamaño. Quiero "eliminar el ruido entre cualquiera de los dos elementos dados, eliminar el tamaño de los datos recopilados y obtener una sensación única de cambio en el tiempo".
Intuición y ELI5 para RMSE:
Imagina que estás aprendiendo a lanzar dardos a un tablero de dardos. Todos los días practicas durante una hora. Desea saber si está mejorando o empeorando. Entonces, cada día haces 10 tiros y mides la distancia entre la diana y donde golpeó tu dardo.
Haces una lista de esos números list1
. Use el error cuadrático medio entre las distancias en el día 1 y que list2
contenga todos los ceros. Haga lo mismo en el segundo y enésimo día. Lo que obtendrá es un número único que, con suerte, disminuirá con el tiempo. Cuando su número RMSE es cero, siempre le da a la diana. Si el número rmse aumenta, empeora.
Ejemplo al calcular el error cuadrático medio en 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))
Que imprime:
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 notación matemática:
Leyenda de glifo: n
es un entero positivo completo que representa el número de lanzamientos. i
representa un contador entero positivo completo que enumera la suma. d
representa las distancias ideales, que list2
contienen todos los ceros en el ejemplo anterior. p
significa rendimiento, el list1
en el ejemplo anterior. superíndice 2 significa numérico al cuadrado. d i es el i- ésimo índice de d
. p i es el i- ésimo índice de p
.
La respuesta se realiza en pequeños pasos para que se pueda entender:
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 ^
Cómo funciona cada paso de RMSE:
Restar un número de otro te da la distancia entre ellos.
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
Si multiplica cualquier número por sí mismo, el resultado siempre es positivo porque negativo por negativo es positivo:
3*3 = 9 = positive
-30*-30 = 900 = positive
Súmelos todos, pero espere, entonces una matriz con muchos elementos tendría un error mayor que una matriz pequeña, así que promítelos por la cantidad de elementos.
Pero espera, los cuadramos todos antes para forzarlos a ser positivos. Deshacer el daño con una raíz cuadrada!
Eso te deja con un solo número que representa, en promedio, la distancia entre cada valor de list1 a su valor de elemento correspondiente de list2.
Si el valor RMSE disminuye con el tiempo, estamos contentos porque la varianza está disminuyendo.
RMSE no es la estrategia de ajuste de línea más precisa, los mínimos cuadrados totales son:
El error cuadrático medio de la raíz mide la distancia vertical entre el punto y la línea, por lo que si sus datos tienen forma de plátano, plano cerca de la parte inferior y empinado cerca de la parte superior, el RMSE informará distancias mayores a puntos altos, pero distancias cortas a puntos bajos cuando en realidad las distancias son equivalentes. Esto provoca un sesgo donde la línea prefiere estar más cerca de los puntos altos que bajos.
Si esto es un problema, el método de mínimos cuadrados totales arregla esto:
https://mubaris.com/posts/linear-regression
Gotchas que pueden romper esta función RMSE:
Si hay valores nulos o infinitos en cualquiera de las listas de entrada, entonces el valor de salida rmse no tendrá sentido. Hay tres estrategias para lidiar con nulos / valores perdidos / infinitos en cualquiera de las listas: ignore ese componente, ajústelo a cero o agregue una mejor suposición o un ruido aleatorio uniforme a todos los pasos de tiempo. Cada remedio tiene sus ventajas y desventajas, según lo que signifiquen sus datos. En general, se prefiere ignorar cualquier componente con un valor perdido, pero esto sesga el RMSE hacia cero, lo que hace pensar que el rendimiento ha mejorado cuando realmente no lo ha hecho. Se podría preferir agregar ruido aleatorio en una mejor aproximación si faltan muchos valores.
Para garantizar la corrección relativa de la salida RMSE, debe eliminar todos los nulos / infinitos de la entrada.
RMSE tiene tolerancia cero para los puntos de datos atípicos que no pertenecen
La raíz cuadrática del error cuadrático medio se basa en que todos los datos son correctos y todos se cuentan como iguales. Eso significa que un punto perdido en el campo izquierdo arruinará totalmente todo el cálculo. Para manejar puntos de datos atípicos y descartar su tremenda influencia después de cierto umbral, vea Estimadores robustos que incorporan un umbral para el descarte de valores atípicos.