Scikit Learn - Méthodes de clustering

Ici, nous étudierons les méthodes de clustering dans Sklearn qui aideront à identifier toute similitude dans les échantillons de données.

Méthodes de clustering, l'une des méthodes de ML non supervisées les plus utiles, utilisées pour trouver des modèles de similarité et de relation parmi des échantillons de données. Après cela, ils regroupent ces échantillons en groupes ayant une similitude basée sur des fonctionnalités. Le clustering détermine le regroupement intrinsèque parmi les données non étiquetées actuelles, c'est pourquoi il est important.

La bibliothèque Scikit-learn a sklearn.clusterpour effectuer le clustering de données non étiquetées. Sous ce module scikit-leran ont les méthodes de clustering suivantes -

KMeans

Cet algorithme calcule les centroïdes et les itère jusqu'à ce qu'il trouve le centroïde optimal. Il nécessite que le nombre de clusters soit spécifié, c'est pourquoi il suppose qu'ils sont déjà connus. La logique principale de cet algorithme est de regrouper les données séparant les échantillons en n nombre de groupes de variances égales en minimisant les critères connus sous le nom d'inertie. Le nombre de clusters identifiés par l'algorithme est représenté par 'K.

Scikit-learn ont sklearn.cluster.KMeansmodule pour effectuer le clustering K-Means. Lors du calcul des centres de cluster et de la valeur de l'inertie, le paramètre nommésample_weight permet sklearn.cluster.KMeans module pour attribuer plus de poids à certains échantillons.

Propagation d'affinité

Cet algorithme est basé sur le concept de «passage de message» entre différentes paires d'échantillons jusqu'à convergence. Il ne nécessite pas que le nombre de clusters soit spécifié avant d'exécuter l'algorithme. L'algorithme a une complexité temporelle de l'ordre (2), ce qui en est le plus gros inconvénient.

Scikit-learn ont sklearn.cluster.AffinityPropagation module pour effectuer le clustering de propagation d'affinité.

Changement moyen

Cet algorithme découvre principalement blobsdans une densité régulière d'échantillons. Il affecte les points de données aux clusters de manière itérative en décalant les points vers la densité de points de données la plus élevée. Au lieu de s'appuyer sur un paramètre nommébandwidth dictant la taille de la région à parcourir, il définit automatiquement le nombre de clusters.

Scikit-learn ont sklearn.cluster.MeanShift module pour effectuer le clustering Mean Shift.

Regroupement spectral

Avant le regroupement, cet algorithme utilise essentiellement les valeurs propres, c'est-à-dire le spectre de la matrice de similarité des données pour effectuer une réduction de dimensionnalité dans moins de dimensions. L'utilisation de cet algorithme n'est pas recommandée lorsqu'il y a un grand nombre de clusters.

Scikit-learn ont sklearn.cluster.SpectralClustering module pour effectuer un clustering spectral.

Classification hiérarchique

Cet algorithme crée des clusters imbriqués en fusionnant ou en fractionnant les clusters successivement. Cette hiérarchie de cluster est représentée par un dendrogramme, c'est-à-dire un arbre. Il entre dans les deux catégories suivantes -

Agglomerative hierarchical algorithms- Dans ce type d'algorithme hiérarchique, chaque point de données est traité comme un seul cluster. Il agglomère ensuite successivement les paires de grappes. Cela utilise l'approche ascendante.

Divisive hierarchical algorithms- Dans cet algorithme hiérarchique, tous les points de données sont traités comme un grand cluster. Dans ce processus, le processus de regroupement implique de diviser, en utilisant une approche descendante, le seul grand cluster en plusieurs petits clusters.

Scikit-learn ont sklearn.cluster.AgglomerativeClustering module pour effectuer le clustering hiérarchique agglomératif.

DBSCAN

Ça signifie “Density-based spatial clustering of applications with noise”. Cet algorithme est basé sur la notion intuitive de «clusters» et de «bruit» selon laquelle les clusters sont des régions denses de densité inférieure dans l'espace de données, séparées par des régions de moindre densité de points de données.

