0% encontró este documento útil (0 votos)
54 vistas4 páginas

Regresión Lineal con Árboles en Python

Este documento describe un modelo de regresión lineal utilizando árboles de decisión para predecir el precio de las viviendas en Boston. Se cargan los datos de Boston, se dividen en conjuntos de entrenamiento y prueba, y se crea un modelo de árbol de decisión. Luego, se aplica poda de complejidad constante mediante validación cruzada para mejorar el modelo. Finalmente, se comparan los errores de prueba del modelo inicial y final.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas4 páginas

Regresión Lineal con Árboles en Python

Este documento describe un modelo de regresión lineal utilizando árboles de decisión para predecir el precio de las viviendas en Boston. Se cargan los datos de Boston, se dividen en conjuntos de entrenamiento y prueba, y se crea un modelo de árbol de decisión. Luego, se aplica poda de complejidad constante mediante validación cruzada para mejorar el modelo. Finalmente, se comparan los errores de prueba del modelo inicial y final.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

# -*- coding: utf-8 -*-

"""[Link]

Automatically generated by Colaboratory.

Original file is located at


[Link]

#Predicción del precio de vivienda en Boston


Modelo: Regresión Lineal usando Arboles de Decisión

Darwin Patiño Pérez, febrero 2021


"""

# Tratamiento de datos
# ------------------------------------------------------------------------------
import numpy as np
import pandas as pd

# Gráficos
# ------------------------------------------------------------------------------
import [Link] as plt

# Preprocesado y modelado
# ------------------------------------------------------------------------------
from [Link] import load_boston
from sklearn.model_selection import train_test_split
from [Link] import DecisionTreeRegressor
from [Link] import plot_tree
from [Link] import export_graphviz
from [Link] import export_text
from sklearn.model_selection import GridSearchCV
from [Link] import mean_squared_error

# Configuración warnings
# ------------------------------------------------------------------------------
import warnings
[Link]('once')

# Cargando los datos desde sklearn (FORMA-1)


# Se unen todos los datos (predictores y variable respuesta en un único dataframe)
boston = load_boston(return_X_y=False)
datos = np.column_stack(([Link], [Link]))
datos = [Link](datos,columns = [Link](boston.feature_names, "MEDV"))
[Link](3)

[Link]()
# Cargando los datos desde el computador(FORMA-2)
datos = pd.read_csv("[Link]")
[Link](3)
dataset = [Link]
# split into input (X) and output (Y) variables
X = dataset[:,0:13]
y = dataset[:,13]

# División de los datos en train y test (DESDE LA FORMA-1)


# ------------------------------------------------------------------------------
X_train, X_test, y_train, y_test = train_test_split(
[Link](columns = "MEDV"),
datos['MEDV'],
random_state = 123
)
# Creación del modelo
# ------------------------------------------------------------------------------
modelo = DecisionTreeRegressor(
max_depth = 3,
random_state = 123
)

# Entrenamiento del modelo


# ------------------------------------------------------------------------------
[Link](X_train, y_train)

# Estructura del árbol creado


# ------------------------------------------------------------------------------
fig, ax = [Link](figsize=(12, 5))

print(f"Profundidad del árbol: {modelo.get_depth()}")


print(f"Número de nodos terminales: {modelo.get_n_leaves()}")

plot = plot_tree(
decision_tree = modelo,
feature_names = [Link](columns = "MEDV").columns,
class_names = 'MEDV',
filled = True,
impurity = False,
fontsize = 10,
precision = 2,
ax = ax
)

texto_modelo = export_text(
decision_tree = modelo,
feature_names = list([Link](columns = "MEDV").columns)
)
print(texto_modelo)

importancia_predictores = [Link](
{'predictor': [Link](columns = "MEDV").columns,
'importancia': modelo.feature_importances_}
)
print("Importancia de los predictores en el modelo")
print("-------------------------------------------")
importancia_predictores.sort_values('importancia', ascending=False)

# Pruning (const complexity pruning) por validación cruzada


# ------------------------------------------------------------------------------
# Valores de ccp_alpha evaluados
param_grid = {'ccp_alpha':[Link](0, 80, 20)}

# Búsqueda por validación cruzada


grid = GridSearchCV(
# El árbol se crece al máximo posible para luego aplicar el pruning
estimator = DecisionTreeRegressor(
max_depth = 3, #None,
min_samples_split = 2,
min_samples_leaf = 1,
random_state = 123
),
param_grid = param_grid,
cv = 10,
refit = True,
return_train_score = True
)

[Link](X_train, y_train)

fig, ax = [Link](figsize=(6, 3.84))


scores = [Link](grid.cv_results_)
[Link](x='param_ccp_alpha', y='mean_train_score', yerr='std_train_score', ax=ax)
[Link](x='param_ccp_alpha', y='mean_test_score', yerr='std_test_score', ax=ax)
ax.set_title("Error de validacion cruzada vs hiperparámetro ccp_alpha");

# Mejor valor ccp_alpha encontrado


# ------------------------------------------------------------------------------
grid.best_params_

# Estructura del árbol final


# ------------------------------------------------------------------------------
modelo_final = grid.best_estimator_
print(f"Profundidad del árbol: {modelo_final.get_depth()}")
print(f"Número de nodos terminales: {modelo_final.get_n_leaves()}")
fig, ax = [Link](figsize=(7, 5))
plot = plot_tree(
decision_tree = modelo_final,
feature_names = [Link](columns = "MEDV").columns,
class_names = 'MEDV',
filled = True,
impurity = False,
ax = ax
)

# Error de test del modelo inicial


#-------------------------------------------------------------------------------
predicciones = [Link](X = X_test)

rmse = mean_squared_error(
y_true = y_test,
y_pred = predicciones,
squared = False
)
print(f"El error (rmse) de test es: {rmse}")

print("valor real --- valor de predicción")


for i in range(7):
print("{:.2f} {:.2f}".format(y_test.iloc[i],predicciones[i]))

# Error de test del modelo final (tras aplicar pruning)


#-------------------------------------------------------------------------------
predicciones = modelo_final.predict(X = X_test)

rmse = mean_squared_error(
y_true = y_test,
y_pred = predicciones,
squared = False
)
print(f"El error (rmse) de test es: {rmse}")

print("valor real --- valor de predicción")


for i in range(5):
print("{:.2f} {:.2f}".format(y_test.iloc[i],predicciones[i]))

También podría gustarte