====== 05 - Regresión lineal ====== |< 50px - 50px >| ^x^y^ |0|0| |1|10| |3|30| |7|70| |20|200| {{ :clase:ia:saa:3_regresion_lineal:grafico1.png?400 |}} El objetivo es encontrar la recta que mejor se ajuste a los datos: {{ :clase:ia:saa:3_regresion_lineal:grafico2.png?400 |}} Ecuación de la recta: **y = a + bx** * **a**: constante o término independiente. Indica el valor de corte del eje Y * **b**: pendiente de la recta. Indica el aumento de Y cuando X aumenta 1 unidad En nuestro caso, a = 0 y b = 10 => y = 10x. Con la ecuación anterior, podemos inferir el valor de y ante cualquier x. {{ :clase:ia:saa:3_regresion_lineal:grafico3.png?400 |}} Otro ejemplo con a <> 0: {{ :clase:ia:saa:3_regresion_lineal:grafico4.png?400 |}} **y = 100 + 10x** En la vida real, los datos no se alinean de forma perfecta, con lo que cada dato estará representado por: ;#; $\displaystyle y_{i}= a + bx_{i} + \epsilon_{i}$ ;#; {{ :clase:ia:saa:3_regresion_lineal:grafico5.png?400 |}} En el gráfico anterior podemos trazar varias rectas: {{ :clase:ia:saa:3_regresion_lineal:grafico6.png?400 |}} ¿Cuál de ellas se ajusta mejor a los datos? Para saberlo, necesitamos utilizar alguna **métrica**. En los ejemplos anteriores hemos visto regresión lineal simple, ya que sólo tenemos dos variables (la variable objetivo Y y un sólo predictor X). Si tuviésemos más predictores (**regresión lineal múltiple**), la ecuación sería: ;#; $\displaystyle Y = a + b_{1}x_{1} + b_{2}x_{2} + b_{3}x_{3}+ ... + b_{i}x_{i}$ ;#; ===== Métricas ===== {{ :clase:ia:saa:3_regresion_lineal:grafico6.png?400 |}} Para saber qué recta se ajusta mejor a nuestros datos, necesitamos calcular el error de cada una de ellas y quedarnos con el que sea menor. Para calcular el error utilizamos alguna función (**función de coste**). Aunque aquí estamos utilizando **métrica** y **función de coste** de forma semejante, no tienen por qué ser iguales. Por ejemplo, en una red neuronal que clasifique imágenes se utiliza el descenso de gradiente como función de coste para ajustar cada perceptrón, aunque la métrica para evaluar la red es distinta (tasa de aciertos, sensibilidad...) La función más básica sería calcular la suma de los residuos (resultado real - predicción): ;#; $\displaystyle error = \sum_{i=1}^{N}(y_{i} - \hat{y_{i}})$ ;#; Esta función de coste no nos sirve, ya que los residuos se pueden anular unos a otros (puede haber valores positivos y negativos): {{ :clase:ia:saa:3_regresion_lineal:grafico7.png?400 |}} {{ :clase:ia:saa:3_regresion_lineal:grafico8.png?400 |}} Errores parciales (residuos): 0 -2 1 0 2 2 **Error total: 0** Por ejemplo, si queremos predecir la altura de los hijos en función de la de los padres, estas dos rectas de regresión serían válidas, ya que el error sería 0: {{ :clase:ia:saa:3_regresion_lineal:grafico9.png?400 |}} {{ :clase:ia:saa:3_regresion_lineal:grafico10.png?400 |}} Vamos a ver algunas de las métricas más utilizadas en problemas de regresión. ==== Error absoluto medio (MAE) ==== Promedio de diferencias absolutas entre los valores objetivo y las predicciones: ;#; $\displaystyle MAE = \frac{1}{N} \sum_{i=1}^{N}|(y_{i} - \hat{y_{i}})|$ ;#; Menos sensible a los valores atípicos que MSE y RMSE ==== MSE ==== Promedio de los cuadrados de las diferencias entre los valores objetivo y las predicciones: ;#; $\displaystyle MSE = \frac{1}{N} \sum_{i=1}^{N}(y_{i} - \hat{y_{i}})²$ ;#; Es una de la más utilizada en problemas de regresión (junto a RMSE) ==== RMSE ==== Raiz cuadrada de MSE (para que la escala del error sea igual a la escala de los objetivos) ;#; $\displaystyle RMSE = \sqrt{\frac{1}{N} \sum_{i=1}^{N}(y_{i} - \hat{y_{i}})²}$ ;#; ==== R² ==== Es difícil darse cuenta si nuestro modelo es bueno o no al observar los valores absolutos de MSE o RMSE. El coeficiente de determinación, o R², es otra medida que podemos usar para evaluar un modelo y está estrechamente relacionada con la MSE, pero tiene **la ventaja de estar libre de escala **. No importa si Los valores de salida son muy grandes o muy pequeños, el R² siempre estará entre -∞ y 1. Cuando R² es negativo, significa que el modelo es peor que predecir la media. ;#; $\displaystyle R² = 1 - \frac{MSE(model)}{MSE(baseline)}$ ;#; MSE(model) se calcula con la fórmula anterior. ;#; $\displaystyle MSE(baseline) = \frac{1}{N} \sum_{i=1}^{N}(y_{i} - \overline{y})²$ ;#; donde $\displaystyle \overline{y}$ es la media de la Y observada. ==== MAE vs MSE ==== Si tenemos valores anómalos en las muestras que no son errores de medición (queremos que nuestro modelo los tenga en cuenta), mejor usar MAE. En caso contrario, usar MSE. En ML casi siempre se utiliza MSE (o RMSE) como función de coste. Una de las razones es que para minimizar la función (calcular los coeficientes de la recta de regresión que mejor se ajusten a nuestros datos), existe una fórmula matemática que los calcula directamente ===== Descenso de gradiente ===== Cuando tenemos un número elevado de características o demasiadas instancias de entrenamiento para caber en la memoria, las funciones de coste anteriores pueden no ser adecuadas. Para estos casos, podemos utilizar una manera muy diferente para minimizar la función de coste: **descenso de gradiente**. Para encontrar el mínimo en una función de coste, el descenso de gradiente empieza en un punto aleatorio. En sucesivas iteraciones, va calculando las derivadas parciales (pendiente de la función) para ir aproximándose al mínimo cada vez más. {{ :clase:ia:saa:3_regresion_lineal:grafico11.png?400 |}} Un parámetro importante en el descenso de gradiente es el tamaño de los pasos, determinado por el hiperparámetro **tasa de aprendizaje**. Si la tasa de aprendizaje es demasiado pequeña, el algoritmo tendrá que pasar por muchos pasos para converger (si llega a hacerlo antes de terminar las iteraciones), lo cual llevará mucho más tiempo. {{ :clase:ia:saa:3_regresion_lineal:grafico12.png?400 |}} Por el contrario, si la tasa de aprendizaje es demasiado grande, el algoritmo puede no converger nunca. {{ :clase:ia:saa:3_regresion_lineal:grafico13.png?400 |}} Otro problema es que no todas las funciones de coste tienen una forma regular con un sólo mínimo. Pueden haber muchos socavones, crestas, mesetas y todo tipo de terrenos irregulares, lo que dificulta la convergencia en el mínimo global. {{ :clase:ia:saa:3_regresion_lineal:grafico14.png?400 |}} Por suerte, la función de coste MSE para un modelo de regresión es una función convexa. Eso implica que no hay mínimos locales, sólo hay un mínimo global. El descenso de gradiente es el método utilizado para ajustar los perceptrones de una red neuronal ===== Regresión polinomial ===== La regresión polinomial es un modelo de análisis de regresión en el que la relación entre la variable independiente X y la variable dependiente y se modela con un polinomio de n-ésimo grado. Aunque la regresión polinomial ajusta un modelo no lineal a los datos, como problema de estimación estadística es lineal, en el sentido de que la función de regresión es lineal en los parámetros desconocidos que se estiman a partir de los datos. Por esta razón, la regresión polinomial se considera un caso especial de regresión lineal múltiple. Ejemplo: {{ :clase:ia:saa:3_regresion_lineal:grafico15.png?400 |}} Si intentamos sacar la recta de regresión, nuestras predicciones no serán muy precisas: ;#; $\displaystyle y = 4472.11 + 136.86x$ ;#; {{ :clase:ia:saa:3_regresion_lineal:grafico16.png?400 |}} Podemos aumentar el grado del polinomio para intentar ajustar mejor a los datos: ;#; $\displaystyle y = 330.46 - 13.77x + 4.83x^2 + 0.11x^3$ ;#; {{ :clase:ia:saa:3_regresion_lineal:grafico17.png?400 |}}