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
- 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.
- 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.