Tracer le pipeline des chiffres

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/pipeline("Pipeline") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49112{{"Tracer le pipeline des chiffres"}} sklearn/preprocessing -.-> lab-49112{{"Tracer le pipeline des chiffres"}} sklearn/pipeline -.-> lab-49112{{"Tracer le pipeline des chiffres"}} sklearn/model_selection -.-> lab-49112{{"Tracer le pipeline des chiffres"}} sklearn/decomposition -.-> lab-49112{{"Tracer le pipeline des chiffres"}} ml/sklearn -.-> lab-49112{{"Tracer le pipeline des chiffres"}} end

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.