Back
Featured image of post Inteligencia Artificial: #1 Introducción, rectas de regresión

Inteligencia Artificial: #1 Introducción, rectas de regresión

Cuando nos hablan de inteligencia artificial, nos asustamos y pensamos en primera instancia que estos conocimientos están lejos de la mano de los mortales.

En estas entradas voy a tratar de introducir de manera intuitiva los conceptos básicos del machine learning y presentar algunas implementaciones y aplicaciones, con el objetivo de aprender yo mismo, y que otra gente aprenda.

En este artículo tratamos uno de los modelos más básicos, la regresión lineal.

Photo by Drew Beamer / Unsplash

Predicciones básicas

Supongamos que nos vamos a mudar a Boston, y estamos observando la relación entre el número de habitaciones y el precio de las viviendas.

Recopilación de datos

Anotamos en una tabla los valores que hemos observado:

Precio viviendaNº de habitaciones
24.06.575
21.66.421
34.77.185
33.46.998
36.27.147
28.76.43
22.96.012
27.16.172
16.55.631
18.96.004

Un primer acercamiento que podemos hacer es dibujar una nube de puntos donde el eje de las X corresponda al número medio de habitaciones, y el eje de las Y corresponda al precio medio de la vivienda.

Una primera opción para resumir estos datos, es dibujar una recta que pase cerca de todos los datos, pero, ¿Cómo podemos hacerlo? ¿Podemos tantear la solución?

Parece que tratar de solucionar este problema por tanteo, no es factible, tratemos de buscar una solución aplicando las matemáticas.

Recta de regresión lineal

Queremos calcular una recta que minimice los errores entre todos los puntos dataset-scatter-error-1

Si calculamos la media de estos errores y los elevamos al cuadrado, obtenemos lo que se denomina error cuadrático medio, y la recta que cumple esta propiedad se denomina recta de regresión lineal.

Fórmulas para el cálculo de hiperplanos de regresión

Si $X$ es la matriz de variables con una columna de $1$ en la primera columna, e $Y$ son los datos que tenemos y queremos predecir. Si observamos el caso de las viviendas en Boston, la matrix $X$ tendría dos columnas, una sólo con 1, y otra con la media de número de habitaciones, por otro lado, la $Y$ serían los precios de las viviendas.

Entonces, el hiperplano $Y_e=\beta X$ (O recta en $\mathbb{R}^2$) tiene las siguientes componentes: $$ \beta = (X^T X)^{-1} X^T Y $$

Dado que la primera columna de $X$ está compuesta por 1, el hiperplano vendrá definido por: $$ Y_e = \beta_1 X + \beta_0 $$ Donde $\beta_i$ son las componentes del vector $\beta$

Prediciendo valores

Si volvemos a nuestro caso especifico, vamos a calcular los valores $\beta$ y $\alpha$.

Nuestra matrices $X$ e $Y$, vienen definidas de la siguiente forma:

$$ X=\left(\begin{matrix} 1 & 6.575 \
1 & 6.421 \
1 & 7.185 \
1 & 6.998 \
1 & 7.147 \
1 & 6.43 \
1 & 6.012 \
1 & 6.172 \
1 & 5.631 \
1 & 6.004 \end{matrix}\right), Y=\left(\begin{matrix} 24.0 \
21.6 \
34.7 \
33.4 \
36.2 \
28.7 \
22.9 \
27.1 \
16.5 \
18.9 \end{matrix}\right) $$

Por tanto, $$\beta=(-49.98256497, 11.82850406)$$ De donde, $$ y_e=x b_1 + b_0 $$

Podemos pintar la recta con los gráficos para ver como se ajusta la recta: descarga

Supongamos ahora, que queremos calcular el precio estimado de una vivienda de 8 habitaciones, ahora simplemente deberíamos sustiuir en nuestra recta otros valores, y tendríamos: $$ y_e = 8 \beta_1 + \beta_0 = 44 $$

Por lo cual, predecimos que valor de una vivienda de 8 habitaciones, tendrá un precio aproximadamente de 44k$

Colorful building corner Photo by Hernan Lucio / Unsplash

Cálculo de recta de regresión lineal Python

Para este ejemplo utilizaremos la librería de cálculo científico numpy, se puede encontrar el ejemplo aquí:

Limitaciones

En el ejemplo específico de los precios de las viviendas en Boston según el número de habitaciones, se puede observar que los datos están más o menos cercanos a la recta de regresión que hemos calculado, y que la nube de puntos se “asemeja” a una recta. Sin embargo, esto no es siempre así. Podría ocurrir que nuestros datos estén sumamente dispersos, y que nos fuese imposible encontrar una recta de regresión donde el error mínimo sea demasiado grande.

Es por eso, que se verán otros modelos más complejos que tratan de solucionar esto.

Aplicaciones

Como hemos observado, estos modelos son muy básicos y presentan limitaciones, sin embargo son bastante potentes en ciertas situaciones para predecir comportamientos.

Por ejemplo, podemos usar este modelo para predecir métricas en bases de datos temporales como Prometheus

Prediciendo el futuro con Prometheus

Prometheus incluye dos funciones interesante en este sentido predict_linear que predice el valor de una serie temporal en el futuro usando regresión lineal.

Esta función nos puede servir para tantear el valor que tendrá una métrica en el futuro. Por ejemplo, si tenemos una métrica que cuenta la cantidad de usuarios conectados durante una campaña, podremos saber cuantos usuarios habrá dentro de un periodo de tiempo.

Por otro lado, tenemos la función deriv, que nos devuelve la pendiente de la recta de regresión lineal.

Esta pendiente nos permite calcular la velocidad con la que se está moviendo nuestra serie temporal y hacia que dirección. Por ejemplo, si tenemos una métrica que cubre el porcentaje de disco duro libre, y hacemos su derivada en los últimos 30 minutos, y nos da un valor negativo, podremos saber que se están escribiendo ficheros en el disco, además, dado que la pendiente de la recta modela la velocidad de crecimiento (o decrecimiento) de nuestros datos, podremos sacar conclusiones de cuando pasará algo. Speedcurve Performance Analytics Photo by Luke Chesser / Unsplash

Fuente / Enlaces de interés

https://en.wikipedia.org/wiki/Linear_regression

https://docs.scipy.org/doc/numpy/reference/routines.linalg.html

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

https://docs.scipy.org/doc/numpy/index.html

https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_boston.html

Licensed under CC BY-NC-SA 4.0
Última actualización Nov 03, 2020 17:11 +0100
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy