Esta publicación contiene mis notas sobre las métricas de error.
Contenido:
Nos centraremos en las métricas MSE y MAE, que son métricas de evaluación de modelos de uso frecuente en los modelos de regresión.
En regresión lineal:
y' es la etiqueta predicha (una salida deseada) b es el sesgo (la intersección y) w1 es el peso de la característicax1 es una característica (una entrada conocida)
Distribución normal
1. Distribución normal de residuos
Normalidad de los residuos. Los residuos deben estar normalmente distribuidos .
2. Linealidad de los residuos
El modelo de regresión es lineal en parámetros. La media de los residuos es cero. Independencia de los residuos
Hay básicamente 2 clases de dependencias
Los residuos se correlacionan con otra variable. La multicolinealidad es una forma elegante de decir que sus variables independientes están altamente correlacionadas entre sí.
Los residuos se correlacionan con otros residuos (cercanos) (autocorrelación). Sin autocorrelación de residuos. Esto es aplicable especialmente para datos de series de tiempo. La autocorrelación es la correlación de una serie temporal con retrasos de sí misma.
3. Igual varianza de residuos
La homocedasticidad está presente cuando el ruido de su modelo se puede describir como aleatorio y el mismo en todas las variables independientes. De nuevo, la media de los residuos es cero.
MAE es el promedio de todos los errores absolutos. La distancia media absoluta entre los datos reales y los datos pronosticados, pero no castiga los grandes errores de predicción.
Pasos del MAE:
MSE, mide el promedio de los cuadrados de los errores, es decir, la diferencia promedio al cuadrado entre los valores estimados y el valor real.
Siempre es no negativo, y los valores más cercanos a cero son mejores.
Pasos de MSE:
MAE:
MSE:
Referencia: https://arxiv.org/pdf/1809.03006.pdf
# Code Comparison
# true: Array of true target variable
# pred: Array of predictions
def calculateMAE ( true, pred ):
return np. sum (np. abs (true - pred)) def calculateMSE ( true, pred ):
return np. sum ((true - pred)** 2 )
MAE y MSE con diferentes modelos
Podemos mirar estos ejemplos para comparar modelos. Sin embargo, puede que no tenga sentido comparar métricas en diferentes modelos en este momento:
https://dergipark.org.tr/tr/download/article-file/764199
https://www.kaggle.com/faressayah/linear-regression-house-price-prediction
Regularización : es una técnica utilizada para reducir la complejidad del modelo. Lo hace penalizando la función de pérdida.
L1 o Norma Manhattan:
Un tipo de regularización que penaliza pesos en proporción a la suma de los valores absolutos de los pesos . En los modelos que se basan en características escasas, la regularización L1 ayuda a llevar el peso de las características irrelevantes o apenas relevantes a exactamente 0, lo que elimina esas características del modelo. La pérdida L1 es menos sensible a los valores atípicos que la pérdida L2.
L2 o Norma Euclidiana:
Un tipo de regularización que penaliza los pesos en proporción a la suma de los cuadrados de los pesos . La regularización L2 ayuda a acercar los pesos atípicos (aquellos con valores positivos altos o negativos bajos) a 0 pero no tanto. La regularización L2 siempre mejora la generalización en modelos lineales.
# Import part.
import numpy as np import pandas as pd from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error import statsmodels.api as sm
Generaré datos sintéticos en un cierto rango con numpy.
Produje datos previos sin ejecutar un modelo, porque no quiero centrarme en la creación de modelos. Quiero ver cómo cambian las métricas en diferentes datos.
# First actual values.
actual = np.random.randint(low= 50 , high= 101 , size=( 50 )) # Seconda my random pred data.
pred = np.random.randint(low= 50 , high= 101 , size=( 50 )) print ( "Actual data (Random):" , actual) print ( "Pred data (Random):" , pred)
Out[]: Actual data (Random): [ 53 95 63 78 88 59 96 86 52 71 78 89 77 60 97 79 71 87
55 92 69 76 80 66 80 88 89 68 69 98 100 57 83 72 82 72
52 78 94 76 69 59 73 70 99 97 100 63 73 94 ] Pred data (Random): [ 66 69 65 75 99 100 88 92 83 77 80 58 85 91 78 80 63 100
55 84 64 85 67 87 79 83 59 81 76 85 96 86 87 99 91 84
81 50 96 98 76 99 55 63 67 74 51 100 55 75 ]
import matplotlib.pyplot as plt # create scatter plot
plt.plot(actual, pred, 'o' ) # m = slope, b=intercept
m, b = np.polyfit(actual, pred, 1 ) plt.plot(actual, m*actual + b)
Out[]:
mae = mean_absolute_error(actual, pred) print ( "MAE without outliers:" , mae) mse = mean_squared_error(actual, pred) print ( "MSE without outliers:" , mse)
Out[]: MAE without outliers: 16.02
MSE without outliers: 408.1
Agregué algunos valores atípicos a los valores de pred.
pred[[ 4 , 8 , 15 , 45 ]] = pred[[ 4 , 8 , 15 , 45 ]] + 50
# create scatter plot
plt.plot(actual, pred, 'o' ) # m = slope, b=intercept
m, b = np.polyfit(actual, pred, 1 ) plt.plot(actual, m*actual + b)
Out[]:
mae = mean_absolute_error(actual, pred) print ( "MAE with outliers:" , mae) mse = mean_squared_error(actual, pred) print ( "MSE with outliers:" , mse)
Out[]: MAE with outliers: 19.1
MSE with outliers: 648.1
El aumento observado en MAE fue de aproximadamente 3. Sin embargo, el RMSE aumentó en aproximadamente 200. Esto significa que si tenemos datos atípicos, MSE producirá un resultado más sensible. MAE no tuvo en cuenta los valores atípicos.
RMSE: Representa la desviación estándar muestral de las diferencias entre los valores predichos y los valores observados (llamados residuales).
En el ejemplo anterior, podemos ver que RMSE penaliza la predicción del último valor más que MAE.
Este artículo fue publicado previamente en medium .
Contácteme si tiene preguntas o comentarios: [email protected] 👩💻