Introducción a Machine Learning II

Image by Manfred Steger

Este post es el segundo de muchos que iré publicando a medida que vaya avanzando en el curso de Machine Learning de Andrew Ng, ofrecido por la universidad de Stanford en la plataforma Coursera.

Recorda que sigo en los problemas de aprendizaje supervisado, y si en el post anterior hice una introducción a los problemas de Regresión Lineal Simple, y de cómo solucionarlos a través del algoritmo de Gradient Descent, en éste hablaremos de los problemas de regresión con multiples variables.

Regresión Lineal Múltiple

Si recuerdas el ejemplo de Regresión Lineal Simple que se proponía en el post anterior, quería estimar el precio de vivienda, y el único dato con el que contába en mi training data era el tamaño de las viviendas ya vendidas. Hablamos de Regresión Lineal Múltiple cuando son más de uno los atributos o variables de los que disponemos, como por ejemplo:

  • Número de habitaciones.
  • Número de pisos.
  • Antigüedad del edificio.

Todo juega un papel importante a la hora de determinar el precio de la vivienda, y modifica nuestra ecuación lineal considerablemente, por lo que nuestra hipótesis también se ve afectada. Si tenemos varias variables, tenemos que redefinir nuestra hipótesis de la siguiente manera:

En nuestro ejemplo, x1 serán los metros cuadrados, x2 el número de habitaciones, y así sucesivamente hasta cuantas variables tengamos. Otra manera de representar esta ecuación es a través del producto de matrices:

Vamos a ayudarnos de matrices porque son la manera de agrupar todas las variables de una muestra de manera independiente para poder trabajar con ellas fácilmente. Si todavía no lo ves claro, lo harás en cuanto empecemos a trabajar con ello.

Con nuestra nueva hipótesis definida, lo siguiente que tenemos que hacer, al igual que ya hicimos con los problemas de Regresión Lineal Simple, es definir la Función de Coste para que podamos crear nuestro algoritmo de Gradient Descent.

Si recuerdas la función de coste:

Lo único que tenemos que hacer es reemplazar la hipótesis con la nueva definición, así que nos quedará tal que:

Algoritmo Gradient Descent

En el post anterior ya describimos las bases de este algoritmo. Importante recordar que, al ir derivando sobre las distintas variables, nos encontraremos sus valores al final de la ecuación.

Los siguientes dos apartados describen un par de técnicas imprescindibles para que el algoritmo de Gradient Descent Multiple funcione de manera óptima.

Feature Scaling

Al tener un problema con múltiples variables, nos tenemos que asegurar de que todas ellas están en la misma escala. Esto es muy sencillo de ver si representamos varias variables de nuestra ecuación. Imaginemos las siguientes variables con los siguientes valores:

  • x1 = tamaño de la vivienda (de 0m2 a 2000 m2)
  • x2 = número de habitaciones (de 1 a 5 habitaciones)

Si las representamos gráficamente para ver como sería el recorrido que tendría que hacer nuestro algoritmo descendente, tendríamos algo así:

Y como se puede apreciar, puede pasar que tengamos que dar muchísimos saltos antes de que nuestro algoritmo converja.

La idea del Feature Scaling consiste en aplanar la elipsis dividiendo las variables por su mayor valor posible. De esta manera nos aseguramos de que todas las variables estén contenidas en: 1 ≤ x ≤ 1. Por decirlo de otra manera, que estén en escalas similares.

  • x1 = tamaño / 2000
  • x2 = número de habitaciones / 5

Si aplicamos estas correcciones obtendremos una gráfica como la siguiente, donde podemos ver claramente que en cualquier caso siempre daremos menos saltos para llegar a nuestra solución:

Mean Normalization

En ocasiones, como complemento a dividir por el máximo valor resulta interesante aplicar lo que se llama Mean Normalization (Normalización Media), que consiste en restarle a la variable el valor medio antes de dividirlo por el máximo. Lo que se busca es aproximarlo a 0 para hacer nuestro algoritmo incluso más rápido. Aproximadamente -0.5 ≤x ≤0.5 Continuando con el ejemplo anterior, tendríamos:

  • x1 = (tamaño -1000) / 2000
  • x2 = (número de habitaciones - 2) / 5

Algoritmo Normal Equation

Al igual que el anterior, el algoritmo Normal Equation nos permite resolver problemas de Regresión Lineal. Para ciertos casos ofrece soluciones mucho más óptimas, aunque si nuestro training set es muy grande este algoritmo es lento.

La gran diferencia con el Gradient Descent es que ofrece una solución analítica en lugar de una solución a través de múltiples iteraciones. Es decir, podemos calcular el valor óptimo de θ en un sólo paso.

Supongamos que tenemos esta simple función de coste:

Tenemos una función polinómica de grado 2, o función cuadrática, que para minimizarla tenemos que igualar su derivada a cero y resolver θ.

En los problemas con una función de coste real:

La manera de resolverlo es bajo el mismo principio: vamos derivando y resolviendo las ecuaciones para todos los valores θ.

Comentarios

Entradas populares de este blog

Django REST framework

Envío de checkboxes o selector multiple por AJAX con jQuery

Django: relaciones polimórficas