Scikit-learn ont sklearn.cluster.DBSCANmodule pour effectuer le clustering DBSCAN. Il existe deux paramètres importants à savoir min_samples et eps utilisés par cet algorithme pour définir dense.

Valeur plus élevée du paramètre min_samples ou une valeur inférieure du paramètre eps donnera une indication sur la densité plus élevée de points de données qui est nécessaire pour former un cluster.

OPTIQUE

Ça signifie “Ordering points to identify the clustering structure”. Cet algorithme trouve également des clusters basés sur la densité dans les données spatiales. Sa logique de travail de base est comme DBSCAN.

Il résout une faiblesse majeure de l'algorithme DBSCAN - le problème de la détection de clusters significatifs dans des données de densité variable - en ordonnant les points de la base de données de telle manière que les points spatialement les plus proches deviennent voisins dans l'ordre.

Scikit-learn ont sklearn.cluster.OPTICS module pour effectuer le clustering OPTICS.

BOULEAU

Il est synonyme de réduction itérative équilibrée et de regroupement à l'aide de hiérarchies. Il est utilisé pour effectuer un clustering hiérarchique sur de grands ensembles de données. Il construit un arbre nomméCFT c'est à dire Characteristics Feature Tree, pour les données données.

L'avantage de CFT est que les nœuds de données appelés nœuds CF (Characteristics Feature) contiennent les informations nécessaires pour la mise en cluster, ce qui évite en outre de devoir conserver toutes les données d'entrée en mémoire.

Scikit-learn ont sklearn.cluster.Birch module pour effectuer le clustering BIRCH.

Comparaison des algorithmes de clustering

Le tableau suivant donnera une comparaison (basée sur les paramètres, l'évolutivité et la métrique) des algorithmes de clustering dans scikit-learn.

Sr. Non Nom de l'algorithme Paramètres Évolutivité Métrique utilisée
1 K-Means Nbre de grappes Très grands n_ échantillons La distance entre les points.
2 Propagation d'affinité Amortissement Ce n'est pas évolutif avec n_samples Distance du graphique
3 Changement moyen Bande passante Ce n'est pas évolutif avec n_samples. La distance entre les points.
4 Regroupement spectral Nombre de clusters Niveau d'évolutivité moyen avec n_samples. Petit niveau d'évolutivité avec n_clusters. Distance du graphique
5 Classification hiérarchique Seuil de distance ou nombre de clusters Grand n_samples Grand n_clusters La distance entre les points.
6 DBSCAN Taille du quartier Très grands n_samples et n_clusters moyens. Distance du point le plus proche
sept OPTIQUE Appartenance minimale au cluster Très grands n_samples et grands n_clusters. La distance entre les points.
8 BOULEAU Seuil, facteur de branchement Grand n_samples Grand n_clusters La distance euclidienne entre les points.

Clustering K-Means sur un ensemble de données Scikit-learn Digit

Dans cet exemple, nous appliquerons le clustering K-means sur l'ensemble de données de chiffres. Cet algorithme identifiera des chiffres similaires sans utiliser les informations d'étiquette d'origine. L'implémentation se fait sur le notebook Jupyter.

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Production

1797, 64)

Cette sortie montre que l'ensemble de données numériques contient 1797 échantillons avec 64 caractéristiques.

Exemple

Maintenant, effectuez le clustering K-Means comme suit -

kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Production

(10, 64)

Cette sortie montre que le clustering K-means a créé 10 clusters avec 64 fonctionnalités.

Exemple

fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks = [], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)

Production

La sortie ci-dessous contient des images montrant les centres de clusters appris par le clustering K-Means.

Ensuite, le script Python ci-dessous fera correspondre les étiquettes de cluster apprises (par K-Means) avec les vraies étiquettes qu'elles contiennent -

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]

Nous pouvons également vérifier la précision à l'aide de la commande mentionnée ci-dessous.

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Production

0.7935447968836951

Exemple d'implémentation complet

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np

from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks = [])
   axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)