Regresión lineal múltiple con Python

La regresión lineal es uno de los algoritmos más utilizados en el aprendizaje automático. Querrá familiarizarse con la regresión lineal porque nos necesitará...

Introducción

La regresión lineal es uno de los algoritmos más utilizados en el aprendizaje automático. Querrá familiarizarse con la regresión lineal porque necesitará usarla si está tratando de medir la relación entre dos o más valores continuos.

Una inmersión profunda en la teoría y la implementación de la regresión lineal lo ayudará a comprender este valioso algoritmo de aprendizaje automático.

Definición de términos

Antes de profundizar en la regresión lineal, tomemos un momento para asegurarnos de que tenemos claro qué es la regresión.

En el aprendizaje automático, existen dos tipos diferentes de métodos de aprendizaje supervisado: clasificación y regresión.

En general, la regresión es un método estadístico que estima relaciones entre variables. La clasificación también intenta encontrar relaciones entre variables, siendo la principal diferencia entre la clasificación y la regresión el resultado del modelo.

En una tarea de regresión, la variable de salida es de naturaleza numérica o continua, mientras que para las tareas de clasificación la variable de salida es de naturaleza categórica o discreta. Si una variable es categórica, significa que hay un número finito/discreto de grupos o categorías en los que la variable puede encajar.

Considere un clasificador que intente predecir qué tipo de mamífero es un animal, en función de diferentes características. Aunque hay muchos mamíferos, no hay infinitos mamíferos, solo hay tantas categorías posibles en las que se puede clasificar la salida.

Por el contrario, las variables continuas tendrán un número infinito de valores entre dos variables cualesquiera. La diferencia entre dos números dados se puede representar de infinitas maneras, escribiendo decimales cada vez más largos. Esto significa que incluso cosas como las mediciones de fecha y hora pueden considerarse variables continuas si las mediciones no se clasifican en categorías discretas.

