¿Cómo aprende un modelo de Machine Learning?

Ene 20, 2023 | MACHINE LEARNING

En este artículo hablaré de cómo los modelos supervisados aprenden de los datos. Veremos que este problema de aprendizaje se traduce en un problema matemático de optimización, es decir que un algoritmo trata de resolver un problema de optimización. Dado que hablar de manera generalizada resultaría complicado, vamos a explicar este problema utilizando una regresión lineal que utiliza el algoritmo de «Descenso de Gradiente» (gradient descent algorithm) para encontrar el modelo que mejor se ajusta a los datos.

¡No te pierdas ningún nuevo vídeo!

Visita mi canal de Youtube

Este post se basa en el ejemplo y los cálculos presentados por Andrew Wolf en su libro Machine Learning Simplified

Antes que nada, en este post no voy a explicar que es una regresión lineal, así que si no estás familiarizado con el tema te sugiero revisar los siguientes artículos:

Regresión lineal de «a» a «z»: lo que necesitas saber

Regresiones en Excel

En la siguiente tabla tenemos diferentes viviendas con su correspondiente tamaño en metros cuadrados y el precio en euros.

tabla datos como aprende un modelo de machine learning
grafico dispersion precio y tamaño viviendas

 Una de las mejores maneras para ver visualmente la relación entre dos variables numéricas es crear un gráfico de dispersión. Mirando el siguiente gráfico podemos intuir que las dos variables están relacionadas dado que el precio de las casas sube al aumentar el tamaño.

    Supongamos ahora que el objetivo de nuestro modelo es predecir el precio de la vivienda utilizando el tamaño como variable predictora. Una manera de modelizar esto es utilizar una relación lineal, o, dicho de otra forma, podemos utilizar una regresión lineal para predecir el precio de las viviendas. Esta opción tiene sentido también porque podemos ver en el gráfico que las dos variables aumentan de manera proporcional, es decir que se trata de una relación lineal. Desde el punto de vista matemático esta es la función que representa la relación y que utilizaremos para la predicción:

    f ̂(x)= a ∙ x + b

    Donde f(x) significa la función de x que representa la relación entre precio y tamaño (se trata de una aproximación de la función real dado que este última se desconoce). Analizando los elementos de la función tenemos:

    • «a»: es el coeficiente relacionado con el tamaño de la casa y representa la inclinación de la línea de regresión que mejor se ajusta a las observaciones;
    • «x»: representa el tamaño de la vivienda;
    • «b» es el interceptor o constante (visualmente, es donde la línea de regresión cruza el eje vertical, es decir el precio)

    También encontrarás la anterior función, donde «y» representa el precio, es decir que el precio de la vivienda es el resultado de su tamaño multiplicado por el coeficiente «a» al cual sumamos la constante «b». Dado que no se trata del precio real, sería más apropiado escribir «y» con el acento circunflejo, que significa que es una estimación o aproximación.

    y= a ∙ x + b

    Realizar una regresión lineal no es otra cosa que encontrar la línea que mejor se ajusta a nuestros datos. Si te fijas en el gráfico, esta línea se dibujará entre los puntos. Todas las estimaciones de precio estarán en la misma línea y dependerán del tamaño.

    linea regresión precio y tamaño viviendas

    En nuestro ejemplo, la función que representa esta línea es la siguiente:

    precio= 1,3 ∙ tamaño -18

    Si queremos estimar el precio de una vivienda de 80 metros cuadrados este es el cálculo:

    86= 1,3 ∙ 80 – 18

    Pero ¿cómo hemos determinado esta línea? Para ello, la regresión lineal necesita primero establecer una medida que defina la bondad de ajuste de la línea a los datos y, segundo, encontrar los valores de «a» y «b» que generen el mejor ajuste en base a la medida establecida anteriormente.

    La bondad de ajuste se basa en el concepto de los «residuos». Un residuo es la diferencia entre el precio estimado y el precio real. Dicho de otra forma, es el error de nuestra predicción:

    En la función anterior el residuo de la vivienda «i» es la diferencia entre el precio real (y) de la vivienda «i» y la estimación del precio utilizando la función f(x). Ahora que tenemos el concepto de residuo, necesitamos un cálculo que resuma todos los errores que la línea de regresión genere con los diferentes precios reales. De esta forma, elegiremos la línea que nos dé el menor valor posible, es decir, el menor total de errores. Si simplemente sumáramos los errores, o hiciéramos un promedio, tendríamos el riesgo de que los errores positivos y negativos se cancelaran entre sí, y esto no reflejaría realmente si la línea ajusta bien o no. Una solución es utilizar la suma de los errores absolutos (SAR – Sum of Absolute Residuals), aunque en realidad el método más utilizado es la suma residual de cuadrados o suma de residuos cuadrados (SSR – Sum of Squared Residuals). El cuadrado de los residuos resuelve el problema de los negativos y positivos, pero además asigna un error proporcionalmente más grande para los errores más elevados.

     Por ejemplo, un error de 10€ de precio suma 100 al SSR, y pesa el doble que dos errores de 5€, que sumarían 50 al SSR (5×5 + 5×5 = 50). Este cálculo se representa de la siguiente manera:

    menu importar desde web Power Query
    Como aprende modelo machine learning

     

    Simplificando la función anterior, la SSR se obtiene sumando cada error elevado al cuadrado, es decir, vivienda por vivienda restamos al valor real el valor estimado y elevamos al cuadrado el resultado. Repetimos esto para todas las viviendas y sumamos todos los valores.

     

    En el gráfico anterior vemos una visualización de las áreas que sumamos para calcular el error utilizando la línea de regresión que vimos anteriormente y que es la que mejor se ajusta a los puntos. En el siguiente gráfico he utilizado una línea que se ajusta menos, y como puedes intuir, la suma de los cuadrados nos daría un valor mayor.

    menu importar desde web Power Query

     Nuestro modelo de regresión lineal, para poder identificar los parámetros con el menor error (SSR), utilizará una función de coste. Simplificando, supongamos que ya conocemos el valor del interceptor (-18), nuestra función de coste será una función del coeficiente de x.

    Si calculáramos manualmente el resultado de la función anterior para varios valores de «a» obtendríamos la siguiente curva, donde en el eje horizontal tenemos los diferentes valores de «a» y en el eje vertical el correspondiente SSR. Utilizando esta función de coste, queremos elegir el valor de «a» que optimiza el SSR, es decir con el menor error. En este caso el valor es 1,3.

    curva función coste

    Para poder encontrar el valor de «a» que minimiza el error se utiliza un algoritmo de optimización llamado Algoritmo de Gradiente Descendente (Gradient Descent Algorithm).

    En este punto es importante diferenciar entre la función de coste y el algoritmo de gradiente descendente. La primera se representa en el gráfico anterior con la línea convexa, mientras que el algoritmo es el cálculo que encuentra el punto de la línea con el menor valor de o, dicho de otra forma, con el menor error. Para que se pueda utilizar este algoritmo, la línea de la función de coste necesita tener unas ciertas características:

    • diferenciable: podemos calcular la derivada en cualquier punto (simplificando, la línea tiene que ser continua o que no tenga cúspide)
    • convexa: es decir similar a nuestra función de coste (con una forma de «U» donde se puede identificar un mínimo global de la función)

    En general, el algoritmo funciona de la siguiente manera. Primero, define un ratio de aprendizaje fijo, es decir el tamaño del paso que va a dar el algoritmo. Segundo, elige un valor al aleatorio para el parámetro «a», que es lo mismo que decir que identifica un punto aleatorio en la curva. Tercero, define la dirección hacia la cual se tiene que mover, es decir donde la curva disminuye, y elige otro valor de «a».

    El mismo algoritmo se puede aplicar si tenemos más parámetros (además de «a») para encontrar los valores de cada parámetro que minimicen el error. No voy a entrar más en detalle porque ya entraríamos en el cálculo de derivadas y no es el objetivo de este post. Pero te dejo aquí un buen artículo por si quieres profundizar en el tema: https://www.iartificial.net/gradiente-descendiente-para-aprendizaje-automatico/.

    Puedes descargar la plantilla R con los cálculos presentados en este post.