Démonstration des stratégies de KBinsDiscretizer

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 les différentes stratégies disponibles dans la classe KBinsDiscretizer de la bibliothèque scikit-learn de Python. KBinsDiscretizer est une classe pour discrétiser les caractéristiques continues en caractéristiques catégorielles en divisant les données continues en intervalles. Nous visualiserons les différentes stratégies en les appliquant à différents ensembles de données.

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 à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limites de Jupyter Notebook.

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/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/preprocessing -.-> lab-49114{{"Démonstration des stratégies de KBinsDiscretizer"}} sklearn/datasets -.-> lab-49114{{"Démonstration des stratégies de KBinsDiscretizer"}} ml/sklearn -.-> lab-49114{{"Démonstration des stratégies de KBinsDiscretizer"}} end

Importation des bibliothèques

Nous commencerons par importer les bibliothèques nécessaires. Nous utiliserons numpy, matplotlib.pyplot, make_blobs et KBinsDiscretizer du module sklearn.preprocessing.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.datasets import make_blobs

Création d'ensembles de données

Nous allons créer trois ensembles de données à des fins de visualisation. Le premier ensemble de données sera un ensemble aléatoire de 200 échantillons provenant d'une distribution uniforme entre -3 et 3 dans les deux dimensions. Le second ensemble de données sera un ensemble de 200 échantillons générés à l'aide de la fonction make_blobs de sklearn.datasets. Le troisième ensemble de données sera également généré à l'aide de la fonction make_blobs.

n_samples = 200
centers_0 = np.array([[0, 0], [0, 5], [2, 4], [8, 8]])
centers_1 = np.array([[0, 0], [3, 1]])

X_list = [
    np.random.RandomState(42).uniform(-3, 3, size=(n_samples, 2)),
    make_blobs(
        n_samples=[n_samples // 10, n_samples * 4 // 10, n_samples // 10, n_samples * 4 // 10],
        cluster_std=0.5,
        centers=centers_0,
        random_state=42,
    )[0],
    make_blobs(
        n_samples=[n_samples // 5, n_samples * 4 // 5],
        cluster_std=0.5,
        centers=centers_1,
        random_state=42,
    )[0],
]

Appliquer différentes stratégies

Nous allons maintenant appliquer les trois différentes stratégies disponibles dans KBinsDiscretizer à chacun des ensembles de données. Les stratégies sont les suivantes :

  • 'uniforme' : La discrétisation est uniforme pour chaque caractéristique, ce qui signifie que les largeurs de bin sont constantes dans chaque dimension.
  • 'quantile' : La discrétisation est effectuée sur les valeurs quantiles, ce qui signifie que chaque bin a approximativement le même nombre d'échantillons.
  • 'kmeans' : La discrétisation est basée sur les centroïdes d'une procédure de regroupement KMeans.
strategies = ["uniforme", "quantile", "kmeans"]

figure = plt.figure(figsize=(14, 9))
i = 1
for ds_cnt, X in enumerate(X_list):
    ax = plt.subplot(len(X_list), len(strategies) + 1, i)
    ax.scatter(X[:, 0], X[:, 1], edgecolors="k")
    if ds_cnt == 0:
        ax.set_title("Données d'entrée", size=14)

    xx, yy = np.meshgrid(
        np.linspace(X[:, 0].min(), X[:, 0].max(), 300),
        np.linspace(X[:, 1].min(), X[:, 1].max(), 300),
    )
    grid = np.c_[xx.ravel(), yy.ravel()]

    ax.set_xlim(xx.min(), xx.max())
    ax.set_ylim(yy.min(), yy.max())
    ax.set_xticks(())
    ax.set_yticks(())

    i += 1
    ## transformer l'ensemble de données avec KBinsDiscretizer
    for strategy in strategies:
        enc = KBinsDiscretizer(n_bins=4, encode="ordinal", strategy=strategy)
        enc.fit(X)
        grid_encoded = enc.transform(grid)

        ax = plt.subplot(len(X_list), len(strategies) + 1, i)

        ## bandes horizontales
        horizontal = grid_encoded[:, 0].reshape(xx.shape)
        ax.contourf(xx, yy, horizontal, alpha=0.5)
        ## bandes verticales
        vertical = grid_encoded[:, 1].reshape(xx.shape)
        ax.contourf(xx, yy, vertical, alpha=0.5)

        ax.scatter(X[:, 0], X[:, 1], edgecolors="k")
        ax.set_xlim(xx.min(), xx.max())
        ax.set_ylim(yy.min(), yy.max())
        ax.set_xticks(())
        ax.set_yticks(())
        if ds_cnt == 0:
            ax.set_title("stratégie='%s'" % (strategy,), size=14)

        i += 1

plt.tight_layout()
plt.show()

Visualiser les résultats

Nous allons maintenant visualiser les résultats de l'application des différentes stratégies aux ensembles de données. Les graphiques montrent les régions où le codage discrétisé est constant.

Sommaire

Dans ce laboratoire, nous avons exploré les différentes stratégies disponibles dans la classe KBinsDiscretizer de la bibliothèque Python scikit - learn. Nous avons créé trois ensembles de données et appliqué les trois différentes stratégies à chacun d'entre eux. Nous avons ensuite visualisé les résultats de la discrétisation.