Selección de modelos: Elegir estimadores y sus parámetros

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En el aprendizaje automático, la selección de modelos es el proceso de elegir el mejor modelo para un conjunto de datos dado. Esto implica seleccionar el estimador adecuado y ajustar sus parámetros para alcanzar un rendimiento óptimo. Este tutorial lo guiará a través del proceso de selección de modelos en scikit-learn.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y le resolveremos el problema inmediatamente.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-71098{{"Selección de modelos: Elegir estimadores y sus parámetros"}} ml/sklearn -.-> lab-71098{{"Selección de modelos: Elegir estimadores y sus parámetros"}} end

Puntuación y puntuaciones validadas cruzadas

Los estimadores en scikit-learn exponen un método score que se puede utilizar para evaluar la calidad de la ajuste del modelo o la predicción en nuevos datos. Este método devuelve una puntuación, donde un valor más alto indica un mejor rendimiento.

from sklearn import datasets, svm

## Cargar el conjunto de datos de dígitos
X_digits, y_digits = datasets.load_digits(return_X_y=True)

## Crear un clasificador SVM con kernel lineal
svc = svm.SVC(C=1, kernel='linear')

## Ajustar el clasificador a los datos de entrenamiento y calcular la puntuación en los datos de prueba
score = svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])

Para obtener una mejor medida de la precisión de la predicción, podemos utilizar la validación cruzada. La validación cruzada implica dividir los datos en múltiples pliegues, utilizando cada pliegue como conjunto de prueba y los pliegues restantes como conjuntos de entrenamiento. Este proceso se repite varias veces, y las puntuaciones se promedian para obtener el rendimiento general.

import numpy as np

## Dividir los datos en 3 pliegues
X_folds = np.array_split(X_digits, 3)
y_folds = np.array_split(y_digits, 3)

## Realizar la validación cruzada
scores = []
for k in range(3):
    X_train = list(X_folds)
    X_test = X_train.pop(k)
    X_train = np.concatenate(X_train)
    y_train = list(y_folds)
    y_test = y_train.pop(k)
    y_train = np.concatenate(y_train)
    scores.append(svc.fit(X_train, y_train).score(X_test, y_test))

print(scores)

Generadores de validación cruzada

Scikit-learn proporciona una colección de clases que se pueden utilizar para generar índices de entrenamiento/prueba para las estrategias de validación cruzada populares. Estas clases tienen un método split que acepta el conjunto de datos de entrada y produce los índices del conjunto de entrenamiento/prueba para cada iteración del proceso de validación cruzada.

from sklearn.model_selection import KFold

## Dividir los datos en K pliegues utilizando la validación cruzada KFold
k_fold = KFold(n_splits=5)
for train_indices, test_indices in k_fold.split(X_digits):
    print(f'Tren: {train_indices} | prueba: {test_indices}')

La función auxiliar cross_val_score se puede utilizar para calcular directamente la puntuación de validación cruzada. Divide los datos en conjuntos de entrenamiento y prueba para cada iteración de la validación cruzada, entrena el estimador en el conjunto de entrenamiento y calcula la puntuación en base al conjunto de prueba.

from sklearn.model_selection import cross_val_score

## Calcular la puntuación de validación cruzada para el clasificador SVM
scores = cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
print(scores)

Búsqueda en cuadrícula

La búsqueda en cuadrícula es una técnica que se puede utilizar para encontrar la mejor combinación de valores de parámetros para un estimador. Consiste en especificar una cuadrícula de valores de parámetros, ajustar el estimador a los datos de entrenamiento para cada combinación de parámetros y seleccionar los parámetros que dan como resultado la puntuación de validación cruzada más alta.

from sklearn.model_selection import GridSearchCV

## Definir una cuadrícula de valores de parámetros
Cs = np.logspace(-6, -1, 10)

## Crear un objeto GridSearchCV con el clasificador SVM y la cuadrícula de parámetros
clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs), n_jobs=-1)

## Ajustar el objeto GridSearchCV a los datos de entrenamiento
clf.fit(X_digits[:1000], y_digits[:1000])

print(clf.best_score_)
print(clf.best_estimator_.C)

Estimadores validados cruzadamente

Algunos estimadores en scikit-learn tienen capacidades de validación cruzada integradas. Estos estimadores validados cruzadamente seleccionan automáticamente sus parámetros mediante validación cruzada, lo que hace que el proceso de selección de modelos sea más eficiente.

from sklearn import linear_model, datasets

## Crear un objeto LassoCV
lasso = linear_model.LassoCV()

## Cargar el conjunto de datos de diabetes
X_diabetes, y_diabetes = datasets.load_diabetes(return_X_y=True)

## Ajustar el objeto LassoCV al conjunto de datos
lasso.fit(X_diabetes, y_diabetes)

print(lasso.alpha_)

Resumen

En este tutorial, aprendimos sobre el proceso de selección de modelos en scikit-learn. Exploramos métodos de puntuación, validación cruzada, búsqueda en cuadrícula y estimadores validados cruzadamente. Siguiendo estos pasos, puedes elegir el mejor estimador para un conjunto de datos dado y ajustar sus parámetros para alcanzar un rendimiento óptimo.