una medio medida interpretacion español error cuadratico como calcula python scipy

python - medida - error cuadratico medio interpretacion



Error cuadrático medio en python (4)

¿Qué es RMSE? También conocido como MSE o RMS. ¿Qué problema soluciona?

Si comprende RMSE: (Error cuadrático medio), MSE: (Error cuadrático medio) y RMS: (Root Mean Squared), solicitar una biblioteca para calcularlo es una sobreingeniería innecesaria. Todas estas métricas son una sola línea de código de pitón de al menos 2 pulgadas de largo. Las tres métricas rmse, mse y rms son 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 dos elementos dados, eliminar el tamaño de los datos recopilados y obtener una sensación de número único para el cambio a lo largo del tiempo".

Intuición y ELI5 para RMSE:

Imagina que estás aprendiendo a lanzar dardos en un tablero de dardos. Todos los días practicas por una hora. Quieres saber si estás mejorando o empeorando. Así que todos los días haces 10 lanzamientos y mides la distancia entre el tiro al blanco y dónde golpea tu dardo.

Usted hace una lista de esos números. Use el error cuadrático medio cuadrático entre las distancias en el día 1 y una lista que contenga todos los ceros. Haz lo mismo en el 2 ° y el n ° día. Lo que obtendrá es un número único que con suerte disminuirá con el tiempo. Cuando su número de RMSE es cero, usted golpea a los bullseyes todo el tiempo. Si el número aumenta, estás empeorando.

Ejemplo para calcular el error cuadrático medio en Python:

import numpy as np d = [0.000, 0.166, 0.333] p = [0.000, 0.254, 0.998] 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 impresiones:

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:

La tarea se realiza en pequeños pasos para que pueda entenderse:

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 #distance between 8 and 5 is 3 -20 - 10 = -30 #distance between -20 and 10 is +30

Si multiplicas cualquier cantidad de veces, el resultado siempre es positivo porque los tiempos negativos negativos son positivos:

3*3 = 9 = positive -30*-30 = 900 = positive

Agréguelos a todos, pero espere, luego una matriz con muchos elementos tendría un error mayor que una matriz pequeña, así que prométalos por la cantidad de elementos.

Pero espera, los cuadrábamos todos antes para forzarlos a ser positivos. ¡Anula 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 y su valor de elemento correspondiente de list2.

Si el valor de RMSE disminuye con el tiempo, estamos contentos porque la variance 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 mide la distancia vertical entre el punto y la línea, por lo que si sus datos tienen forma de banana, planos cerca de la parte inferior y empinados cerca de la parte superior, entonces el RMSE informará distancias mayores a puntos altos, pero distancias cortas hasta puntos bajos cuando de hecho las distancias son equivalentes. Esto causa un sesgo donde la línea prefiere estar más cerca de puntos altos que bajos.

Si esto es un problema, el método de mínimos cuadrados totales corrige esto: https://mubaris.com/2017-09-28/linear-regression-from-scratch

Gotchas que pueden romper esta función RMSE:

Si hay nulos o infinito en cualquiera de las listas de entrada, entonces el valor de la salida de salida no tendrá sentido. Hay tres estrategias para tratar con valores nulos / faltantes / infinitos en cualquiera de las listas: Ignore ese componente, ponga a cero o agregue una mejor estimación o un ruido aleatorio uniforme a todos los pasos del tiempo. Cada remedio tiene sus pros y sus contras según lo que significan tus datos. En general, se prefiere ignorar cualquier componente con un valor faltante, pero esto desvía el RMSE hacia cero, lo que le hace pensar que el rendimiento ha mejorado cuando en realidad no lo ha hecho. Puede ser preferible agregar ruido aleatorio en una mejor estimación si hay muchos valores perdidos.

Para garantizar la corrección relativa de la salida RMSE, debe eliminar todos los nulos / infinitos de la entrada.

RMSE tiene tolerancia cero para puntos de datos atípicos que no pertenecen

Cuadrados de error de media cuadrática de raíz se basa en que todos los datos son correctos y todos se cuentan como iguales. Eso significa que un punto perdido que está fuera en el campo izquierdo va a arruinar totalmente el cálculo completo. Para manejar los puntos de datos atípicos y descartar su tremenda influencia después de un cierto umbral, vea Estimadores robustos que crean un umbral para descartar valores atípicos.

Sé que podría implementar una función de error cuadrático medio como esta:

def rmse(predictions, targets): return np.sqrt(((predictions - targets) ** 2).mean())

¿Qué estoy buscando si esta función rmse se implementa en una biblioteca en algún lugar, tal vez en scipy o scikit-learn?


¿Esto es probablemente más rápido ?:

n = len(predictions) rmse = np.linalg.norm(predictions - targets) / np.sqrt(n)


En realidad, escribí un montón de esos como funciones de utilidad para modelos de estadísticas

http://statsmodels.sourceforge.net/devel/tools.html#measure-for-fit-performance-eval-measures

y http://statsmodels.sourceforge.net/devel/generated/statsmodels.tools.eval_measures.rmse.html#statsmodels.tools.eval_measures.rmse

En su mayoría, uno o dos revestimientos y no mucha comprobación de entrada, y principalmente destinados a obtener fácilmente algunas estadísticas al comparar matrices. Pero tienen pruebas unitarias para los argumentos del eje, porque ahí es donde a veces cometo errores descuidados.


sklearn.metrics tiene una función mean_squared_error . El RMSE es solo la raíz cuadrada de lo que retorna.

from sklearn.metrics import mean_squared_error from math import sqrt rms = sqrt(mean_squared_error(y_actual, y_predicted))