Clustering de données avec une carte auto-organisatrice
Regrouper des données (clustering) est également une très bonne application pour les réseaux de neurones. Cela nécessite un regroupement des données par similitude. En voici quelques exemples :
Segmentation de marché en regroupant des personnes en fonction de leurs habitudes d’achat
Exploration de données (data mining) en partitionnant les données en sous-ensembles reliés
Analyse bioinformatique en regroupant des gènes avec des patterns d’expressions correspondantes
Supposez que vous vouliez regrouper des types de fleurs en fonction de la longueur des pétales, de la largeur des pétales, de la longueur des sépales et de la largeur des sépales. Vous avez 150 cas pour lesquels vous disposez de ces quatre mesures.
Comme avec l’ajustement de fonctions et la reconnaissance de formes, il existe deux manières de résoudre ce problème :
Utiliser l’application Neural Net Clustering, décrite dans Clustering de données avec l’application Neural Net Clustering.
Utiliser les fonctions en ligne de commande, décrites dans Utiliser les fonctions en ligne de commande pour le clustering de données.
Il est généralement préférable de commencer avec l’application puis d’utiliser l’application pour générer automatiquement des scripts de lignes de commande. Avant d’utiliser l’une des méthodes, commencez par définir le problème en sélectionnant un jeu de données. Chacune des applications du réseau de neurones a accès à des jeux de données que vous pouvez utiliser pour vous entraîner avec la toolbox (voir Exemples de jeux de données pour les réseaux de neurones peu profonds). Si vous voulez résoudre un problème spécifique, vous pouvez charger vos propres données dans l’espace de travail. La section suivante décrit le format des données.
Définir un problème
Pour définir un problème de clustering, organisez les vecteurs d’entrée (prédicteurs) à regrouper sous forme de colonnes dans une matrice d’entrée. Par exemple, vous pourriez vouloir regrouper cet ensemble de 10 vecteurs à deux éléments :
predictors = [7 0 6 2 6 5 6 1 0 1; 6 2 5 0 7 5 5 1 2 2]
La section suivante indique comment entraîner un réseau pour regrouper des données avec l’application Neural Net Clustering. Cet exemple utilise un jeu de données fourni avec la toolbox.
Clustering de données avec l’application Neural Net Clustering
Cet exemple indique comment entraîner un réseau de neurones peu profond pour regrouper des données avec l’application Neural Net Clustering.
Ouvrez l’application Neural Net Clustering avec nctool
.
nctool
Sélectionner les données
L’application Neural Net Clustering comporte des exemples de données pour vous aider à commencer à entraîner un réseau de neurones.
Pour importer un exemple de données de regroupement d’iris, sélectionnez Import > Import Iris Flowers Data Set. Si vous importez vos propres données depuis un fichier ou l’espace de travail, vous devez spécifier les prédicteurs et si les observations sont organisées en lignes ou en colonnes.
Les informations sur les données importées apparaissent dans le Model Summary. Ce jeu de données contient 150 observations avec quatre caractéristiques chacune.
Créer un réseau
Le réseau SOM (Self-Organizing feature Map) est le plus utilisé pour les problèmes de clustering. Ce réseau comporte une couche avec des neurones organisés dans une grille. Les cartes auto-organisatrices (SOM) apprennent à regrouper les données en fonction de leur similarité. Pour plus d’informations sur les SOM, veuillez consulter Cluster with Self-Organizing Map Neural Network.
Pour créer le réseau, spécifiez la taille de la carte, qui correspond au nombre de lignes et de colonnes de la grille. Pour cet exemple, définissez la valeur Map size (taille de la carte) à 10, ce qui correspond à une grille avec 10 lignes et 10 colonnes. Le nombre total de neurones est égal au nombre de points dans la grille. Dans cet exemple, la carte comporte 100 neurones. Vous pouvez voir l’architecture du réseau dans le volet Network.
Entraîner le réseau
Pour entraîner le réseau, cliquez sur Train. Vous pouvez voir la progression de l'apprentissage dans le volet Training. L'apprentissage se poursuit jusqu’à ce que l'un des critères d’arrêt soit rempli. Dans cet exemple, l’apprentissage continue jusqu’à ce que le nombre maximal d’epochs soit atteint.
Analyser les résultats
Générez des tracés afin d’analyser les résultats de l’apprentissage. Pour l’apprentissage de la SOM, le vecteur de poids associé à chaque neurone se déplace pour devenir le centre d’un cluster de vecteurs d’entrée. Par ailleurs, les neurones adjacents les uns aux autres dans la topologie doivent également se rapprocher les uns des autres dans l’espace d’entrée, il est alors possible de visualiser un espace d’entrée de dimension élevée dans les deux dimensions de la topologie du réseau. La topologie par défaut de la SOM est hexagonale.
Pour tracer les Sample Hits de la SOM, dans la section Plots, cliquez sur Sample Hits. Cette figure montre les emplacements des neurones dans la topologie et indique combien d'observations sont associées à chacun des neurones (les centres des clusters). La topologie est une grille de 10 par 10. Il y a donc 100 neurones. Le nombre maximum de correspondances associées à un neurone est de 5. Il y a donc 5 vecteurs d’entrée dans ce cluster.
Tracez les plans de pondérations (également nommés plans de composantes). Dans la section Plots, cliquez sur Weight Planes. Cette figure représente un plan de pondérations pour chaque élément des caractéristiques d’entrée (quatre dans cet exemple). Ce tracé représente les poids qui associent chaque entrée à chacun des neurones. Les couleurs foncées représentent des pondérations élevées. Si les patterns d’associations de deux caractéristiques sont très similaires, vous pouvez considérer que les caractéristiques sont fortement corrélées.
Si vous n’êtes pas satisfait des performances du réseau, vous disposez des possibilités suivantes :
Entraîner à nouveau le réseau. Pour chaque apprentissage le réseau aura des poids et des biais initiaux différents et offrira potentiellement une fois l'apprentissage terminé un meilleur réseau.
Augmenter le nombre de neurones en augmentant la taille de la carte.
Utiliser un jeu de données d’apprentissage plus grand.
Vous pouvez également évaluer les performances du réseau sur un jeu de test supplémentaire. Pour charger des données de test supplémentaires pour l'évaluation du réseau, dans la section Test, cliquez sur Test. Générez des tracés afin d’analyser les résultats des tests supplémentaires.
Générer du code
Sélectionnez Generate Code > Generate Simple Training Script afin de créer du code MATLAB pour reproduire les étapes précédentes en ligne de commande. Il peut être utile de créer le code MATLAB si vous voulez apprendre comment utiliser la fonctionnalité en ligne de commande de la toolbox pour personnaliser le processus d’apprentissage. Dans Utiliser les fonctions en ligne de commande pour le clustering de données, vous étudierez les scripts générés de manière plus détaillée.
Exporter un réseau
Vous pouvez exporter votre réseau entraîné vers l’espace de travail ou Simulink®. Vous pouvez également déployer le réseau avec les outils MATLAB Compiler™ et d’autres outils de génération de code MATLAB. Pour exporter votre réseau entraîné et vos résultats, sélectionnez Export Model > Export to Workspace.
Utiliser les fonctions en ligne de commande pour le clustering de données
La manière la plus facile d’apprendre à utiliser la fonctionnalité en ligne de commande de la toolbox consiste à générer des scripts à partir des applications, puis à les modifier afin de personnaliser l’apprentissage du réseau. À titre d’exemple, regardez le script simple qui a été créé dans la section précédente à l’aide de l'application Neural Net Clustering.
% Solve a Clustering Problem with a Self-Organizing Map % Script generated by Neural Clustering app % Created 21-May-2021 10:15:01 % % This script assumes these variables are defined: % % irisInputs - input data. x = irisInputs; % Create a Self-Organizing Map dimension1 = 10; dimension2 = 10; net = selforgmap([dimension1 dimension2]); % Train the Network [net,tr] = train(net,x); % Test the Network y = net(x); % View the Network view(net) % Plots % Uncomment these lines to enable various plots. %figure, plotsomtop(net) %figure, plotsomnc(net) %figure, plotsomnd(net) %figure, plotsomplanes(net) %figure, plotsomhits(net,x) %figure, plotsompos(net,x)
Vous pouvez enregistrer le script puis l’exécuter en ligne de commande afin de reproduire les résultats de la session d’apprentissage précédente. Vous pouvez également éditer le script pour personnaliser le processus d’apprentissage. Dans ce cas, suivez chaque étape du script.
Sélectionner les données
Ce script suppose que les prédicteurs soient déjà chargés dans l’espace de travail. Si les données ne sont pas chargées, vous pouvez les charger de la manière suivante :
load iris_dataset
Cette commande charge les prédicteurs irisInputs
dans l’espace de travail.
Ce jeu de données est l’un des exemples de jeux de données de la toolbox. Pour des informations sur les jeux de données disponibles, veuillez consulter Exemples de jeux de données pour les réseaux de neurones peu profonds. Vous pouvez également voir une liste de tous les jeux de données disponibles en saisissant la commande help nndatasets
. Vous pouvez charger les variables depuis n’importe lequel de ces jeux de données avec vos propres noms de variables. Par exemple, la commande
x = irisInputs;
x
.Créer un réseau
Créez un réseau. Pour cet exemple, vous utilisez une carte auto-organisatrice (SOM). Ce réseau comporte une couche avec les neurones organisés dans une grille. Pour plus d’informations, veuillez consulter Cluster with Self-Organizing Map Neural Network. Lorsque vous créez le réseau avec selforgmap
, vous spécifiez le nombre de lignes et de colonnes de la grille.
dimension1 = 10; dimension2 = 10; net = selforgmap([dimension1 dimension2]);
Entraîner le réseau
Entraînez le réseau. Le réseau SOM utilise l'algorithme SOM en mode batch par défaut pour l’apprentissage.
[net,tr] = train(net,x);
Pendant l’apprentissage, la fenêtre d’apprentissage apparaît et indique la progression de l’apprentissage. Vous pouvez interrompre l’apprentissage n'importe quand en cliquant sur le bouton d’arrêt .
Tester le réseau
Testez le réseau. Une fois que le réseau a été entraîné, vous pouvez l’utiliser pour calculer les sorties du réseau.
y = net(x);
Afficher le réseau
Affichez le schéma du réseau.
view(net)
Analyser les résultats
Pour l’apprentissage de la SOM, le vecteur de poids associé à chaque neurone se déplace pour devenir le centre d’un cluster de vecteurs d’entrée. Par ailleurs, les neurones adjacents les uns aux autres dans la topologie doivent également se rapprocher les uns des autres dans l’espace d’entrée, il est alors possible de visualiser un espace d’entrée de dimension élevée dans les deux dimensions de la topologie du réseau. La topologie de la SOM par défaut est hexagonale. Entrez les commandes suivantes pour l’afficher.
figure, plotsomtop(net)
Sur cette figure, chaque hexagone représente un neurone. La grille est de 10 par 10. Il y a donc au total 100 neurones dans ce réseau. Chaque vecteur d’entrée comporte quatre caractéristiques. L’espace d’entrée est donc de dimension quatre. Les vecteurs de poids (centres des clusters) se trouvent dans cet espace.
Comme cette SOM a une topologie en deux dimensions, vous pouvez afficher en deux dimensions les relations entre les centres de clusters de quatre dimensions. Un outil de visualisation pour la SOM est la matrice de distance pondérée (également nommée U-matrix).
Pour afficher la U-matrix, cliquez sur SOM Neighbor Distances dans la fenêtre d’apprentissage.
Sur cette figure, les hexagones bleus représentent les neurones. Les lignes rouges connectent les neurones voisins. Les couleurs dans les régions contenant les lignes rouges indiquent les distances entre neurones. Les couleurs foncées représentent de longues distances. Les couleurs claires représentent des distances courtes. Une bande de segments foncés traverse la carte. Il apparaît que le réseau SOM a regroupé les fleurs en deux groupes distincts.
Étapes suivantes
Pour gagner en expérience dans les opérations en ligne de commande, essayez certaines de ces tâches :
Pendant l’apprentissage, ouvrez une fenêtre de tracé (telle que le tracé de la position des poids de la SOM) et regardez-le s’animer.
Tracez en ligne de commande avec des fonctions telles que
plotsomhits
,plotsomnc
,plotsomnd
,plotsomplanes
,plotsompos
etplotsomtop
.
Voir aussi
Neural Net Fitting | Neural Net Time Series | Neural Net Pattern Recognition | Neural Net Clustering | Deep Network Designer | train