Si bien las tareas de regresión se ocupan de estimar la relación entre alguna variable de entrada con una variable de salida continua, existen [diferentes tipos de regresión](https://towardsdatascience.com/5-types-of-regression-and-their-properties- c5e1fa12d55e) algoritmos:

  • Regresión lineal
  • Regresión polinomial
  • Regresión paso a paso
  • Regresión de cresta
  • Regresión de lazo
  • Regresión de ElasticNet

Estos diferentes tipos de regresión son adecuados para diferentes tareas. Regresión de cresta se utiliza mejor cuando hay altos grados de colinealidad o relaciones casi lineales en el conjunto de características. Mientras tanto, la regresión polinomial se utiliza mejor cuando existe una relación no lineal entre las características, ya que es capaz de dibujar líneas de predicción curvas.

La regresión lineal es uno de los tipos de regresión más utilizados, adecuado para dibujar una línea recta a lo largo de un gráfico que muestra una relación lineal entre variables.

Teoría detrás de la regresión lineal múltiple {#teoría detrás de la regresión lineal múltiple}

Una regresión lineal simplemente muestra la relación entre la variable dependiente y la variable independiente.

Si la regresión lineal es solo el trazado de una relación entre una variable independiente (X) y una variable dependiente (Y), es posible que pueda adivinar que multivariante/regresión lineal múltiple es solo una regresión lineal llevado a cabo en más de una variable independiente.

Echemos un vistazo a la ecuación de regresión lineal, ya que comprender cómo funciona lo ayudará a saber cuándo aplicarla.

regresión_lineal
[Crédito: commons.wikimedia.org]{.pequeño}

La ecuación para la regresión lineal es: Y = a+b*X. En una tarea de regresión lineal, nuestro modelo estimará los parámetros (a y b). Luego tomaremos la constante, o el intercepto a, y sumaremos la pendiente de la línea b por la variable independiente X (nuestra característica de entrada), para calcular el valor de la variable dependiente (Y) .

La imagen de arriba es un ejemplo de cómo se ve una relación lineal entre las variables X e Y.

La ecuación utilizada para calcular los valores de a y b para la línea de mejor ajuste es el Método de mínimos cuadrados, que funciona minimizando la distancia al cuadrado desde cada punto de datos hasta la línea que se está dibujando. No necesita saber cómo funciona exactamente la ecuación para implementar la regresión lineal, pero si tiene curiosidad, puede leer más sobre esto en el enlace de arriba.

Si Y = a+b*X es la ecuación para la regresión lineal singular, se deduce que para la regresión lineal múltiple, el número de variables independientes y pendientes se introducen en la ecuación.

Por ejemplo, aquí está la ecuación para la regresión lineal múltiple con dos variables independientes:

$$Y = a + b1 \ast X1 + b2 \ast x2$$

Esto es cierto para cualquier número dado de variables.

Regresión lineal multivariante puede pensarse como múltiples modelos regulares de regresión lineal, ya que solo está comparando las correlaciones entre características para el número dado de características.

Para las ecuaciones mencionadas anteriormente, se supone que existe una relación lineal entre la variable dependiente y la variable o variables independientes. Esto también supone que las variables/características son todos valores continuos en lugar de valores discretos.

Implementación de MLR

Conversión de variables categóricas


[Crédito: Commons.wikimedia.org]{.pequeño}

Al implementar la regresión lineal en un sistema de aprendizaje automático, las variables deben ser de naturaleza continua, no categórica. Sin embargo, con frecuencia tendrá datos que contienen variables categóricas y no variables continuas.

Por ejemplo, un conjunto de datos podría contener ocurrencias de algún evento en países específicos. Los países son variables categóricas. Para utilizar correctamente la regresión lineal, estas variables categóricas deben convertirse en variables continuas.

Hay varias maneras diferentes que esto [puede lograrse](https:// www.analyticsvidhya.com/blog/2015/11/easy-methods-deal-categorical-variables-predictive-modeling/https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine- learning-part-1-of-3-6dca2f71b159), dependiendo del tipo de variable en cuestión. Las variables pueden ser dicotómicas, nominales u ordinales.

Variables dicotómicas

Variables dicotómicas son aquellas que existen en solo una de dos categorías. Una variable dicotómica es "sí" o "no", blanco o negro. Las variables dicotómicas son fáciles de convertir en variables continuas, simplemente deben etiquetarse como 0 o 1.

Variables nominales/ordinales

Las variables nominales y ordinales son tipos de variables categóricas, y puede haber cualquier número de categorías a las que pueden pertenecer los valores. En términos de variables ordinales, se supone que hay algún orden en las variables, o que las variables deberían tener diferentes pesos. Por lo tanto, las variables categóricas se pueden convertir en valores continuos asignándoles números que comienzan en cero y se extienden hasta la longitud de las categorías.

Convertir variables nominales en variables continuas es la tarea más desafiante de los tres tipos de conversión. Esto se debe a que las variables nominales no deben tener un peso u orden diferente, se supone que todas las variables categóricas tienen "valores" equivalentes. Esto significa que no puede simplemente ordenarlos desde cero hasta el número de categorías, ya que esto implicaría que las categorías anteriores tienen menos "valor" que las categorías posteriores.

Por esta razón, la táctica predeterminada para transformar variables nominales en variables continuas es algo llamado codificación one-hot, a veces denominada "creación de variables ficticias ". Esencialmente, crea más funciones o variables que reemplazan las categorías reales en sus datos. El proceso de codificación one-hot significa crear una matriz del tamaño de su número de categorías y completarlas con un "uno" en la posición correspondiente a la categoría relevante y ceros en el resto.

Por ejemplo, aquí hay una tabla con datos categóricos:

Color

Rojo Verde Azul

Después de pasar esta tabla por el proceso de codificación one-hot, termina luciendo así:

Rojo verde azul


1 0 0 0 1 0 0 0 1

Cuando esté creando etiquetas continuas para sus variables categóricas, asegúrese de que los valores realmente correspondan a la importancia de la categoría en cuestión. Si tiene variables ordinales y el rango de valores que le dan, no tenga en cuenta el rango, las relaciones entre las categorías se perderán y su clasificador se verá afectado negativamente.

Canalización de aprendizaje automático {#canalización de aprendizaje automático}

Antes de ver un ejemplo de implementación de regresión lineal múltiple en un conjunto de datos real, tomemos un momento para entender el aprendizaje automático [flujo de trabajo o tubería](https://www.kdnuggets.com/2018/05 /general-approaches-machine-learning-process.html).

Cada implementación de algoritmos de aprendizaje automático tiene los mismos componentes básicos. Necesitas:

  • Preparar los datos.
  • Crear el modelo
  • Entrenar al modelo
  • Evaluar el modelo

La preparación de los datos suele ser una de las partes más desafiantes del aprendizaje automático, ya que implica no solo recopilar los datos, sino también transformarlos en un formato que pueda utilizar el algoritmo elegido. Esto implica muchas tareas, como tratar con valores faltantes o datos dañados o con formato incorrecto. Por esta razón, usaremos un conjunto de datos prefabricado que requiere poco procesamiento previo.

Crear el modelo de aprendizaje automático es bastante sencillo cuando se usa una biblioteca como Scikit-Aprender. Por lo general, solo se necesitan unas pocas líneas de código para instanciar un algoritmo de aprendizaje automático determinado. Sin embargo, existen diferentes argumentos y parámetros que toman estos algoritmos que afectarán la precisión de su modelo. El arte de elegir los valores correctos de los parámetros para el modelo le llegará con el tiempo, pero siempre puede consultar la documentación del algoritmo en la biblioteca elegida para ver con qué parámetros puede experimentar.

Entrenar el modelo también es bastante sencillo cuando se usa una biblioteca como Scikit-Learn, ya que, una vez más, solo se necesitan unas pocas líneas de código para entrenar el algoritmo en el conjunto de datos elegido.

Sin embargo, debe asegurarse de haber dividido sus datos en conjuntos de entrenamiento y prueba. No puede evaluar el rendimiento de su clasificador en el mismo conjunto de datos en el que lo ha entrenado, ya que su modelo ya ha aprendido los parámetros de este conjunto de datos. La evaluación de los datos en el conjunto de entrenamiento no le dará ninguna idea sobre el rendimiento de su modelo en otro conjunto de datos.

Ejemplo de implementación de MLR

Sin más demora, examinemos cómo llevar a cabo una regresión lineal múltiple utilizando el módulo Scikit-Learn para Python.


[Crédito: commons.wikimedia.org]{.pequeño}

Primero, necesitamos cargar nuestro conjunto de datos. Usamos la biblioteca Scikit-Learn y viene preempaquetada con algunos conjuntos de datos de muestra. El conjunto de datos que usaremos es el Conjunto de datos de vivienda de Boston. El conjunto de datos tiene muchas características diferentes sobre las casas en el área de Boston, como el tamaño de la casa, la tasa de criminalidad, la edad de construcción, etc. El objetivo es predecir el precio de la casa en función de estas características.

Aquí están todas las importaciones que necesitamos:

1
2
3
4
5
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error, r2_Score

Ahora necesitamos crear una instancia del conjunto de datos llamando a la función load_boston():

1
bh_data = load_boston()

Imprimamos el valor de la variable de datos para ver qué tipo de datos contiene:

1
print(bh_data.keys())

Esto es lo que obtenemos:

1
dict_keys(['data', 'target', 'feature_names', 'DESCR'])

Los datos son toda la información real sobre las casas, mientras que el objetivo es el precio de la casa, los nombres de características son los nombres de las categorías en las que se incluyen los datos y DESCR es un comando para describir las características del conjunto de datos.

Estamos tratando de obtener los datos y los nombres de las características en un marco de datos que nuestro modelo pueda usar, así que creemos un objeto de marco de datos a partir de los datos usando [pandas](/tutorial-para-principiantes-sobre-la-biblioteca -pandas-python/).

También pasamos los nombres de las funciones como encabezados de columna:

1
boston = pd.Dataframe(bh_data.data, columns=bh_data.feature_names)

Si queremos tener una idea de los tipos de características en el conjunto de datos, podemos imprimir algunas de las filas, junto con una descripción de cuáles son las características:

1
print(data.DESCR)

Estas son algunas de las descripciones que se devuelven:

1
2
3
4
5
6
CRIM: Per capita crime rate by town
ZN: Proportion of residential land zoned for lots over 25,000 sq. ft
INDUS: Proportion of non-retail business acres per town
...
LSTAT: Percentage of lower status of the population
MEDV: Median value of owner-occupied homes in $1000s

Queremos predecir el valor medio de una casa, pero nuestro conjunto de datos actual no tiene esa información para entrenar/probar, así que creemos una nueva columna en el marco de datos y carguemos los valores objetivo del conjunto de datos.

Esto se hace simplemente especificando el marco de datos y el nombre de la columna que queremos crear en la variable, luego seleccionando los valores objetivo:

1
boston['MEDV'] = bh_data.target

Normalmente, haría un análisis de datos para averiguar cuáles son las características más importantes y usar esas variables para la regresión. Sin embargo, ese podría ser un artículo en sí mismo, así que en este caso, solo le diré que las características con las correlaciones más fuertes son la proporción de “estado más bajo” en la población ('LSTAT') y el número de habitaciones de la casa ('RM').

Así que usemos 'RM' y 'LSTAT' como nuestras variables para la regresión lineal. Estos valores ya son continuos en nuestro conjunto de datos, por lo que no necesitamos codificarlos en absoluto.

Sin embargo, vamos a concatenar las dos columnas de variables en una sola columna con el comando np.c_ de la biblioteca entumecido. También crearemos una nueva variable para almacenar los valores objetivo especificando el marco de datos boston y la columna que queremos:

1
2
X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT','RM']
Y = boston['MEDV']

Ahora dividamos el marco de datos en conjuntos de entrenamiento y prueba:

1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=9)

Ahora necesitamos crear una instancia del modelo, lo que hacemos simplemente llamando a la función LinearRegression de Scikit-Learn:

1
lin_reg_mod = LinearRegression()

Ahora ajustamos el modelo en los datos de entrenamiento:

1
lin_reg_mod.fit(X_train, y_train)

Ahora que el modelo se ha ajustado, podemos hacer predicciones llamando al comando predict. Estamos haciendo predicciones en el conjunto de prueba:

1
pred = lin_reg_mod.predict(X_test)

Ahora compararemos las predicciones con los valores reales usando las métricas RMSE y R-2, dos métricas comúnmente utilizadas para evaluar tareas de regresión:

1
2
3
test_set_rmse = (np.sqrt(mean_squared_error(y_test, pred)))

test_set_r2 = r2_score(y_test, pred)

Excelente. Nuestras variables almacenan la evaluación del modelo y tenemos una implementación completa de regresión lineal múltiple en un conjunto de datos de muestra.

Imprimamos las métricas de precisión y veamos qué resultados obtenemos:

1
2
print(test_set_rmse)
print(test_set_r2)

Aquí están nuestros resultados:

1
2
3
4
# Note that for rmse, the lower that value is, the better the fit
6.035041736063677
# The closer towards 1, the better the fit
0.6400551238836978

Podría intentar usar más funciones para mejorar la precisión del modelo.

Yendo más lejos: proyecto de extremo a extremo portátil

¿Tu naturaleza inquisitiva te hace querer ir más allá? Recomendamos consultar nuestro Proyecto guiado: ["Predicción práctica del precio de la vivienda: aprendizaje automático en Python"](https://wikihtp.com/courses/hands-on-house- precio-predicción-aprendizaje-máquina-en-python/#cta){target="_blank"}.

[](https://wikihtp.com/ cursos/predicción-de-precio-de-la-casa-práctica-aprendizaje-de-máquina-en-python/#cta)

En este proyecto guiado, aprenderá a crear potentes modelos tradicionales de aprendizaje automático, así como modelos de aprendizaje profundo, utilizar Ensemble Learning y capacitar a los meta-aprendices para predecir los precios de la vivienda a partir de una bolsa de modelos Scikit-Learn y Keras.

Con Keras, la API de aprendizaje profundo creada sobre Tensorflow, experimentaremos con arquitecturas, crearemos un conjunto de modelos apilados y entrenaremos una red neuronal meta-aprendizaje (modelo de nivel 1) para averiguar el precio de un casa.

El aprendizaje profundo es sorprendente, pero antes de recurrir a él, se recomienda intentar resolver el problema con técnicas más simples, como los algoritmos de aprendizaje superficial. Nuestro rendimiento de referencia se basará en un algoritmo de Regresión de bosque aleatorio. Además, exploraremos la creación de conjuntos de modelos a través de Scikit-Learn a través de técnicas como embalaje y votación.

Este es un proyecto integral y, como todos los proyectos de aprendizaje automático, comenzaremos con Análisis exploratorio de datos, seguido de Preprocesamiento de datos y, finalmente, Creación de modelos de aprendizaje superficial y Profundo para ajustarse a los datos que hemos explorado y limpiado previamente.

Conclusión

La regresión lineal multivariante/múltiple es un algoritmo extremadamente útil para rastrear las relaciones de variables continuas. También es uno de los algoritmos más utilizados en el aprendizaje automático, por lo que vale la pena familiarizarse con él.