Plotar Digitos Pipeline

Beginner

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

Introdução

Neste laboratório, construiremos um pipeline para redução de dimensionalidade e classificação utilizando Análise de Componentes Principais (PCA) e Regressão Logística. Usaremos a biblioteca scikit-learn para realizar a redução de dimensionalidade não supervisionada no conjunto de dados de dígitos usando PCA. Em seguida, utilizaremos um modelo de regressão logística para classificação. Usaremos GridSearchCV para definir a dimensionalidade do PCA e encontrar a melhor combinação de truncamento do PCA e regularização do classificador.

Dicas da Máquina Virtual

Após o arranque da VM, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Importação de Bibliotecas Necessárias

Primeiro, importamos as bibliotecas necessárias para a implementação do pipeline.

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

Definição dos Componentes do Pipeline

Definiremos os componentes do pipeline, incluindo o PCA, o Standard Scaler e a Regressão Logística. Definiremos a tolerância para um valor elevado para acelerar o exemplo.

## Define um pipeline para procurar a melhor combinação de truncamento do PCA
## e regularização do classificador.
pca = PCA()
## Define um Standard Scaler para normalizar as entradas
scaler = StandardScaler()

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

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

Carregar Conjunto de Dados e Definir Parâmetros para GridSearchCV

Carregaremos o conjunto de dados de dígitos e definiremos os parâmetros para GridSearchCV. Definiremos os parâmetros para o truncamento do PCA e a regularização do classificador.

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),
}

Executar GridSearchCV

Executaremos GridSearchCV para encontrar a melhor combinação de truncamento do PCA e regularização do classificador.

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

Imprimir Melhores Parâmetros e Pontuação

Imprimiremos os melhores parâmetros e a pontuação obtida do GridSearchCV.

print("Melhor parâmetro (pontuação CV=%0.3f):" % search.best_score_)
print(search.best_params_)

Plotar Espectro PCA

Plotaremos o espectro PCA para visualizar a proporção da variância 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("Proporção da variância explicada PCA")

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

Encontrar Melhores Resultados do Classificador

Para cada número de componentes, encontraremos os melhores resultados do classificador.

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")
)

Plotar Precisão de Classificação

Plotaremos a precisão de classificação 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("Precisão de classificação (val)")
ax1.set_xlabel("n_components")

plt.xlim(-1, 70)

plt.tight_layout()
plt.show()

Resumo

Neste laboratório, aprendemos a construir um pipeline para redução de dimensionalidade e classificação utilizando Análise de Componentes Principais (PCA) e Regressão Logística. Usamos a biblioteca scikit-learn para realizar a redução de dimensionalidade não supervisionada no conjunto de dados de dígitos usando PCA. Em seguida, utilizamos um modelo de regressão logística para classificação. Empregamos GridSearchCV para definir a dimensionalidade do PCA e encontrar a melhor combinação de truncamento do PCA e regularização do classificador. Plotamos o espectro PCA e a precisão de classificação para cada número de componentes.