Agglomération de fonctionnalités pour les données à haute dimension

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

Ce tutoriel montrera comment utiliser l'agglomération de fonctionnalités pour fusionner des fonctionnalités similaires dans un ensemble de données. L'agglomération de fonctionnalités est utile lorsqu'on travaille avec des ensembles de données à haute dimension en réduisant le nombre de fonctionnalités tout en conservant les informations les plus importantes.

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 d'adresses pour accéder au carnet Jupyter pour pratiquer.

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

Dans cette étape, nous allons importer les bibliothèques nécessaires pour effectuer l'agglomération de fonctionnalités.

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets, cluster
from sklearn.feature_extraction.image import grid_to_graph

Chargement de l'ensemble de données

Dans cette étape, nous allons charger l'ensemble de données des chiffres manuscrits à partir de scikit-learn. Cet ensemble de données contient des images de chiffres manuscrits de 0 à 9.

digits = datasets.load_digits()
images = digits.images
X = np.reshape(images, (len(images), -1))

Définition de la matrice de connectivité

Dans cette étape, nous allons définir la matrice de connectivité en utilisant la fonction grid_to_graph de scikit-learn. Cette fonction crée un graphe de connectivité sur la base de la grille de pixels des images.

connectivity = grid_to_graph(*images[0].shape)

Effectuer l'agglomération de fonctionnalités

Dans cette étape, nous allons effectuer l'agglomération de fonctionnalités à l'aide de la classe FeatureAgglomeration de scikit-learn. Nous allons définir le nombre de clusters sur 32.

agglo = cluster.FeatureAgglomeration(connectivity=connectivity, n_clusters=32)
agglo.fit(X)
X_reduced = agglo.transform(X)

Transformée inverse

Dans cette étape, nous allons effectuer une transformée inverse sur l'ensemble de données réduit pour restaurer le nombre original de fonctionnalités.

X_restored = agglo.inverse_transform(X_reduced)
images_restored = np.reshape(X_restored, images.shape)

Visualiser les résultats

Dans cette étape, nous allons visualiser les images d'origine, les images agglomérées et les étiquettes attribuées à chaque cluster.

plt.figure(1, figsize=(4, 3.5))
plt.clf()
plt.subplots_adjust(left=0.01, right=0.99, bottom=0.01, top=0.91)
for i in range(4):
    plt.subplot(3, 4, i + 1)
    plt.imshow(images[i], cmap=plt.cm.gray, vmax=16, interpolation="nearest")
    plt.xticks(())
    plt.yticks(())
    if i == 1:
        plt.title("Données d'origine")
    plt.subplot(3, 4, 4 + i + 1)
    plt.imshow(images_restored[i], cmap=plt.cm.gray, vmax=16, interpolation="nearest")
    if i == 1:
        plt.title("Données agglomérées")
    plt.xticks(())
    plt.yticks(())

plt.subplot(3, 4, 10)
plt.imshow(
    np.reshape(agglo.labels_, images[0].shape),
    interpolation="nearest",
    cmap=plt.cm.nipy_spectral,
)
plt.xticks(())
plt.yticks(())
plt.title("Etiquettes")
plt.show()

Sommaire

Dans ce tutoriel, nous avons appris à utiliser l'agglomération de fonctionnalités pour fusionner des fonctionnalités similaires dans un ensemble de données. En réduisant le nombre de fonctionnalités, nous pouvons améliorer les performances des algorithmes d'apprentissage automatique tout en conservant les informations les plus importantes dans l'ensemble de données.