Regresión Lineal Múltiple – Práctica con Python

En la entrada de hoy veremos la parte práctica del algoritmo de Regresión Lineal Múltiple, en donde desarrollaremos un modelo para predecir el precio de las casas en Boston de acuerdo al número de habitaciones que cuenta la vivienda, el tiempo que ha tenido ocupada y la distancia que se encuentra la misma de los centros de trabajaos de Boston, siendo de esta forma varias características que se tomaran en cuenta para diseñar nuestro modelo.

Para este análisis vamos a utilizar el dataset disponible en la librería scikit-learn correspondiente al Boston Housing o las casas de Boston. Este es el mismo dataset que utilizamos para la práctica de Regresión Lineal Simple si ya viste ese tutorial te recomiendo que adelantes un poco esta entrada porque al principio vamos hacerlo mismo que hicimos en el anterior para tratar los datos.

Como todos los programas que hemos desarrollados hasta ahora lo primero que debemos hacer es importar las librerías que vamos a utilizar.

En este caso vamos a importar de sklearn el datasets, que es donde se guardan todos los conjuntos de datos que dispone esta librería y a su vez importamos de una vez linear_model.

Se importan la librerias a utilizar
from sklearn import datasets, linear_model

Seguidamente importamos los datos, para ello utilizamos la instrucción datasets punto load_boston().

#Importamos los datos de la misma librería de scikit-learn
boston = datasets.load_boston()

Tenemos mucha información dentro de esta variable lo que se nos hace difícil entender la información, por lo tanto, ahora procedemos a entender la data.

Para ello lo primero que vamos hacer es verificar la información contenida en el dataset, para este fin utilizamos la instrucción keys.

#Verifico la información contenida en el dataset
print('Información en el dataset:')
print(boston.keys())

Regresión-Lineal-simple-practica-1

Como podemos observar el dataset cuenta con la siguiente información: primeramente, la “data”, seguidamente “target” que sería la columna con las etiquetas o respuestas, posteriormente tenemos feature_names que serían los nombres de cada una de las columnas de la data y finalmente tenemos DESCR que sería la descripción total del dataset.

Sabiendo ya esto podemos ahora utilizar estos nombres para entender mejor los datos, lo primero que vamos a hacer es utilizar DESCR para ver las características del dataset.

#Verifico las características del dataset
print('Características del dataset:')
print(boston.DESCR)

Como podemos leer en la descripción este dataset cuenta con 506 datos y 13 atributos, la columna 14 es el target y es la media del valor de las viviendas.

Seguidamente tenemos la descripción del significado de cada una de las columnas o atributos de los datos. De igual forma nos indica un dato importante para nuestro análisis y es que nos indican que no existe ningún valor perdido, en consecuencia, nuestra data esta completa por lo que no es necesario realizar mucho preprocesamiento a los datos.

Ahora utilizaremos la instrucción shape para determinar la cantidad de datos contamos, aunque este es un paso de más ya que esta información nos la había dado previamente la descripción del dataset, pero de todas formas lo hacemos.

#Verifico la cantidad de datos que hay en los dataset
print('Cantidad de datos:')
print(boston.data.shape)

Regresión-Lineal-simple-practica-2

Como ya nos lo habían indicado este conjunto de datos cuenta con 506 muestras y 13 columnas.

Finalmente veamos las etiquetas de cada columna para ello utilizamos feature_names.

#Verifico la información de las columnas
print('Nombres columnas:')
print(boston.feature_names)

Regresión-Lineal-simple-practica-3

Sabiendo toda esta información entonces procedemos a preparar los datos que vamos a utilizar para crear el modelo.

Para este ejemplo vamos a implementar un predictor de Regresión Lineal Múltiple, por lo que podemos tomar varios atributos de nuestros datos para crear el modelo. Para nuestro análisis solamente vamos a tomar las columnas correspondientes al número de habitaciones con las que cuenta la casa, esta sería la que lleva por nombre “RM”, el tiempo que ha tenido ocupada, correspondiente a la columna “AGE” y la distancia que se encuentra la misma de los centros de trabajos de Boston que vendría siendo la columna con el nombre “DIS”. Estas columnas se encuentran ubicadas en la posición 5, 6 y 7 de los datos y estas vendrían siendo la variable “X”.

#Seleccionamos las columna 5, 6 y 7 del dataset
X_multiple = boston.data[:, 5:8]

Definido “X” ahora definimos “y” el cual será igual a los datos contenidos en target, como ya lo habíamos visto anteriormente.

#Defino los datos correspondientes a las etiquetas
y_multiple = boston.target

Como ya tenemos nuestros datos ahora procedemos a separarlos en entrenamiento y prueba lo hacemos utilizando la instrucción train_test_split, no si antes importando la respectiva librería.

Para la separación de los datos, vamos a tomar un 20% de los mismos para utilizarlos como prueba una vez que hayamos obtenido el modelo.

from sklearn.model_selection import train_test_split
#Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos
X_train, X_test, y_train, y_test = train_test_split(X_multiple, y_multiple, test_size=0.2)

Seguidamente definimos el algoritmo a utilizar que es el de LinearRegression.

#Defino el algoritmo a utilizar
lr_multiple = linear_model.LinearRegression()

