Régression logistique étape par étape

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 explorerons la rareté des solutions lorsque la pénalité L1, L2 et Elastic-Net est utilisée pour différentes valeurs de C. Nous utiliserons la régression logistique pour classifier des images 8x8 de chiffres en deux classes : 0-4 contre 5-9. Nous visualiserons les coefficients des modèles pour différentes valeurs de C.

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 Notebook pour accéder au Notebook Jupyter pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le Notebook Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du Notebook 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"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49202{{"Régression logistique étape par étape"}} sklearn/preprocessing -.-> lab-49202{{"Régression logistique étape par étape"}} ml/sklearn -.-> lab-49202{{"Régression logistique étape par étape"}} end

Importation des bibliothèques requises

La première étape consiste à importer les bibliothèques nécessaires. Nous aurons besoin de numpy, matplotlib.pyplot, datasets, StandardScaler et LogisticRegression à partir de sklearn.linear_model.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.preprocessing import StandardScaler

Charger l'ensemble de données

Nous allons charger l'ensemble de données des chiffres à l'aide de datasets.load_digits(return_X_y=True). Nous allons également standardiser les données à l'aide de StandardScaler().fit_transform(X). La variable cible sera binaire, où 0-4 sera classé comme 0 et 5-9 sera classé comme 1.

X, y = datasets.load_digits(return_X_y=True)
X = StandardScaler().fit_transform(X)
y = (y > 4).astype(int)

Définir le paramètre de régularisation et le rapport L1

Nous allons définir le paramètre de régularisation C et le rapport L1 l1_ratio pour la pénalité Elastic-Net. Nous allons définir l1_ratio sur 0,5.

l1_ratio = 0.5

Créer des sous-graphiques pour la visualisation

Nous allons créer des sous-graphiques pour visualiser les coefficients des modèles pour différentes valeurs de C. Nous allons créer un tableau de sous-graphiques avec 3 lignes et 3 colonnes.

fig, axes = plt.subplots(3, 3)

Entraîner des modèles de régression logistique avec différentes pénalités et paramètres de régularisation

Nous allons entraîner des modèles de régression logistique avec des pénalités L1, L2 et Elastic-Net et différentes valeurs de C. Nous augmenterons la tolérance pour réduire le temps d'entraînement.

for i, (C, axes_row) in enumerate(zip((1, 0.1, 0.01), axes)):
    clf_l1_LR = LogisticRegression(C=C, penalty="l1", tol=0.01, solver="saga")
    clf_l2_LR = LogisticRegression(C=C, penalty="l2", tol=0.01, solver="saga")
    clf_en_LR = LogisticRegression(C=C, penalty="elasticnet", solver="saga", l1_ratio=l1_ratio, tol=0.01)
    clf_l1_LR.fit(X, y)
    clf_l2_LR.fit(X, y)
    clf_en_LR.fit(X, y)

Calculer la rareté et les scores

Nous allons calculer la rareté (pourcentage de coefficients nuls) et les scores pour chaque modèle.

    coef_l1_LR = clf_l1_LR.coef_.ravel()
    coef_l2_LR = clf_l2_LR.coef_.ravel()
    coef_en_LR = clf_en_LR.coef_.ravel()

    sparsity_l1_LR = np.mean(coef_l1_LR == 0) * 100
    sparsity_l2_LR = np.mean(coef_l2_LR == 0) * 100
    sparsity_en_LR = np.mean(coef_en_LR == 0) * 100

    score_l1_LR = clf_l1_LR.score(X, y)
    score_l2_LR = clf_l2_LR.score(X, y)
    score_en_LR = clf_en_LR.score(X, y)

Visualiser les coefficients

Nous allons visualiser les coefficients des modèles pour chaque pénalité et valeur de C.

    for ax, coefs in zip(axes_row, [coef_l1_LR, coef_en_LR, coef_l2_LR]):
        ax.imshow(np.abs(coefs.reshape(8, 8)), interpolation='nearest', cmap='binary', vmax=1, vmin=0)
        ax.set_xticks(())
        ax.set_yticks(())

Définir les titres et les étiquettes

Nous allons définir les titres et les étiquettes pour les sous-graphiques.

    if i == 0:
        axes_row[0].set_title("Pénalité L1")
        axes_row[1].set_title("Elastic-Net\nl1_ratio = %s" % l1_ratio)
        axes_row[2].set_title("Pénalité L2")

    axes_row[0].set_ylabel("C = %s" % C)

Afficher les résultats

Nous allons afficher la rareté et les scores pour chaque modèle.

    print("C=%.2f" % C)
    print("{:<40} {:.2f}%".format("Rareté avec la pénalité L1 :", sparsity_l1_LR))
    print("{:<40} {:.2f}%".format("Rareté avec la pénalité Elastic-Net :", sparsity_en_LR))
    print("{:<40} {:.2f}%".format("Rareté avec la pénalité L2 :", sparsity_l2_LR))
    print("{:<40} {:.2f}".format("Score avec la pénalité L1 :", score_l1_LR))
    print("{:<40} {:.2f}".format("Score avec la pénalité Elastic-Net :", score_en_LR))
    print("{:<40} {:.2f}".format("Score avec la pénalité L2 :", score_l2_LR))

Afficher la visualisation

Nous allons afficher les sous-graphiques.

plt.show()

Sommaire

Dans ce laboratoire, nous avons exploré la rareté des solutions lorsque des pénalités L1, L2 et Elastic-Net sont utilisées pour différentes valeurs de C. Nous avons utilisé la régression logistique pour classifier des images de chiffres 8x8 en deux classes : 0-4 contre 5-9. Nous avons visualisé les coefficients des modèles pour différentes valeurs de C. Nous avons également calculé la rareté et les scores pour chaque modèle et affiché les résultats.