La regresión lineal es uno de los algoritmos para problemas de regresión más antiguos y utilizados.
No obstante hay que conocer en qué problemas se puede utilizar y en qué otros no se puede utilizar.
La regresión lineal simple se puede extender, de manera muy sencilla, a problemas de regresión con múltiples variables y regresión con polinomios.
Aunque existe una formula exacta para resolver problemas de regresión, estudiaremos la técnica del descenso de gradiente para encontrar la solución de la regresión lineal.
Finalmente veremos qué es la regularización y qué problema nos ayuda a resolver.
La hipótesis de partida es que existe una relación lineal entre una variable que se utiliza como predictor (\(x\)), y la salida (\(y\)):
\[ h_{\theta}(x) = y = \theta_0 + \theta_1 x + \epsilon \]
Donde \(\epsilon \sim N(0,\sigma^2)\) sigue una distribución normal, con media 0 y varianza \(\sigma^2\).
Es decir, tengo un conjunto de \(n\) datos para los cuales:
\[ h_{\theta}(x_1) = y_1 = \theta_0 + \theta_1 x_1 + \epsilon \\ h_{\theta}(x_2) = y_2 = \theta_0 + \theta_1 x_2 + \epsilon \\ ... \\ h_{\theta}(x_N) = y_N = \theta_0 + \theta_1 x_N + \epsilon \\ \]
Que podemos expresar de manera matricial como:
\[ h_{\theta}(\mathbf{X}) = \mathbf{y} = \mathbf{X \theta} + \mathbf{\epsilon} \]
\[ h_{\theta}(\mathbf{X}) = \mathbf{y} = \mathbf{X \theta} + \mathbf{\epsilon} \]
Donde:
\[ \begin{bmatrix} y_1 \\ y_2\\ ...\\ y_N \\ \end{bmatrix} = \begin{bmatrix} 1 & x_1 \\ 1 & x_2 \\ ...\\ 1 & x_N \\ \end{bmatrix} \begin{bmatrix} \theta_0 \\ \theta_1 \\ \end{bmatrix} + \begin{bmatrix} \epsilon \\ \epsilon \\ ... \\ \epsilon \\ \end{bmatrix} \]
En aprendizaje automático se utilizan vectores columna.
El objetivo de la regresión lineal es, encontrar unos estimadores de \(\theta\) que vamos a escribir como \(\hat \theta\), de tal modo que los \(\hat y\) que obtengo al utilizar esos estimadores:
\[ \begin{bmatrix} \hat y_1 \\ \hat y_2\\ ...\\ \hat y_N \\ \end{bmatrix} = \begin{bmatrix} 1 & x_1 \\ 1 & x_2 \\ ...\\ 1 & x_N \\ \end{bmatrix} \begin{bmatrix} \hat \theta_0 \\ \hat \theta_1 \\ \end{bmatrix} \]
están a la menor distancia posible de los datos \(y\).
Veamos un caso real, la relación entre el peso y la altura de los nativos adultos de la etnia !Kung San.
\[ height = h_{\theta}(weight) = \theta_0 + \theta_1 weight + \epsilon \]
A partir del predictor (weight) queremos obtener el valor de la altura (height) en cm.
El objetivo es encontrar los parámetros \(\theta\) que minimizan la distancia entre los datos reales \(y_i\) y los valores calculados \(h_{\theta}(x_i)\).
\[ \mathcal{L}(h_\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - \hat y_i \rvert ^2 \]
donde hemos utilizado el cuadrado de la distancia euclídea (norma \(l_2\)) entre los datos del conjunto \(y_i\) y los valores obtenidos con el modelo lineal \(\hat y_i\).
Que se puede expresar en forma matricial como:
\[ \mathcal{L_{\theta}} = \frac{1}{N} \lVert \mathbf{y} - \mathbf{X \theta} \rVert^2 \]
Tenemos que encontrar el mínimo de la función de pérdidas.
Tomamos las derivadas parciales respecto a los parámetros \(\mathbf{\theta}\) \[ \vec\nabla_{\mathbf{\theta}}\mathcal{L} = \vec\nabla_{\mathbf{\theta}} \lVert \mathbf{y} - \mathbf{X \theta} \rVert^2 = 0 \]
y llegamos a la expresión matricial:
\[ \mathbf{\theta} = \frac{\mathbf{X^Ty}}{\mathbf{X^T X}} = (\mathbf{X^T X})^{-1}\mathbf{X^Ty} \]
Pregunta: ¿La matriz \(\mathbf{X^T X}\) es siempre invertible?
Aplicando el cálculo a nuestros datos, obtenemos la recta de regresión:
Con \(\hat \theta_0 = 113.8794\) y \(\hat \theta_1 = 0.9050\).
Los residuos son la parte no lineal de los datos, hemos supuesto que siguen una distribución normal:
\[ r_i = y_i - h_{\theta}(x_i) \]
Residuos
Distribución de los residuos
La varianza de los residuos es la contribución de \(\epsilon \sim N(0,\sigma^2)\).
Un estimador para la varianza de los residuos es:
\[ {\hat \sigma}^2 = \frac{1}{N} \sum_{i=1}^N (y_i - h_{\theta}(x_i))^2 \]
Un estimador sin sesgo (unbiased) para \(\sigma^2\) lo podemos calcular como:
\[ MSE = \frac{1}{N-2} \sum_{i=1}^N (y_i - h_{\theta}(x_i))^2 \]
ya que tenemos sólo \(N-2\) grados de libertad.
El error estándar del parámetro estimado \(\hat \theta_0\) se calcula como:
\[ SE(\hat \theta_0) = \sqrt{MSE \left(\frac{1}{n} + \frac{\bar x^2}{S_{xx}}\right)} \]
donde \(S_{xx} = \sum_{i=1}^N (x_i - \bar x)^2\) es la varianza de los datos.
El error estándar del parámetro estimado \(\hat \theta_1\) se calcula como:
\[ SE(\hat \theta_1) = \sqrt{\frac{MSE}{S_{xx}}} \]
En el ejemplo que estamos tratando, al aplicar las fórmulas, obtenemos \(SE(\hat \theta_0) = 1.9111\) y \(SE(\hat \theta_1) = 0.0420\).
Finalmente:
\[ \hat \theta_0 = 113.9 \pm 1.9 \]
\[ \hat \theta_1 = 0.90 \pm 0.04 \]
Ahora debemos comprobar la hipótesis de normalidad de los residuos, sin ella la regresión lineal no tiene sentido.
Podemos aplicar el test de d’Agostino-Pearson, que nos da un p-valor de \(p = 0.0721\).
O el test de Shapiro-Wilk, que nos da un p-valor de \(p = 0.2499\).
En ambos caso del p-valor es mayor que \(0.05\), luego no podemos descartar que los residuos sigan una distribución normal.
Otra prueba gráfica que podemos utilizar son los qqplot o gráficos cuantil-cuantil.
Si podemos apreciar que el gráfico qqplot es una recta no podemos descartar que nuestros datos sigan una distribución normal.
El coeficiente de determinación (\(R^2\)) nos da una idea de la varianza de los datos que puede explicar el modelo.
Suma de los cuadrados de los residuos: \(SS_{res} = \sum_{i=1}^N(y_i - h_\theta(i))^2\)
Suma total de los cuadrados: \(SS_{tot} = \sum_{i=1}^N(y_i - \bar{y})^2\)
\[R^2 = 1 - \frac{SS_{res}}{SS_{tot}}\]
La fracción \(\frac{SS_{res}}{SS_{tot}}\) es la fracción de la varianza no explicada por los datos.
En nuestros caso \(R^2 = 0.5696\) y la varianza no explicada es \(0.4303\).
Otra medida de la linealidad de los datos, es el coeficiente de correlación de Pearson, que no es más que la raíz cuadrada de \(R^2\):
\[\rho = \sqrt{R^2}\]
En nuestro caso obtenemos \(\rho = 0.7547\).
Como criterio general, se considera que el ajuste es bueno cuando este valor está por encima de 0.7.
Estos resultados, y algunos más, los podemos obtener con el paquete statsmodels
import statsmodels.formula.api as smf
import statsmodels.api as sm
modelo = smf.ols(formula='height ~ weight', data=adults).fit()
print(modelo.summary())
OLS Regression Results
==============================================================================
Dep. Variable: height R-squared: 0.570
Model: OLS Adj. R-squared: 0.568
Method: Least Squares F-statistic: 463.3
Date: Wed, 11 Dec 2024 Prob (F-statistic): 4.68e-66
Time: 18:37:07 Log-Likelihood: -1071.0
No. Observations: 352 AIC: 2146.
Df Residuals: 350 BIC: 2154.
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 113.8794 1.911 59.589 0.000 110.121 117.638
weight 0.9050 0.042 21.524 0.000 0.822 0.988
==============================================================================
Omnibus: 5.258 Durbin-Watson: 1.959
Prob(Omnibus): 0.072 Jarque-Bera (JB): 5.729
Skew: -0.180 Prob(JB): 0.0570
Kurtosis: 3.511 Cond. No. 321.
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
El modelo de regresión lineal también lo encontramos en el paquete scikit-learn, junto con medidas de error y otros indicadores como \(R2\)
from sklearn import linear_model
from sklearn.metrics import mean_squared_error, r2_score
modelo_lineal = linear_model.LinearRegression()
X = weight
y = height
modelo_lineal.fit(X, y)
y_predict = modelo_lineal.predict(X)
print("MSE: ", mean_squared_error(y, y_predict))
print("R2: ", r2_score(y, y_predict))
MSE: 25.72382477809007
R2: 0.5696443654975303
En el caso anterior, estamos utilizando el mismo conjunto de datos para entrenar el modelo, que para calcular el error del modelo sobre los datos.
Usualmente se utilizan dos conjuntos de datos, con uno de ellos entrenamos el modelo y el otro conjunto de datos lo utilizamos para calcular el error del modelo.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=69)
modelo_lineal = linear_model.LinearRegression()
modelo_lineal.fit(X_train, y_train)
y_predict = modelo_lineal.predict(X_test)
print("MSE: ", mean_squared_error(y_test, y_predict))
print("R2: ", r2_score(y_test, y_predict))
MSE: 22.857368238528068
R2: 0.6480326131296372
Fíjate en que hemos utilizado el parámetro random_state=69 para fijar el inicio de la generación de números aleatorios, y que los resultados sean reproducibles.
En nuestro caso, además, el número de muestras no es muy elevado, por lo que el error puede depender de la división particular que hagamos para obtener el conjunto de entrenamiento y el de pruebas.
En este caso la recomendación es dividir varias veces el conjunto original, entrenar, calcular el error, y promediar el resultado.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(modelo_lineal, X, y, cv=5, scoring="mean_squared_error")
print(scores)
print("Media: ", scores.mean(), ", std: ", scores.std())
[27.74141409 32.41805083 23.28533277 15.19936772 31.83726912]
Media: 26.0962869056722 , std: 6.3604139836175655
Para terminar con esta sección vamos a ver cómo la expresión de la función de pérdidas: \[ \mathcal{L}(h_\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - x_i\theta \rvert ^2 \]
aparece de modo natural al asumir que los residuos están normalmente distribuídos.
Hemos supuesto que los residuos siguen un distribución normal independientemente del punto donde calculamos la regresión, lo que significa suponer que:
\[ p(y_i|\theta,\sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(y_i-x_i\theta)^2}{2\sigma^2}} \]
Un estimador máximo verosímil es aquel que maximiza la función de verosimilitud, que no es más que el producto de las probabilidades de cada una de las muestras. Si suponemos que las variables de la muestra son independientes y siguen la misma distribución de probabilidad (iid: independientes e idénticamente distribuidas):
\[ p(\mathbf{y}|\theta,\sigma^2) = \prod_{i=1}^N \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(y_i-x_i\theta)^2}{2\sigma^2}} \]
donde hemos extendido el productorio a todas las muestas.
Si tomamos logaritmos de la función de verosimilitud:
\[ ln(p(\mathbf{y}|\theta,\sigma^2)) = {-\frac{1}{2}}\sum_{i=1}^N ln(2\pi\sigma^2) - \sum_{i=1}^N \frac{(y_i-x_i\theta)^2}{2\sigma^2} \]
Como la función logaritmo es monótonamente creciente maximizar la función de verosimilitud es lo mismo que minimizar la misma función cambiada de signo.
\[ -ln(p(\mathbf{y}|\theta,\sigma^2)) = {\frac{1}{2}}\sum_{n=1}^N ln(2\pi\sigma^2) + \boxed{\sum_{i=1}^N \frac{(y_i-x_i\theta)^2}{2\sigma^2}} \]
Si fijamos \(\sigma^2\) minizar la expresión anterior significa minimizar el sumatorio que depende de \(\theta\), que es proporcional a la función de pérdidas.
Por otro lado, podemos calcular el estimador máximo verosímil derivando la expresión anterior con respecto a \(\sigma^2\) e igualando a cero, con lo que obtenemos:
\[ \hat \sigma^2 = \frac{1}{N} \sum_{i=1}^N (y_i - x_i\theta)^2 \]
Que es exactamente el estimador con sesgo que ya habíamos calculado (Demostración).
Hasta ahora, sólo hemos utilizado una característica como predictor en nuestro modelo.
Pero, podemos añadir más características como predictores de nuestro modelo. \[ h_{\theta}(x) = y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 +...+ \epsilon \]
Nuestro conjunto de datos es:
height | weight | age | male | |
---|---|---|---|---|
0 | 151.765 | 47.825606 | 63.0 | 1 |
1 | 139.700 | 36.485807 | 63.0 | 0 |
2 | 136.525 | 31.864838 | 65.0 | 0 |
3 | 156.845 | 53.041914 | 41.0 | 1 |
Vamos a incluir el peso, edad y género para estimar la altura:
\[ height = \theta_0 + \theta_1 weight + \theta_2 age + \theta_3 male + \epsilon \]
Fíjate en que lo que estamos haciendo es añadir más columnas a la matriz de los predictores:
\[ \begin{bmatrix} y_1 \\ y_2\\ y_3\\ ...\\ y_N \\ \end{bmatrix} = \begin{bmatrix} 1 & x_1^1 & x_1^2 & ... & x_1^m\\ 1 & x_2^1 & x_2^2 & ... & x_2^m\\ 1 & x_3^1 & x_3^2 & ... & x_3^m\\ ... & ... & ... & ... & ... \\ 1 & x_n^1 & x_n^2 & ... & x_N^m\\ \end{bmatrix} \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ ...\\ \theta_m \\ \end{bmatrix} + \begin{bmatrix} \epsilon \\ \epsilon \\ \epsilon \\ ... \\ \epsilon \\ \end{bmatrix} \]
Que podemos resolver de este modo:
modelo_lineal = linear_model.LinearRegression()
X = np.hstack([weight, age, male])
y = height
modelo_lineal.fit(X, y)
y_predict = modelo_lineal.predict(X)
print("MSE: ", mean_squared_error(y, y_predict))
print("R2: ", r2_score(y, y_predict))
MSE: 18.067146428469517
R2: 0.6977394173709526
Como vemos, ha disminuido el error cuadrático medio, y ha mejorado la medida de linealidad \(R2\).
Como en el caso de regresión lineal simple, debemos comprobar la hipótesis de que los residuos se distribuyen siguiendo una distribución normal de media cero y cierta varianza.
Los parámetros del ajuste a una distribución normal son \(\mu=-4.3e-14\) y \(\sigma = 4.25\).
Pero, al realizar las pruebas de normalidad obtenemos para la prueba de d’Agostino-Pearson un p-valor=1.07e-5, y con la prueba de Shapiro-Wilk un p-valor=3.3e-4. En principio, podríamos rechazar la hipótesis nula, es decir, que los residuos siguen una distribución normal.
Si utilizamos una gráfica qq-plot, vemos:
Vemos que tenemos un dato anómalo (outlier) en la parte inferior izquierda de la gráfica.
Si eliminamos el dato anómalo:
El gráfico q-q plot mejora bastante y la prueba de normalidad de d’Agostino-Pearson nos da un p-valor 0.93 y la prueba de Shapiro-Wilk un p-valor de 0.11.
Todo lo que hemos aprendido en el caso de un único predictor y una única variable predicha lo podemos extender al caso de varios predictores y una única variable predicha.
Visualicemos todos los datos de nuestro cojunto:
A simple vista parece que su comportamiento no es lineal.
¿Podemos utilizar un polinomio como modelo de los datos?
En el caso de ajuste de un polinomio tenemos:
\[ h_{\theta}(x) = y = \theta_0 + \theta_1 x + \theta_2 x^2 +...+ \theta_n x^n + \epsilon \]
Fíjate en que los parámetros que buscamos \(\mathbf{\theta}\) siguen siendo lineales, no hay ninguna potencia de los parámetros, la potencia está en los datos.
Que lo podemos expresar de modo matricial como:
\[ \begin{bmatrix} y_1 \\ y_2\\ y_3\\ ...\\ y_N \\ \end{bmatrix} = \begin{bmatrix} 1 & x_1 & (x_1)^2 & ... & (x_1)^m\\ 1 & x_2 & (x_2)^2 & ... & (x_2)^m\\ 1 & x_3 & (x_3)^2 & ... & (x_3)^m\\ ... & ... & ... & ... & ... \\ 1 & x_N & (x_N)^2 & ... & (x_N)^m\\ \end{bmatrix} \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ ...\\ \theta_m \\ \end{bmatrix} + \begin{bmatrix} \epsilon \\ \epsilon \\ \epsilon \\ ... \\ \epsilon \\ \end{bmatrix} \]
Probemos primero un polinomio de grado 2:
MSE: 33.05986365746818
No está mal, pero quizás mejore con un polinomio de grado 3:
MSE: 23.24163011633371
Visualmente parece mejor, y el MSE nos lo confirma.
¿Y si probamos con polinomios de otros grados? ¿Con cuál nos quedamos?
La siguiente gráfica muestra el MSE frente al grado del polinomio:
Parece que desde grado 3 hasta 9 son buenas elecciones.
Comprobemos la hipótesis de normalidad de los residuos para un polinomio de grado 3:
Prueba de d'Agostino-Pearson p-valor= 0.006629796639700601
Prueba de Shapiro-Wilk p-valor= 0.014143194223786298
Los p-valores no están por encima del \(0.05\), pero vemos que tenemos dos datos anómalos que podemos eliminar.
Prueba de d'Agostino-Pearson p-valor= 0.30568678454325504
Prueba de Shapiro-Wilk p-valor= 0.11793189509486224
Esta vez, los p-valores no nos permiten rechazar la hipótesis de que los residuos están distribuidos siguiendo una distribución normal.
La conclusión final es que podemos utilizar un polinomio de grado 3 para ajustar nuestros datos, y obtener bastante buenos resultados.
Volvamos de nuevo al ajuste con un polinomio de grado 2:
Al utilizar un polinomio de grado 2, este modelo no consigue ajustar los datos. Decimos que el modelo está subajustando los datos (underfitting).
Ajuste con polinomio de grado 9:
Por el contrario, si utilizamos un polinomio de grado elevado, estaremos forzando a que este polinomio se ajuste muy bien a los datos de entrenamiento, pero quizás no generalice bien.
En la sección de regularización veremos cómo incluir un término en la función de coste para no tener que evaluar el mejor grado de ajuste para un polinomio de modo manual.
Fíjate en que, aumentar el grado del ajuste no es más que ampliar el número de variables predictoras. Y ya sabemos que si tenemos varias variables predictoras los análisis que podemos hacer sobre los residuos son exactamente iguales que en el caso de una única variable predictora.
En la primera parte, hemos obtenido un método directo para minimizar la función de pérdidas.
Existe otra posibilidad para «encontrar» el mínimo de la función de pérdidas. Es un proceso iterativo y se conoce como descenso del gradiente.
Vamos a verlo con detalle.
Volvamos a la función de pérdidas.
\[ \mathcal{L}(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - h(\theta) \rvert ^2 \]
Lo que nos interesa es la dependencia de la función de pérdidas respecto a los parámetros \(\theta\).
Lo que queremos es, partiendo de unos valores iniciales para los parámetros \(\theta\), ir aproximándonos poco a poco a los valores de \(\theta\) que minimizan la función de pérdidas.
El proceso iterativo es (superíndices para indicar paso):
\[ ... \\ \mathcal{L}(\theta^i + \Delta \theta^i) < \mathcal{L}(\theta^i) \\ \theta^{i+1} = \theta^i + \Delta \theta^i \\ \mathcal{L}(\theta^{i+1} + \Delta \theta^{i+1}) < \mathcal{L}(\theta^{i+1}) \\ \theta^{i+2} = \theta^{i+1} + \Delta \theta^{i+1} \\ ... \]
y continúa hasta que se alcance un número máximo de iteraciones, o la disminución que se obtenga entre iteraciones no sea significativa.
Veamos cómo expresar estas ideas de modo formal. Vamos a hacer un desarrollo de Taylor de \(\mathcal{L(\theta + \Delta \theta)}\) donde \(\Delta \theta = \theta^{i+1} - \theta^i\)
\[ \mathcal{L(\theta + \Delta \theta)} = \mathcal{L(\theta)} + \frac{\partial \mathcal{L(\theta)}}{\partial \theta} \Delta \theta + \frac{1}{2!} \frac{\partial^2 \mathcal{L(\theta)}}{\partial \theta^2} (\Delta \theta)^2 + ... \]
y nos quedamos hasta el termino cuadrático en \(\Delta \theta\). Derivamos con respecto a \(\Delta \theta\) e igualamos a cero:
\[ \frac{\partial \mathcal{L(\theta + \Delta \theta)}}{\partial \Delta \theta} = \frac{\partial \mathcal{L(\theta)}}{\partial \theta} + \frac{\partial^2 \mathcal{L(\theta)}}{\partial \theta^2} \Delta \theta = 0 \]
\[ \Delta \theta = \theta^{i+1} - \theta^i \\ \theta^{i+1} = \theta^i - \left( \frac{\partial^2 \mathcal{L(\theta)}}{\partial \theta^2}\right)^{-1} \frac{\partial \mathcal{L(\theta)}}{\partial \theta} \]
El termino \[ \left( \frac{\partial^2 \mathcal{L(\theta)}}{\partial \theta^2}\right)^{-1} \]
es costoso de calcular, y se suele sustituir por un valor fijo \(\eta\) llamado tasa de aprendizaje.
Finalmente obtenemos:
\[ \theta^{i+1} = \theta^i - \eta \frac{\partial \mathcal{L(\theta)}}{\partial \theta} \\ \mathcal{L(\theta^{i+1}}) < \mathcal{L(\theta^i)} \]
es decir, calculamos el gradiente en el punto actual \(\theta^i\), lo multiplicamos por la tasa de aprendizaje \(\eta\) se lo restamos a \(\theta^i\) y obtenemos un nuevo valor \(\theta^{i+1}\) para el cuál la función de pérdidas es menor que en el paso anterior.
La elección de \(\eta\) se debe realizar con cuidado. Un valor grande de \(\eta\) puede dar lugar a un comportamiento errático cuando el descenso del gradiente se acerca al mínimo de la función de pérdidas.
Un valor demasiado pequeño de \(\eta\) puede dar lugar a una aproximación muy lenta al valor mínimo de la función de pérdidas.
Recordemos que la función de pérdidas:
\[ \mathcal{L}(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - h(\theta) \rvert ^2 \]
utiliza todos los datos del conjunto para actualizar el valor de \(\theta^i\)
\[ \theta^{i+1} = \theta^i - \eta \frac{\partial \mathcal{L(\theta)}}{\partial \theta} \\ \mathcal{L(\theta^{i+1}}) < \mathcal{L(\theta^i)} \]
Si el conjunto de datos es muy numeroso y utilizamos muchos pasos en el descenso de gradiente, puede que el algoritmo tarde mucho en alcanzar el mínimo.
Un técnica que se suele utilizar para acelerar el proceso de convergencia del descenso de gradiente es elegir aleatoriamente una única muestra del conjunto total en cada paso del descenso.
Una técnica mixta es, para cada paso de optimización, tomar un subconjunto aleatorio de las muestras de entrenamiento.
Recordemos que en el caso de la regresión hemos encontrado el mejor grado del polinomio calculando error cuadrático medio.
Ahora que conocemos la técnica de descenso del gradiente, podemos ampliar la definición de la función de pérdidas para incluir un término que controle el grado del polinomio que estamos ajustando.
En este tipo de regularización, a la función de pérdidas se le añade un término con el módulo
\[ \mathcal{L}(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - h(\theta) \rvert ^2 + \lambda \theta^T\theta \]
Este caso tiene una solución exacta para \(\theta\):
\[ \theta = (X^TX + \lambda I)^{-1} X^T y \]
Veamos un ejemplo sobre un subconjunto de nuestros datos cuando ajustamos a un polinomio de grado 9:
En la regularización Lasso el término que se añade a la función de pérdidas es: \[ \mathcal{L}(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - h(\theta) \rvert ^2 + \lambda \sum_{j=1}^k \theta_j \]
donde \(k\) es el grado del polinomio. Fíjate en que no se incluye el parámetro de bias \(\theta_0\) en la regularización.
Seguimos utilizando un polinomio de grado 9:
La regularización Elastic Net es una combinación de las dos anteriores:
\[ \mathcal{L}(\mathbf{\theta}) = \frac{1}{N} \sum_{i=1}^N \lvert y_i - h(\theta) \rvert ^2 + r \lambda \theta^T\theta + (1-r) \lambda \sum_{j=1}^k \theta_j \]
donde el parámetro \(r\) da cuenta de la contribución de cada una de las regularizaciones. Si \(r=1\) sólo tenemos contribución de la regularización Ridge, y si \(r=0\) sólo tenemos contribución de la regularización Lasso.
Aprendizaje Automático (IR2130) - Óscar Belmonte Fernández