Automatización de Parámetros en Modelos de Regresión con Random Forest

Clase 31 de 37Curso Profesional de Machine Learning con scikit-learn

Resumen

¿Cómo automatizar la selección de modelos y optimización de parámetros?

Automatizar el proceso de selección de modelos y optimización de parámetros es clave para trabajar de manera eficiente en data science. Esto no solo ahorra tiempo, sino que además mejora la eficacia de los resultados. En esta guía usaremos el RandomizedSearchCV de Scikit-learn para demostrar cómo se realiza este proceso.

¿Qué herramientas necesitamos importar?

Para iniciar con el proceso de optimización automática, importaremos las librerías necesarias. Como siempre, pandas es fundamental para la manipulación de datos. Además, importaremos el RandomizedSearchCV del módulo model_selection y el algoritmo RandomForestRegressor del módulo ensemble.

import pandas as pd
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestRegressor

¿Cómo prepararnos para la carga de datos?

Asegúrate de que tu script se esté ejecutando dentro de un entorno activado donde las librerías estén configuradas. Luego, carga tu archivo CSV en un DataFrame utilizando pandas.

if __name__ == "__main__":
    df = pd.read_csv("data/felicidad.csv")
    print(df.shape)  # Confirmar la carga de datos

¿Cómo definimos y configuramos el modelo?

Primero, definimos un regresor RandomForestRegressor sin parámetros. Luego, establecemos una grilla de parámetros en forma de diccionario, donde cada clave es un parámetro del modelo y el valor es un rango de valores posibles.

regressor = RandomForestRegressor()

param_grid = {
    'n_estimators': range(4, 15),
    'criterion': ['mse', 'mae'],
    'max_depth': range(2, 11)
}

¿Qué es el RandomizedSearchCV y cómo se utiliza?

El RandomizedSearchCV es una herramienta que permite optimizar de manera automática los parámetros de un modelo. Aquí configuramos nuestro estimator, param_distributions y ajustamos la cantidad de iteraciones y el método de validación cruzada.

random_search = RandomizedSearchCV(
    estimator=regressor,
    param_distributions=param_grid,
    n_iter=10,
    cv=3,
    scoring='neg_mean_absolute_error',
    random_state=42
)

¿Cómo preparamos los datos para el entrenamiento?

Para dividir nuestros datos entre características (X) y variable objetivo (y), seleccionamos las columnas correspondientes. En este caso, eliminamos cualquier columna que no aporte significativamente al modelo.

X = df.drop(columns=["RANK", "SCORE"])
y = df["SCORE"]

¿Cómo entrenamos el modelo con la configuración optimizada?

Entrena el modelo utilizando la configuración optimizada por RandomizedSearchCV. Es esencial imprimir el mejor estimador y los parámetros para revisar la calidad de los resultados.

random_search.fit(X, y)
best_estimator = random_search.best_estimator_
print("Best Estimator:", best_estimator)

¿Cómo realizamos y evaluamos las predicciones?

Finalmente, realiza las predicciones con el modelo optimizado. Verificamos la exactitud de las predicciones comparando los resultados previstos con las variables reales.

prediction = best_estimator.predict(X.iloc[0:1])
print("Predicción para el primer registro:", prediction)

¿Qué observamos sobre el resultado?

En el ejemplo, la predicción se aproximó bastante al valor real, lo que indica que la optimización funcionó adecuadamente. Este proceso puede aplicarse a diferentes modelos y datasets para optimizar configuraciones de manera sistemática y efectiva.

Incorpora esto en tu flujo de trabajo diario para obtener resultados consistentes con menos esfuerzo manual. ¡Sigue explorando y perfeccionando tus modelos!