Fíjate que es el mismo algoritmo que utilizamos en el ejemplo de Regresión Lineal Simple, esto se debe a que todos los algoritmos relacionados a Regresión Lineal utilizan esta misma librería, es decir no tiene que configurarse nada adicional para implementarla.

Definido el algoritmo ahora procedemos a entrenar nuestro modelo con los datos correspondiente, para ello utilizamos la instrucción fit.

#Entreno el modelo
lr_multiple.fit(X_train, y_train)

Y finalmente realizamos la predicción utilizando los datos de prueba.

#Realizo una predicción
Y_pred_multiple = lr_multiple.predict(X_test)

Regresión-Lineal-Múltiple-Practica

Si comparamos los datos que obtuvimos en la predicción con los datos reales dados por el dataset, no podemos dar cuenta que, al igual que con el modelo obtenido con Regresión Lineal Simple, algunos de los datos son parecidos unos con otros mientras que otros tienen una diferencia considerable entre si, por lo tanto, este modelo no es el más adecuado implementar para este conjunto de datos.

Pero a pesar de esto, continuemos con nuestro análisis, ahora obtengamos los valores correspondientes a la pendiente e intersección para obtener nuestra ecuación.

print('DATOS DEL MODELO REGRESIÓN LINEAL MULTIPLE')
print()
print('Valor de las pendientes o coeficientes "a":')
print(lr_multiple.coef_)
print('Valor de la intersección o coeficiente "b":')
print(lr_multiple.intercept_)

Regresión-Lineal-Múltiple-Practica-1

Regresión-Lineal-Múltiple-Practica-2

Como podemos observar para “a”, nos devuelve tres valores, esto se debe a que estamos utilizando 3 características para nuestro análisis por lo que cada una de ellas tendrá un valor correspondiente de “a”. Los valores serían los siguientes: 8,215 para el primero, -0,096 para el segundo y -0,491 para el último. A su vez el valor de “b” o la intersección es de -20,354.

Teniendo todos estos datos ahora calculemos la precisión del algoritmo para ello empleamos la instrucción “score” el cual devuelve el resultado de la estadística R al cuadrado.

print('Precisión del modelo:')
print(lr_multiple.score(X_train, y_train))

Regresión-Lineal-Múltiple-Practica-3

El resultado obtenido acá es de 0,518, como ya lo habíamos visto comparando los resultados de “y_predict” podíamos deducir que la precisión no iba a ser muy buena. Recuerda que mientras este valor sea más cercano a 1 mejor será nuestro modelo.

Finalizando ya nuestro análisis podemos decir que el programa en si es muy parecido al de Regresión Lineal Simple, por no decir que igual, la única gran diferencia es que los datos de X contendrán más de una columna o característica de nuestro dataset.

"""
Regresión Lineal Múltiple

@author: ligdigonzalez
"""

########## LIBRERÍAS A UTILIZAR ##########

#Se importan la librerias a utilizar
from sklearn import datasets, linear_model

########## PREPARAR LA DATA ##########

#Importamos los datos de la misma librería de scikit-learn
boston = datasets.load_boston()
print(boston)
print()

########## ENTENDIMIENTO DE LA DATA ##########

#Verifico la información contenida en el dataset
print('Información en el dataset:')
print(boston.keys())
print()

#Verifico las características del dataset
print('Características del dataset:')
print(boston.DESCR)

#Verifico la cantidad de datos que hay en los dataset
print('Cantidad de datos:')
print(boston.data.shape)
print()

#Verifico la información de las columnas
print('Nombres columnas:')
print(boston.feature_names)

########## PREPARAR LA DATA REGRESIÓN LINEAL MULTIPLE ##########

#Seleccionamos las columna 5, 6 y 7 del dataset
X_multiple = boston.data[:, 5:8]
print(X_multiple)

#Defino los datos correspondientes a las etiquetas
y_multiple = boston.target

########## IMPLEMENTACIÓN DE REGRESIÓN LINEAL MULTIPLE ##########

from sklearn.model_selection import train_test_split

#Separo los datos de "train" en entrenamiento y prueba para probar los algoritmos
X_train, X_test, y_train, y_test = train_test_split(X_multiple, y_multiple, test_size=0.2)

#Defino el algoritmo a utilizar
lr_multiple = linear_model.LinearRegression()

#Entreno el modelo
lr_multiple.fit(X_train, y_train)

#Realizo una predicción
Y_pred_multiple = lr_multiple.predict(X_test)

print('DATOS DEL MODELO REGRESIÓN LINEAL MULTIPLE')
print()

print('Valor de las pendientes o coeficientes "a":')
print(lr_multiple.coef_)

print('Valor de la intersección o coeficiente "b":')
print(lr_multiple.intercept_)

print('Precisión del modelo:')
print(lr_multiple.score(X_train, y_train))

 

3 thoughts on “Regresión Lineal Múltiple – Práctica con Python”

  1. Saludos. En otros ejemplos qe he visto sobre el método train_test_split, al momento de implementarlo usan un parámetro random_state. Agradecería me dieras un pocode claridad sobre este parámetro y su importancia o no al momento de de hacer un split de los datos.

    De antemano muchas gracias.

  2. Hola Victor, random_state se utiliza para que la división de los datos siempre sea la misma al momento de ejecutar el programa. Saludos.

  3. Hola Victor, random_state se utiliza para que la división de los datos siempre sea la misma al momento de ejecutar el programa y de esta forma no varíe mucho los resultados obtenidos. Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *