Comment faire du clustering non supervisé avec Keras

Les algorithmes d’apprentissage en profondeur permettent de mapper les entrées entre les jeux de données étiquetés, grâce à sa capacité exceptionnelle à exprimer des représentations non linéaires. Ce type de tâche est appelé classification, alors que quelqu'un doit étiqueter ces données. Qu'il s'agisse d'étiqueter des images de rayons X ou de sujets d'actualités, cela dépend de l'intervention humaine et peut devenir assez coûteux à mesure que les ensembles de données s'agrandissent.

L’analyse de cluster ou le clustering est l’une des techniques d’apprentissage automatique non supervisée ne nécessitant pas de données étiquetées. Pour cela, il regroupe les jeux de données en fonction de leurs similitudes.

Pourquoi devriez-vous vous préoccuper de la classification ou de l'analyse de la classification? Laissez-moi vous montrer quelques idées.

Applications du clustering

  • Système de recommandation, en apprenant l’historique des achats des utilisateurs, un modèle de regroupement peut segmenter les utilisateurs par similarités, vous aidant ainsi à trouver des utilisateurs partageant les mêmes idées ou des produits connexes.
  • En biologie, les algorithmes de regroupement de séquences tentent de regrouper des séquences biologiques qui sont en quelque sorte liées. Les protéines ont été regroupées en fonction de leur teneur en acides aminés.
  • Analyse de regroupement d'images ou de vidéos pour diviser les groupes en fonction des similitudes.
  • Dans une base de données médicale, chaque patient peut avoir une mesure réelle distincte pour des tests spécifiques (par exemple, glucose, cholestérol). Regrouper d’abord les patients peut nous aider à comprendre comment le regroupement des caractéristiques valorisées doit être effectué pour réduire leur rareté et améliorer la précision des tâches de classification telles que la prévision de la survie des patients cancéreux.
  • Cas d'utilisation général, générant un résumé compact des données pour la classification, la découverte de modèles, la génération d'hypothèses et les tests.

Quoi qu'il en soit, la mise en cluster est un atout précieux à acquérir pour tout scientifique des données.

Ce qui fait un bon clustering

Une bonne méthode de clustering produira des clusters de haute qualité qui devraient avoir:

  • Forte similarité intra-classe: cohésif au sein des grappes
  • Faible similarité entre les classes: Distinctif entre les groupes

Définir une ligne de base avec K-Means

L'algorithme traditionnel K-means est rapide et applicable à un large éventail de problèmes. Cependant, leurs mesures de distance sont limitées à l'espace de données d'origine et ont tendance à être inefficaces lorsque la dimensionnalité en entrée est élevée, par exemple, les images.

Formons un modèle K-Means pour regrouper les chiffres manuscrits du MNIST en 10 clusters.

La précision de classification K-Means évaluée est de 53,2%. Nous la comparerons ensuite à notre modèle de classification par intégration profonde.

Le modèle que nous allons présenter prochainement comprend plusieurs parties:

  • Un autoencoder, pré-formé pour apprendre la représentation condensée initiale des jeux de données non étiquetés.
  • Une couche de regroupement empilée sur le codeur pour affecter la sortie du codeur à un cluster. Les poids de la couche de regroupement sont initialisés avec les centres de regroupement de K-Means sur la base de l’évaluation en cours.
  • Formez le modèle de regroupement pour affiner la couche de regroupement et le codeur conjointement.

Vous recherchez le code source? Obtenez-le sur mon GitHub.

Autoencoder pré-train

Autoencoder est un algorithme de compression de données comportant deux parties principales: un codeur et un décodeur. Le travail du codeur consiste à compresser les données d’entrée en caractéristiques de dimension inférieure. Par exemple, un échantillon de l'image MNIST 28x28 comporte 784 pixels au total. Le codeur que nous avons construit peut le compresser en un tableau comportant seulement dix nombres à virgule flottante, également appelés caractéristiques d'une image. La partie décodeur, par contre, prend les entités compressées en entrée et reconstruit une image aussi proche que possible de l'image d'origine. Autoencoder est un algorithme d'apprentissage non supervisé dans la nature car lors de la formation, il prend uniquement les images elles-mêmes et n'a pas besoin d'étiquettes.

Autoencoder

L'auto-codeur que nous construisons est un modèle symétrique entièrement connecté, symétrique sur la manière dont une image est compressée et décompressée de manière exactement opposée.

Autoencoder entièrement connecté

Nous allons former l'auto-codeur pour 300 époques et sauvegarder les poids de modèle pour plus tard.

Modèle de clustering

En formant l'auto-codeur, nous avons appris à la partie codeur à compresser chaque image en dix valeurs à virgule flottante. Vous pensez peut-être que, puisque la dimensionnalité en entrée est réduite à 10, K-Means devrait-il pouvoir faire le regroupement à partir d'ici? Oui, nous allons utiliser K-Means pour générer les centroïdes de cluster, c’est-à-dire les 10 centres de clusters de l’espace de fonctions 10-D. Mais nous allons également créer notre couche de clustering personnalisée pour convertir les entités en entrée en probabilité d’étiquette de cluster.

La probabilité est calculée par la distribution t de l’élève. La distribution T, identique à celle utilisée dans l'algorithme t-SNE, mesure la similarité entre un point incorporé et un centroïde. Et comme vous pouvez le deviner, la couche de regroupement agit de la même manière que le K-means, et les pondérations de la couche représentent les centroïdes de cluster qui peuvent être initialisés en formant un K-moyennes.

