Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

Ajustando modelos de machine learning

Para resolver la pregunta solicitada mediante las indicaciones del instructos, la solución a proponer es la siguiente:

==========================================================

AJUSTE DE HIPERPARÁMETROS Y SELECCIÓN DE CARACTERÍSTICAS

==========================================================

Importar bibliotecas

import matplotlib.pyplot as plt

from sklearn.datasets import fetch_california_housing, load_diabetes
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

==========================================================

PARTE 1

Grid Search con Árbol de Decisión

Dataset California Housing

==========================================================

print("=" * 60)
print("GRID SEARCH - CALIFORNIA HOUSING")
print("=" * 60)

Cargar dataset

california = fetch_california_housing()

X = california.data
y = california.target

División entrenamiento/prueba

X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.30,
random_state=42
)

Modelo

modelo = DecisionTreeRegressor(random_state=42)

Hiperparámetros

param_grid = {
"max_depth": [3, 5, 7, 10],
"min_samples_split": [2, 5, 10],
"min_samples_leaf": [1, 2, 4]
}

Grid Search

grid_search = GridSearchCV(
estimator=modelo,
param_grid=param_grid,
cv=5,
scoring="neg_mean_squared_error"
)

Entrenamiento

grid_search.fit(X_train, y_train)

print("\nMejores hiperparámetros encontrados:")
print(grid_search.best_params_)

Mejor modelo

mejor_modelo = grid_search.best_estimator_

Predicción

predicciones = mejor_modelo.predict(X_test)

mse = mean_squared_error(y_test, predicciones)

print(f"\nError Cuadrático Medio (MSE): {mse:.2f}")

==========================================================

PARTE 2

Importancia de características

Dataset Diabetes

==========================================================

print("\n")
print("=" * 60)
print("IMPORTANCIA DE LAS CARACTERÍSTICAS")
print("=" * 60)

Cargar dataset

diabetes = load_diabetes()

X = diabetes.data
y = diabetes.target

División entrenamiento/prueba

X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.30,
random_state=42
)

Modelo Random Forest

modelo_rf = RandomForestRegressor(
random_state=42
)

modelo_rf.fit(X_train, y_train)

Importancia de variables

importancias = modelo_rf.feature_importances_

caracteristicas = diabetes.feature_names

Mostrar resultados

for nombre, importancia in zip(caracteristicas, importancias):
print(f"{nombre:>5} : {importancia:.4f}")

Gráfico

plt.figure(figsize=(10,6))
plt.barh(caracteristicas, importancias)
plt.title("Importancia de las Características")
plt.xlabel("Importancia")
plt.ylabel("Variables")
plt.show()

Explicación de la solución

  1. Ajuste de hiperparámetros con Grid Search

En la primera parte se utilizó el conjunto de datos California Housing, el cual contiene información sobre viviendas en California. Se dividieron los datos en entrenamiento (70 %) y prueba (30 %) para evaluar el rendimiento del modelo.

Posteriormente, se entrenó un Árbol de Decisión para regresión (DecisionTreeRegressor) y se aplicó la técnica Grid Search mediante la clase GridSearchCV. Se evaluaron diferentes combinaciones de los hiperparámetros:

max_depth: profundidad máxima del árbol.
min_samples_split: número mínimo de muestras para dividir un nodo.
min_samples_leaf: número mínimo de muestras permitido en una hoja.

El algoritmo probó automáticamente todas las combinaciones utilizando validación cruzada de cinco particiones (cv=5) y seleccionó aquella que minimizó el Error Cuadrático Medio (MSE). De esta forma, el modelo quedó configurado con los hiperparámetros que ofrecen el mejor rendimiento sin necesidad de realizar pruebas manuales.

  1. Selección de características

En la segunda parte se utilizó el dataset Diabetes, entrenando un modelo RandomForestRegressor.

Este algoritmo calcula automáticamente la importancia de cada variable analizando cuánto contribuye a reducir el error de predicción dentro del conjunto de árboles que conforman el bosque aleatorio.

Los resultados se muestran tanto en forma de tabla como mediante un gráfico de barras, permitiendo identificar fácilmente cuáles son las variables más influyentes en la predicción.

Las características con mayor importancia son las que más contribuyen al modelo y pueden utilizarse para simplificar el conjunto de datos o mejorar la interpretación de los resultados.