Bosques Aleatorios Regresi贸n – Pr谩ctica con Python

En esta entrada explicaremos la parte pr谩ctica del algoritmo de Bosques Aleatorio Regresi贸n, 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.

A su vez, te recomiendo que, si no haz visto la informaci贸n anterior referente a la teor铆a y c贸mo implementar este algoritmo utilizando la librer铆a Scikit Learn te vayas a verlos porque son las bases para entender lo que se explicar谩 en este.

El dataset que vamos a utilizar para realizar la pr谩ctica ser谩 el de Boston Housing o las casas de Boston, que es el mismo que hemos desarrollado con los anteriores algoritmos por lo que no profundizaremos en c贸mo importar los datos y realizar el respectivo preprocesamiento, ac谩 solamente nos enfocaremos en c贸mo implementar el algoritmo de Bosques Aleatorios Regresi贸n, en caso de que quieras obtener m谩s informaci贸n del preprocesamiento del dataset te recomiendo que las publicaciones anteriores en donde tienes una explicaci贸n muy completa al respecto.

Aclarado esto podemos empezar con el desarrollo del modelo. Lo primero que debemos hacer es separar los datos en 鈥渪鈥 y 鈥測鈥, en este caso estas variables las definiremos como X_bar que ser谩 igual a los datos ubicados en la columna 6 del dataset, y y_adr correspondiente a la columna de target.

#Seleccionamos solamente la columna 6 del dataset
X_bar = boston.data[:, np.newaxis, 5]

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

Definido esto veamos estos datos graficados para tener una visi贸n con lo que estamos trabajando, para ello utilizamos la librer铆a Matplotlib, que ya hemos explicado su uso con anterioridad.

#Graficamos los datos correspondientes
plt.scatter(X_bar, y_bar)
plt.show()

Bosques-Aleatorios-Regresio虂n-Pra虂ctica-1

Para construir el modelo debemos separar nuevamente los datos, pero esta vez en datos de entrenamiento y en datos de prueba, para esto utilizamos la instrucci贸n train_test_split la cual nos ahorra bastante el trabajo.

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_bar, y_bar, test_size=0.2)

El siguiente paso que debemos hacer es importar el modulo de Scikit Learn para trabajar con el algoritmo de Bosques Aleatorios Regresi贸n.

from sklearn.ensemble import RandomForestRegressor

Con esta simple l铆nea de c贸digo ya podemos empezar a utilizar este algoritmo por lo que lo definimos en nuestro programa bar ser谩 igual a RadomForestRegressor, y ac谩 empezamos a definir los par谩metros respectivos de este algoritmo.

#Defino el algoritmo a utilizar
bar = RandomForestRegressor(n_estimators = 300, max_depth = 8)

El primero de ellos es n_estimators que ser谩 el estimado de 谩rboles, en este caso vamos a colocar 300, este n煤mero lo podr谩s variar por tu cuenta para que puedas verificar el comportamiento del algoritmo, si mejora o no los resultados obtenidos.

El siguiente par谩metro que vamos a definir es el de max_depth, que ser谩 igual a 8, de igual forma te recomiendo que modifique este valor para que puedas observar el comportamiento de los resultados.

El resto de par谩metros los dejaremos con sus valores por defecto, en caso de que quieras definirlos por tu cuenta lo puedes hacer sin ning煤n problema.

Cada uno de estos par谩metros fueron explicados en el anterior video porque lo que si tienes alguna duda te recomiendo que lo revises para que puedas entender mejor esto.

Realizado todo esto ya podemos entrenar el modelo utilizando el algoritmo con los par谩metros definidos y con los datos de entrenamiento definidos anteriormente.

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

Seguidamente utilizamos la instrucci贸n predict() para realizar la predicci贸n utilizando los datos de prueba, ac谩 lo que queremos hacer es probar que tan bien funciona el modelo que hemos desarrollado.

#Realizo una predicci贸n
Y_pred = bar.predict(X_test)

Para ello comparemos los datos de 鈥測鈥 reales y los que predijo nuestro modelo. Como podemos observar existe una peque帽a diferencia unos con otros, pero a煤n as铆 no es tanto como hemos podido observar con otros algoritmos.

Bosques-Aleatorios-Regresio虂n-Pra虂ctica-2-1

Grafiquemos estos datos, para ello utilizaremos el mismo truco que hicimos en el video de la pr谩ctica de 脕rboles de Decisi贸n en donde adecuamos los datos para que se vean mucho mejor en nuestra grafica, para entender mejor esto te recomiendo que vayas a ese video.

Ac谩 las l铆neas de c贸digo son exactamente igual a las de all谩 por lo que grafiquemos los datos.

#Graficamos los datos de prueba junto con la predicci贸n
X_grid = np.arange(min(X_test), max(X_test), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X_test, y_test)
plt.plot(X_grid, bar.predict(X_grid), color='red', linewidth=3)
plt.show()

Bosques-Aleatorios-Regresio虂n-Pra虂ctica-3

Como podemos observar el comportamiento de la l铆nea roja es muy parecida a las de los 脕rboles de Decisi贸n, ac谩 se tiene altos y bajos y no es una l铆nea recta como la hemos visto en otros algoritmos.

Evaluemos entonces la precisi贸n del algoritmo utilizando la instrucci贸n 鈥渟core鈥, el resultado obtenido es de 0,793, el cual es bastante aceptable.

print('DATOS DEL MODELO BOSQUES ALEATORIOS REGRESION')
print()

print('Precisi贸n del modelo:')
print(bar.score(X_train, y_train))

Bosques-Aleatorios-Regresio虂n-Pra虂ctica-4

Te aconsejo a que hagas modificaciones a la configuraci贸n del algoritmo para que veas el comportamiento del modelo y ver si existe mejora en el mismo o no. De esta forma puedes practicar tus conocimientos en Machine Learning.

El programa completo de este ejercicio se encuentra a continuaci贸n:

"""
Bosques Aleatorios Regresi贸n

@author: ligdigonzalez
"""

########## LIBRER脥AS A UTILIZAR ##########

#Se importan la librerias a utilizar
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

########## 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 BOSQUES ALEATORIOS REGRESI脫N ##########

#Seleccionamos solamente la columna 6 del dataset
X_bar = boston.data[:, np.newaxis, 5]

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

#Graficamos los datos correspondientes
plt.scatter(X_bar, y_bar)
plt.show()

########## IMPLEMENTACI脫N DE BOSQUES ALEATORIOS REGRESI脫N ##########

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_bar, y_bar, test_size=0.2)

from sklearn.ensemble import RandomForestRegressor

#Defino el algoritmo a utilizar
bar = RandomForestRegressor(n_estimators = 300, max_depth = 8)

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

#Realizo una predicci贸n
Y_pred = bar.predict(X_test)

#Graficamos los datos de prueba junto con la predicci贸n
X_grid = np.arange(min(X_test), max(X_test), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X_test, y_test)
plt.plot(X_grid, bar.predict(X_grid), color='red', linewidth=3)
plt.show()
#
print('DATOS DEL MODELO BOSQUES ALEATORIOS REGRESION')
print()

print('Precisi贸n del modelo:')
print(bar.score(X_train, y_train))

Deja un comentario

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