Si vous débutez dans la création d'une couche personnalisée dans Keras, vous devez implémenter trois méthodes.

  • build (input_shape), où vous définissez les poids de la couche, dans notre cas, les 10 clusters dans l’espace 10-D, c’est-à-dire 10 variables de poids.
  • call (x), où réside la logique de calque, c’est là que se déroule le mappage des caractéristiques à la magie des étiquettes en grappes.
  • compute_output_shape (input_shape), spécifiez ici la logique de transformation de forme des formes d’entrée aux formes de sortie.

Voici le code de la couche de clustering personnalisé,

Ensuite, nous empilons une couche de clustering après le codeur pré-formé pour former le modèle de clustering. Pour la couche de regroupement, nous initialisons ses pondérations, les centres de regroupement utilisant k-means formés sur les vecteurs de fonctions de toutes les images.

Structure de modèle de clustering

Former le modèle de clustering

Distribution de cible auxiliaire et perte de divergence KL

L'étape suivante consiste à améliorer simultanément l'affectation de cluster et la représentation des fonctionnalités. À cette fin, nous définirons une distribution de probabilité cible basée sur un centroïde et minimiserons la divergence de KL par rapport au résultat du regroupement du modèle.

Nous aimerions avoir la distribution cible pour avoir les propriétés suivantes.

  • Renforcer les prévisions, c’est-à-dire améliorer la pureté des grappes.
  • Mettez davantage l'accent sur les points de données attribués avec une grande confiance.
  • Empêchez les grands groupes de déformer l’espace masqué.

La distribution cible est calculée en augmentant d'abord q (les vecteurs de caractéristiques codés) à la seconde puissance, puis en normalisant la fréquence par cluster.

Il est nécessaire d'affiner les clusters de manière itérative en tirant des enseignements des assignations à haute confiance avec l'aide de la distribution cible auxiliaire. Après un nombre spécifique d'itérations, la distribution cible est mise à jour et le modèle de clustering sera entraîné à minimiser la perte de divergence KL entre la distribution cible et la sortie de clustering. La stratégie de formation peut être vue comme une forme d’auto-formation. Comme en auto-apprentissage, nous prenons un classificateur initial et un jeu de données non étiqueté, puis étiquetons le jeu de données avec le classificateur afin de le former sur ses prédictions de confiance élevée.

La fonction de perte, la divergence KL ou la divergence Kullback – Leibler est une mesure de la différence de comportement entre deux distributions différentes. Nous voulons le minimiser afin que la distribution cible soit aussi proche que possible de la distribution de sortie en cluster.

Dans l'extrait de code suivant, la distribution cible est mise à jour toutes les 140 itérations d'apprentissage.

Vous constaterez que la précision du regroupement augmente progressivement après chaque mise à jour.

Métrique d'évaluation

La métrique indique qu'elle a atteint une précision de regroupement de 96,2%, ce qui est assez bon si l'on considère que les entrées sont des images non étiquetées. Examinons de plus près la précision obtenue.

Cette métrique prend une affectation de cluster à partir d'un algorithme non supervisé et une assignation de vérité au sol, puis trouve la meilleure correspondance entre eux.

La meilleure cartographie peut être efficacement calculée par l'algorithme hongrois qui est implémenté dans la bibliothèque d'apprentissage de scikit sous la forme linear_assignment.

Il est plus simple de regarder la matrice de confusion.

Matrice de confusion

Ici, vous pouvez rapidement faire correspondre l’affectation de regroupement à la main, par exemple, le groupe 1 correspond à l’étiquette vraie 7 ou au chiffre manuscrit «7» et à un visa.

L'extrait de code de traçage de matrice de confusion présenté ci-dessous.

Application d'un auto-codeur convolutionnel (expérimental)

Étant donné que nous traitons de jeux de données d'image, cela vaut la peine d'essayer avec un autoencodeur convolutionnel au lieu d'une construction uniquement avec des couches entièrement connectées.

Une chose à noter, pour reconstruire l’image, vous pouvez choisir des couches déconvolutionnelles (Conv2DTranspose dans Keras) ou des couches d’échantillonnage (UpSampling2D) pour réduire le nombre d’artefacts. Le résultat expérimental pour les autoencodeurs convolutifs est disponible sur mon GitHub.

Conclusion et lectures complémentaires

Nous avons appris à créer un modèle keras pour effectuer une analyse de clustering avec des ensembles de données non étiquetés. Le codeur automatique pré-formé a joué un rôle important dans la réduction dimensionnelle et l'initialisation des paramètres, puis la couche de regroupement personnalisée a été formée par rapport à une distribution cible pour affiner la précision.

Lectures complémentaires

Construire des auto-encodeurs à Keras - Blog officiel de Keras

Intégration profonde non supervisée pour l'analyse de clustering - m'a inspiré pour écrire ce post.

Le code source complet se trouve sur mon GitHub, lu jusqu'à la fin du cahier, car vous découvrirez un autre moyen alternatif de minimiser les pertes de clustering et d'auto-encodeur, qui s'est avéré utile pour améliorer la précision de clustering du modèle de clustering convolutif.

Publié à l'origine sur www.dlology.com.