Los modelos de aprendizaje basados en regresión son modelos bastante simples que pueden utilizarse para predecir variables cuantitativas (regresión lineal) o cualitativas (regresión logística). Esta práctica contiene ejercicios que muestran como construir modelos de aprendizaje de regresión lineal y regresión logística con Julia.
3.1 Ejercicios Resueltos
Para la realización de esta práctica se requieren los siguientes paquetes:
usingCSV# Para la lectura de archivos CSV.usingDataFrames# Para el manejo de datos tabulares.usingPrettyTables# Para mostrar tablas formateadas.usingPlots# Para el dibujo de gráficas.usingGLMakie# Para obtener gráficos interactivos.
Ejercicio 3.1 El conjunto de datos viviendas.csv contiene información sobre el precio de venta de viviendas en una ciudad.
Cargar los datos del archivo viviendas.csv en un data frame.
Definir una función de costo para el modelo lineal y evaluar el coste para el modelo lineal construido con los parámetros iniciales. A la vista del coste obtenido, ¿cómo de bueno es el modelo?
Ayuda
La función de coste para un modelo lineal es el error cuadrático medio.
donde es el modelo, es la predicción del modelo para el ejemplo -ésimo, es el valor real observado para el ejemplo -ésimo, y es el número de ejemplos.
La función de coste nos da una medida de lo lejos que están las predicciones del modelo de los valores reales observados. En este caso, el coste es muy alto, lo que indica que el modelo no es bueno.
¿En qué dirección debemos modificar los parámetros del modelo para mejorar el modelo?
Solución
Para minimizar la función de coste, debemos modificar los parámetros del modelo en la dirección opuesta al gradiente de la función de coste, ya que el gradiente de una función indica la dirección de mayor crecimiento de la función.
Crear una función para modificar los pesos del modelo lineal mediante el algoritmo del gradiente descendente, y aplicarla a los parámetros actuales tomando una tasa de aprendizaje de . ¿Cómo han cambiado los parámetros del modelo? Dibujar el modelo actualizado sobre el diagrama de dispersión. ¿Cómo ha cambiado el coste?
Ayuda
El algoritmo del gradiente descendente actualiza los parámetros del modelo de acuerdo a la siguiente regla:
donde es la tasa de aprendizaje y es la derivada parcial de la función de coste con respecto al parámetro .
Solución
functiongradiente_descendente!(θ, X, Y, η)# Calculamos el número de ejemplos m =length(Y)# Actualizamos el término independiente del modelo lineal. θ[1] -= η *sum(precio(X, θ) - Y) / m# Actualizamos la pendiente del modelo lineal. θ[2] -= η *sum((precio(X, θ) - Y) .* X) / mreturn θend
gradiente_descendente! (generic function with 1 method)
Aplicamos la función a los parámetros del modelo actual y mostramos los nuevos parámetros.
Se observa que ahora la recta está más cerca de la nube de puntos, por lo que el modelo ha mejorado. Calculamos el coste del nuevo modelo.
coste(θ, df.area, df.precio)
7.080823787113201e12
Repetir el proceso de actualización de los parámetros del modelo mediante el algoritmo del gradiente descendente durante 9 iteraciones más y dibujar los modelos actualizados.
Solución
for i =2:10gradiente_descendente!(θ, df.area, df.precio, 1e-8)plot!(df.area, precio(df.area, θ), label ="Modelo $i", legend =true)endplt
Dibujar un gráfico con la evolución del coste del modelo a lo largo de las iteraciones. ¿Cómo se comporta el coste a lo largo de las iteraciones?
Solución
costes =Float64[]for i =1:10gradiente_descendente!(θ, df.area, df.precio, 1e-8)push!(costes, coste(θ, df.area, df.precio))endcostes
El coste del modelo disminuye en cada iteración, lo que indica que el modelo está mejorando. Esto se debe a que el algoritmo del gradiente descendente modifica los parámetros del modelo en la dirección que minimiza la función de coste.
¿Hasta qué iteración habrá que llegar para conseguir un reducción del coste menor de un ?
Si la tasa de aprendizaje es demasiado grande, el algoritmo del gradiente descendente puede no converger y el coste puede oscilar en lugar de disminuir. En este caso, el coste aumenta en cada iteración, lo que indica que la tasa de aprendizaje es demasiado grande.