Introduction
Dans ce laboratoire, nous allons construire un pipeline pour la réduction de la dimensionalité et la classification en utilisant l'Analyse en Composantes Principales (PCA) et la Régression Logistique. Nous utiliserons la bibliothèque scikit-learn pour effectuer une réduction non supervisée de la dimensionalité sur l'ensemble de données des chiffres en utilisant la PCA. Nous utiliserons ensuite un modèle de régression logistique pour la classification. Nous utiliserons GridSearchCV pour définir la dimensionalité de la PCA et trouver la meilleure combinaison de la troncature de la PCA et de la régularisation du classifieur.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques requises
Nous allons tout d'abord importer les bibliothèques requises pour la mise en œuvre du 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
Définir les composants du pipeline
Nous allons définir les composants du pipeline, y compris la PCA, l'Échelleur Standard et la Régression Logistique. Nous allons définir la tolérance à une valeur élevée pour que l'exemple soit plus rapide.
## Définir un pipeline pour rechercher la meilleure combinaison de la troncature de la PCA
## et de la régularisation du classifieur.
pca = PCA()
## Définir un Échelleur Standard pour normaliser les entrées
scaler = StandardScaler()
logistic = LogisticRegression(max_iter=10000, tol=0.1)
pipe = Pipeline(steps=[("scaler", scaler), ("pca", pca), ("logistic", logistic)])
Charger l'ensemble de données et définir les paramètres pour GridSearchCV
Nous allons charger l'ensemble de données des chiffres et définir les paramètres pour GridSearchCV. Nous allons définir le paramètre pour la troncature de la PCA et la régularisation du classifieur.
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),
}
Exécuter GridSearchCV
Nous allons exécuter GridSearchCV pour trouver la meilleure combinaison de la troncature de la PCA et de la régularisation du classifieur.
search = GridSearchCV(pipe, param_grid, n_jobs=2)
search.fit(X_digits, y_digits)
Afficher les meilleurs paramètres et le score
Nous allons afficher les meilleurs paramètres et le score obtenus à partir de GridSearchCV.
print("Meilleur paramètre (score CV = %0.3f) : " % search.best_score_)
print(search.best_params_)
Tracer le spectre de la PCA
Nous allons tracer le spectre de la PCA pour visualiser le ratio de variance expliquée de chaque composante principale.
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("Ratio de variance expliquée par la PCA")
ax0.axvline(
search.best_estimator_.named_steps["pca"].n_components,
linestyle=":",
label="n_components choisi",
)
ax0.legend(prop=dict(size=12))
Trouver les meilleurs résultats du classifieur
Pour chaque nombre de composants, nous allons trouver les meilleurs résultats du classifieur.
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")
)
Tracer la précision de classification
Nous allons tracer la précision de classification pour chaque nombre de composants.
best_clfs.plot(
x=components_col, y="mean_test_score", yerr="std_test_score", legend=False, ax=ax1
)
ax1.set_ylabel("Précision de classification (val)")
ax1.set_xlabel("n_components")
plt.xlim(-1, 70)
plt.tight_layout()
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à construire un pipeline pour la réduction de dimension et la classification en utilisant l'Analyse en Composantes Principales (PCA) et la Régression Logistique. Nous avons utilisé la bibliothèque scikit-learn pour effectuer une réduction de dimension non supervisée sur l'ensemble de données des chiffres en utilisant la PCA. Nous avons ensuite utilisé un modèle de régression logistique pour la classification. Nous avons utilisé GridSearchCV pour définir la dimensionnalité de la PCA et trouver la meilleure combinaison de la troncature de la PCA et de la régularisation du classifieur. Nous avons tracé le spectre de la PCA et la précision de classification pour chaque nombre de composants.