Regresión lineal múltiple con Python

R

Introducción

La regresión lineal es uno de los algoritmos más utilizados en el Machine Learning. Querrá familiarizarse con la regresión lineal porque deberá 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 Machine Learning.

Definición de términos

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

En el Machine Learning, 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 clasificación y 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 intenta predecir qué tipo de mamífero es un animal, basándose en diferentes características. Aunque hay muchos mamíferos, no hay infinitos mamíferos, solo hay un número limitado de 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. La diferencia entre dos números dados se puede representar como un número infinito de formas, 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 preocupan por estimar la relación entre alguna variable de entrada con una variable de salida continua, existen diferentes tipos de algoritmos de regresión :

  • Regresión lineal
  • Regresión polinomial
  • Regresión escalonada
  • Regresión de crestas
  • Regresión de lazo
  • Regresión de ElasticNet

Estos diferentes tipos de regresión son adecuados para diferentes tareas. La regresión de crestas se usa 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 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 comúnmente utilizados, adecuado para dibujar una línea recta a través de un gráfico que muestra una relación lineal entre variables.

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 la regresión lineal multivariada / múltiple es solo una regresión lineal realizada en más de una variable independiente .

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

Crédito: commons.wikimedia.org

La ecuación para la regresión lineal es: Y = a+b*X. En una tarea de regresión lineal tendremos los parámetros ( ay b) estimados por nuestro modelo. Luego tomaremos la constante, o intersección a, y sumaremos la pendiente de la línea bmultiplicada 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 Xy Y.

La ecuación utilizada para calcular los valores de ay bpara 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 ella en el enlace de arriba.

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

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

Y
=
a
+
b
1

X
1
+
b
2

x
2

Esto es válido para cualquier número de variables.

La regresión lineal multivariante se puede considerar como múltiples modelos de regresión lineal regular, ya que solo está comparando las correlaciones entre características para un número determinado 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 valores continuos en lugar de valores discretos.

Implementing MLR

Conversión de variables categóricas

Crédito: commons.wikimedia.org

Al implementar la regresión lineal en un sistema de Machine Learning, 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 se puede lograr , dependiendo del tipo de variable en cuestión. Las variables pueden ser dicotómicas, nominales u ordinales.

Variables dicotómicas

Las 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 0o 1.

Nominal/Ordinal Variables

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 asume que hay algún orden en las variables, o que las variables deben tener pesos diferentes. Por lo tanto, las variables categóricas se pueden convertir en valores continuos asignándoles números que comienzan en cero y van 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 presume 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 denominado “creación de variables ficticias”. Básicamente, crea más funciones o variables que representan 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

Red
Verde
Azul

Después de pasar esta tabla por el proceso de codificación en caliente, termina luciendo así:

Rojo verde azul

100
010
001

Cuando cree etiquetas continuas para sus variables categóricas, asegúrese de que los valores correspondan genuinamente al significado 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 Machine Learning

Antes de ver un ejemplo de implementación de regresión lineal múltiple en un conjunto de datos real, tomemos un momento para comprender el flujo de trabajo o canalización de Machine Learning .

Cada implementación de algoritmos de Machine Learning tiene los mismos componentes básicos. Necesitas:

  • Prepara los datos
  • Crea el modelo
  • Entrena el modelo
  • Evaluar el modelo

La preparación de los datos es con frecuencia una de las partes más desafiantes del Machine Learning, ya que implica no solo recopilar los datos, sino también transformarlos en un formato que pueda ser utilizado por el algoritmo elegido. Esto implica muchas tareas, como tratar con valores perdidos o datos dañados o mal formados. Por esta razón, utilizaremos un conjunto de datos prefabricados que requiere poco procesamiento previo.

Crear el modelo de Machine Learning es bastante sencillo cuando se usa una biblioteca como Scikit-Learn . Por lo general, solo se necesitan unas pocas líneas de código para crear una instancia de un algoritmo de Machine Learning determinado. Sin embargo, hay diferentes argumentos y parámetros que toman estos algoritmos que afectarán la precisión de su modelo. El arte de elegir los valores de parámetros correctos 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.

El entrenamiento del modelo también es bastante sencillo cuando se usa una biblioteca como Scikit-Learn, ya que una vez más, generalmente 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.

Sample MLR Implementation

Sin más demora, examinemos cómo realizar regresiones lineales múltiples usando el módulo Scikit-Learn para Python.

Crédito: commons.wikimedia.org

Primero, necesitamos cargar nuestro conjunto de datos. Estamos usando la biblioteca Scikit-Learn y viene empaquetada 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 antigüedad del edificio, 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:

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 load_boston()función:

bh_data = load_boston()

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

print(bh_data.keys())

Esto es lo que obtenemos:

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

El dataes toda la información real en relación con las casas, mientras que el targetes el precio de la casa, el feature namesson los nombres de las categorías de los datos cae en, y DESCRes 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 puede usar, así que creemos un objeto de marco de datos a partir de los datos usando Pandas.

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

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:

print(data.DESCR)

Estas son algunas de las descripciones que se devuelven:

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 mediano 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 targetvalores:

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, podría ser un artículo en sí mismo, así que en este caso, solo te diré que las características con las correlaciones más fuertes son la proporción de “estatus más bajo” en la población (‘LSTAT’) y la cantidad de habitaciones en la casa (‘RM’).

Entonces, 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, concatenemos las dos columnas de variables en una sola columna con el comando de la biblioteca Numpy np.c_. También crearemos una nueva variable para almacenar los valores objetivo especificando el bostonmarco de datos y la columna que queremos:

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:

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 LinearRegressionfunción desde Scikit-Learn:

lin_reg_mod = LinearRegression()

Ahora ajustamos el modelo a los datos de entrenamiento:

lin_reg_mod.fit(X_train, y_train)

Ahora que el modelo se ha ajustado, podemos hacer predicciones llamando al predictcomando. Estamos haciendo predicciones sobre el conjunto de pruebas:

pred = lin_reg_mod.predict(X_test)

Ahora compararemos las predicciones con los valores reales mediante el uso de las métricas RMSE y R-2, dos métricas que se usan comúnmente para evaluar las tareas de regresión:

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:

print(test_set_rmse)
print(test_set_r2)

Aquí están nuestros resultados:

# 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

Puede intentar utilizar más funciones para mejorar la precisión del modelo.

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 Machine Learning, por lo que vale la pena familiarizarse con él.

Ahora que comprende la teoría detrás de la regresión lineal y ha visto un ejemplo de su uso en un conjunto de datos real, debería intentar implementarlo en diferentes conjuntos de datos para familiarizarse con él. También es posible que desee examinar los otros algoritmos de regresión .

Si desea echar un vistazo al código fuente, ¡lo tenemos en GitHub !

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad