Funciones de pérdida en Machine Learning y optimizaciones
Las máquinas aprenden mediante una función de pérdida. Es un método para evaluar qué tan bien un algoritmo específico modela los datos otorgados.
Si las predicciones se desvían demasiado de los resultados reales, la función de pérdida en Machine Learning arrojaría un número muy grande. Poco a poco, con la ayuda de alguna función de optimización, la función de pérdida en Machine Learning aprende a reducir el error en la predicción.
En este artículo analizaremos varias funciones de pérdida y sus aplicaciones en el dominio de Machine Learning / aprendizaje profundo.
No existe una función de pérdida para todos los algoritmos en Machine Learning. La elección de una función de pérdida para un problema específico, como el tipo de algoritmo de Machine Learning elegido, la facilidad de cálculo de las derivadas y, en cierta medida, el porcentaje de valores atípicos en el conjunto de datos son diversos.
En general, las funciones de pérdida pueden clasificarse en dos categorías principales dependiendo del tipo de tarea de aprendizaje con la que estamos tratando: Pérdidas por regresión y Pérdidas por clasificación.
Pérdidas por clasificación
En la clasificación, estamos tratando de predecir el resultado del conjunto de valores categóricos finitos, es decir, dado un gran conjunto de datos de dígitos escritos a mano, categorizándolos en uno de 0-9 dígitos.
Pérdidas por regresión
La regresión, por otro lado, trata de predecir un valor continuo, por ejemplo, el área del piso , el número de habitaciones, el tamaño de las habitaciones, predecir el precio de la habitación.
Funciones de pérdida en Machine Learning
Pérdidas de regresión
Error cuadrático medio / Pérdida cuadrática / Pérdida L2
Fórmula matemática :


Como su nombre indica, el error cuadrático medio se mide como el promedio de la diferencia al cuadrado entre las predicciones y las observaciones reales. Solo le preocupa la magnitud promedio del error, independientemente de su dirección.
Sin embargo, debido a la cuadratura, las predicciones que están muy lejos de los valores reales son penalizadas fuertemente en comparación con las predicciones menos desviadas.
Además podemos decir que MSE tiene buenas propiedades matemáticas que hacen que sea más fácil calcular gradientes.
import numpy as np y_hat = np.array ([0.000, 0.166, 0.333]) y_true = np.array ([0.000, 0.254, 0.998]) def rmse (predictions, targets): differences = predictions - targets differences_squared = differences ** 2 mean_of_differences_squared = differences_squared.mean () rmse_val = np.sqrt (mean_of_differences_squared) return rmse_val print("d es:" + str (["%.8f" % elem for elem in y_hat])) print ("p es:" + str (["%.8f" % elem for elem in y_true])) rmse_val = rmse (y_hat, y_true) print ("error rms es:" + str (rmse_val))
Error Absoluto Medio / Pérdida L1
Fórmula matemática :
El error absoluto medio por otro lado, se mide como el promedio de la suma de las diferencias absolutas entre las predicciones y las observaciones reales.
Al igual que MSE (error cuadrático medio), también mide la magnitud del error sin considerar su dirección.
A diferencia de MSE (error cuadrático medio), MAE (error absoluto medio) necesita herramientas más complicadas, como la programación lineal para calcular los gradientes. Además, MAE es más robusto para los valores atípicos, ya que no utiliza cuadrado.
import numpy as np y_hat = np.array ([0.000, 0.166, 0.333]) y_true = np.array ([0.000, 0.254, 0.998]) print("d es:" + str (["%.8f" % elem for elem in y_hat])) print("p es:" + str (["%.8f" % elem for elem in y_true])) def mae (predictions, targets): differences = predictions - targets absolute_differences = np.absolute (differences) mean_absolute_differences = absolute_differences.mean () return mean_absolute_differences mae_val = mae (y_hat, y_true) print ("El error de mae es : "+ str (mae_val))
Error de sesgo promedio
Esto es mucho menos común en el dominio de Machine Learning en comparación con su contraparte.
Esto es igual que MSE (error cuadrático medio) con la única diferencia de que no tomamos valores absolutos.
Claramente hay una necesidad de precaución ya que los errores positivos y negativos pueden anularse mutuamente. Aunque menos preciso en la práctica, podría determinar si el modelo tiene sesgo positivo o sesgo negativo.
Fórmula matemática :


Pérdidas de clasificación
Bisagra Pérdida / Multi clase SVM Loss
En términos simples, el puntaje de la categoría correcta debe ser mayor que la suma de los puntajes de todas las categorías incorrectas por algún margen de seguridad (generalmente uno).
Y por lo tanto, la pérdida de bisagra se usa para la clasificación de margen máximo más notablemente para máquinas de vectores de soporte .
Aunque no diferenciable es una función convexa que facilita el trabajo con los optimizadores convexos habituales utilizados en el dominio de aprendizaje automático.
Formula matemática :


Considere un ejemplo en el que tenemos tres ejemplos de entrenamiento y tres clases para predecir: perro, gato y caballo. Debajo de los valores predichos por nuestro algoritmo para cada una de las clases:


Pérdidas de bisagra de cálculo para los tres ejemplos de entrenamiento:
## 1. ejemplo de entrenamiento max( 0, (1.49) - (-0.39) + 1) + max(0, (4.21) - (-0.39) + 1) max(0, 2.88) + max(0, 5.6) 2.88 + 5.6 8.48 (Pérdida alta como predicción incorrecta)
## 2. ejemplo de entrenamiento max(0, (-4.61) - (3.28) + 1) + max(0, (1,46) - (3,28) + 1) max(0, -6,89) + max(0, -0,82) 0 + 0 0 (Pérdida cero como predicción correcta)
## 3. ejemplo de entrenamiento max(0, (1.03) - (-2.27) + 1) + max(0, (-2.37) - (-2.27) + 1) max(0 , 4.3) + max(0, 0.9) 4.3 + 0.9 5.2 (Pérdida alta como predicción incorrecta)
Pérdida de entropía cruzada / Probabilidad de registro negativo
Esta es la la configuración más común para los problemas de clasificación. La pérdida de entropía cruzada aumenta a medida que la probabilidad prevista diverge de la etiqueta real.
Fórmula matemática :


Observe que cuando la etiqueta real es 1 (y ( i) = 1), la segunda mitad de la función desaparece, mientras que en el caso de que la etiqueta real sea 0 (y (i) = 0) se deja caer la primera mitad.
En resumen, solo estamos multiplicando el registro de la probabilidad pronosticada real para la clase de verdad en el terreno. Un aspecto importante de esto es que la pérdida de entropía cruzada penaliza fuertemente las predicciones que son seguras pero erróneas .
import numpy as np predictions = np.array([[0.25,0.25,0.25,0.25] [0.01,0.01,0.01,0.96]] ) targets = np.array([[0,0,0,1] [0,0,0,1]]) def cross_entropy(predictions, targets, epsilon = 1e-10): predictions = np.clip(predictions, epsilon, 1 .-epsilon) N = predictions.shape[0] ce_loss = -np.sum(np.sum(targets * np.log(predicciones + 1e-5))) / N return ce_loss cross_entropy_loss = cross_entropy(predictions, targets) print ("La pérdida de entropía cruzada es:" + str(cross_entropy_loss))