Gráfico de la tubería de dígitos

Beginner

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

Introducción

En este laboratorio, construiremos una canalización para la reducción de dimensionalidad y la clasificación utilizando Análisis de Componentes Principales (PCA, por sus siglas en inglés) y Regresión Logística. Utilizaremos la biblioteca scikit-learn para realizar una reducción de dimensionalidad no supervisada en el conjunto de datos de dígitos utilizando PCA. Luego, utilizaremos un modelo de regresión logística para la clasificación. Utilizaremos GridSearchCV para establecer la dimensionalidad del PCA y encontrar la mejor combinación de truncamiento del PCA y regularización del clasificador.

Consejos sobre la VM

Una vez que se haya iniciado 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 sus comentarios después de la sesión y resolveremos rápidamente el problema para usted.

Importar las bibliotecas necesarias

Primero importaremos las bibliotecas necesarias para la implementación de la canalización.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler

Definir los componentes de la canalización

Definiremos los componentes de la canalización, incluyendo el PCA, el Estandarizador y la Regresión Logística. Estableceremos la tolerancia en un valor grande para acelerar el ejemplo.

## Define a pipeline to search for the best combination of PCA truncation
## and classifier regularization.
pca = PCA()
## Define a Standard Scaler to normalize inputs
scaler = StandardScaler()

logistic = LogisticRegression(max_iter=10000, tol=0.1)

pipe = Pipeline(steps=[("scaler", scaler), ("pca", pca), ("logistic", logistic)])

Cargar el conjunto de datos y definir parámetros para GridSearchCV

Cargaremos el conjunto de datos de dígitos y definiremos los parámetros para GridSearchCV. Estableceremos el parámetro para el truncamiento del PCA y la regularización del clasificador.

X_digits, y_digits = datasets.load_digits(return_X_y=True)

param_grid = {
    "pca__n_components": [5, 15, 30, 45, 60],
    "logistic__C": np.logspace(-4, 4, 4),
}

Realizar GridSearchCV

Realizaremos GridSearchCV para encontrar la mejor combinación de truncamiento del PCA y regularización del clasificador.

search = GridSearchCV(pipe, param_grid, n_jobs=2)
search.fit(X_digits, y_digits)

Imprimir los mejores parámetros y puntuación

Imprimiremos los mejores parámetros y la puntuación obtenidos a partir de GridSearchCV.

print("Best parameter (CV score=%0.3f):" % search.best_score_)
print(search.best_params_)

Graficar el espectro del PCA

Graficaremos el espectro del PCA para visualizar la proporción de varianza explicada de cada componente principal.

pca.fit(X_digits)

fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(6, 6))
ax0.plot(
    np.arange(1, pca.n_components_ + 1), pca.explained_variance_ratio_, "+", linewidth=2
)
ax0.set_ylabel("PCA explained variance ratio")

ax0.axvline(
    search.best_estimator_.named_steps["pca"].n_components,
    linestyle=":",
    label="n_components chosen",
)
ax0.legend(prop=dict(size=12))

Encontrar los mejores resultados del clasificador

Para cada número de componentes, encontraremos los mejores resultados del clasificador.

results = pd.DataFrame(search.cv_results_)
components_col = "param_pca__n_components"
best_clfs = results.groupby(components_col).apply(
    lambda g: g.nlargest(1, "mean_test_score")
)

Graficar la precisión de clasificación

Graficaremos la precisión de clasificación para cada número de componentes.

best_clfs.plot(
    x=components_col, y="mean_test_score", yerr="std_test_score", legend=False, ax=ax1
)
ax1.set_ylabel("Precisión de clasificación (val)")
ax1.set_xlabel("n_components")

plt.xlim(-1, 70)

plt.tight_layout()
plt.show()

Resumen

En este laboratorio, hemos aprendido cómo construir una canalización para la reducción de dimensionalidad y la clasificación utilizando Análisis de Componentes Principales (PCA) y Regresión Logística. Hemos utilizado la biblioteca scikit-learn para realizar una reducción de dimensionalidad no supervisada en el conjunto de datos de dígitos utilizando PCA. Luego, hemos utilizado un modelo de regresión logística para la clasificación. Hemos utilizado GridSearchCV para establecer la dimensionalidad del PCA y encontrar la mejor combinación de truncamiento del PCA y regularización del clasificador. Hemos graficado el espectro del PCA y la precisión de clasificación para cada número de componentes.