Partage de technologie

57. Classification basée sur le réseau neuronal probabiliste (PNN) (matlab)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Introduction à la classification basée sur les réseaux neuronaux probabilistes (PNN)

PNN (Probabilistic Neural Network, réseau de neurones probabilistes) est un modèle de réseau de neurones basé sur la théorie des probabilités, principalement utilisé pour résoudre des problèmes de classification. PNN a été proposé pour la première fois par Makovsky et Masikin en 1993. Il s'agit d'un algorithme de classification très efficace.

Le principe du PNN peut être brièvement résumé comme les étapes suivantes :

  1. Couche d'entrée de données: Entrez respectivement les données de l'échantillon d'entrée dans le modèle.
  2. Couche de motif :Effectuez une correspondance de modèles sur chaque donnée d'entrée et calculez le score de similarité entre celle-ci et la catégorie spécifiée.
  3. Couche de comparaison de modèles :Comparez les scores de similarité de toutes les catégories et trouvez la catégorie avec le score le plus élevé comme résultat final du classement.

PNN présente les caractéristiques suivantes :

  1. Efficacité: PNN a une vitesse de formation plus rapide et montre une précision de classification plus élevée dans les applications pratiques.
  2. robustesse :PNN présente une forte robustesse au bruit et aux valeurs aberrantes et peut gérer efficacement des problèmes de classification complexes.
  3. Facile à expliquer :Les résultats du PNN peuvent être interprétés intuitivement, permettant aux utilisateurs de mieux comprendre la base de classification du modèle.

En général, PNN est un algorithme de classification très efficace et convient aux problèmes de classification dans divers domaines, tels que la reconnaissance d'images, la classification de textes, etc.

2. Description de la classification et fonctions clés basées sur le réseau neuronal probabiliste (PNN)

1) Descriptif

Il existe trois vecteurs d'entrée binaires X et leurs classes associées Tc.
Créez un réseau de neurones probabiliste pour classer correctement ces vecteurs.

2) Fonctions importantes

Fonction newpnn() :Concevoir un réseau de neurones probabiliste

Le réseau neuronal probabiliste (PNN) est un réseau à base radiale adapté aux problèmes de classification.

grammaire

net = newpnn(P,T,spread)% accepte deux ou trois paramètres et renvoie un nouveau réseau neuronal probabiliste.

paramètre

P:matrice r × Q de Q vecteurs d'entrée

T:Matrice s × Q de vecteurs de classe cible Q

propagé: Extension des fonctions de base radiale propagées (par défaut = 0.1)

Si la diffusion est proche de zéro, le réseau agit comme un classificateur du plus proche voisin. Lorsque la mise à l’échelle devient importante, le réseau conçu prend en compte plusieurs vecteurs de conception proches.

Fonction sim() : simuler un réseau neuronal

grammaire

[Y,Xf,Af] = sim(net,X,Xi,Ai,T) 
paramètre

réseau : réseau

X : entrée sur le réseau

Xi : condition de retard d'entrée initiale (par défaut = 0)

Ai : condition de retard de couche initiale (par défaut = 0)

T : cible du réseau (par défaut = 0)

3. Ensemble de données et affichage

code

  1. X = [1 2; 2 2; 1 1]';
  2. Tc = [1 2 3];
  3. figure(1)
  4. plot(X(1,:),X(2,:),'.','markersize',30)
  5. for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
  6. axis([0 3 0 3])
  7. title('三个二元向量及分类')
  8. xlabel('X(1,:)')
  9. ylabel('X(2,:)')

Voir l'effet

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Testez le réseau en fonction du vecteur d'entrée de conception

1) Descriptif

Convertir l'indice de classe cible Tc en vecteur T
Utilisez NEWPNN pour concevoir un réseau neuronal probabiliste
SPREAD a la valeur 1 car il s'agit de la distance typique entre les vecteurs d'entrée.

2) Tester le réseau

code

  1. T = ind2vec(Tc);
  2. spread = 1;
  3. net = newpnn(X,T,spread);
  4. %测试网络
  5. %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
  6. Y = net(X);
  7. Yc = vec2ind(Y);
  8. figure(2)
  9. plot(X(1,:),X(2,:),'.','markersize',30)
  10. axis([0 3 0 3])
  11. for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
  12. title('测试网络')
  13. xlabel('X(1,:)')
  14. ylabel('X(2,:)')

Voir l'effet

99dcaabffb554913b0d153b807c6b7e2.png

3) Nouveau réseau de test de données

code

  1. x = [2; 1.5];
  2. y = net(x);
  3. ac = vec2ind(y);
  4. hold on
  5. figure(3)
  6. plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
  7. text(x(1)+0.1,x(2),sprintf('class %g',ac))
  8. hold off
  9. title('新数据分类')
  10. xlabel('X(1,:) and x(1)')
  11. ylabel('X(2,:) and x(2)')

Voir l'effet

03a46217cb4840ddb1d7a4da2b249be4.png

5. Le réseau neuronal probabiliste divise l'espace d'entrée en trois catégories.

illustrer

Divisé en trois catégories

code

  1. x1 = 0:.05:3;
  2. x2 = x1;
  3. [X1,X2] = meshgrid(x1,x2);
  4. xx = [X1(:) X2(:)]';
  5. yy = net(xx);
  6. yy = full(yy);
  7. m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
  8. m.FaceColor = [0 0.5 1];
  9. m.LineStyle = 'none';
  10. hold on
  11. m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
  12. m.FaceColor = [0 1.0 0.5];
  13. m.LineStyle = 'none';
  14. m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
  15. m.FaceColor = [0.5 0 1];
  16. m.LineStyle = 'none';
  17. plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
  18. plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
  19. hold off
  20. view(2)
  21. title('三分类')
  22. xlabel('X(1,:) and x(1)')
  23. ylabel('X(2,:) and x(2)')

essayer l'effet

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Résumé

Le réseau de neurones probabilistes (PNN) est un réseau de neurones artificiels utilisé pour la classification de modèles. Il est basé sur le théorème de Bayes et le modèle de mélange gaussien et peut être utilisé pour traiter différents types de données, notamment des données continues et des données discrètes. PNN est plus flexible que les réseaux neuronaux traditionnels lorsqu'il s'agit de problèmes de classification et possède des capacités de précision et de généralisation plus élevées.

Le principe de fonctionnement de base de PNN est de calculer la similarité entre l'ensemble de données d'entrée et chaque échantillon de l'ensemble d'échantillons, et de classer les données d'entrée en fonction de la similarité. PNN se compose de quatre couches : la couche d’entrée, la couche de modèles, la couche de compétition et la couche de sortie. Les données d'entrée sont d'abord transmises à la couche de modèle via la couche d'entrée, puis la similarité est calculée via la couche de compétition et enfin classée dans la couche de sortie en fonction de la similarité.

Dans Matlab, vous pouvez utiliser des boîtes à outils pertinentes ou vous programmer pour implémenter la classification PNN. Tout d'abord, vous devez préparer un ensemble de données de formation et un ensemble de données de test, puis entraîner le modèle PNN via l'ensemble de données de formation. Une fois la formation terminée, l'ensemble de données de test peut être utilisé pour évaluer les performances de classification du PNN et faire des prédictions.

Dans l’ensemble, PNN est une méthode de classification puissante adaptée à divers problèmes de classification. Dans les applications pratiques, des fonctionnalités et des paramètres de modèle appropriés peuvent être sélectionnés en fonction de problèmes spécifiques pour améliorer les performances de classification. Matlab fournit une multitude d'outils et de fonctions de support, facilitant la mise en œuvre et l'application de PNN.

7.Code source

code

  1. %% 基于概率神经网络(PNN)的分类(matlab)
  2. %此处有三个二元输入向量 X 和它们相关联的类 Tc。
  3. %创建 y 概率神经网络,对这些向量正确分类。
  4. %重要函数:NEWPNN 和 SIM 函数
  5. %% 数据集及显示
  6. X = [1 2; 2 2; 1 1]';
  7. Tc = [1 2 3];
  8. figure(1)
  9. plot(X(1,:),X(2,:),'.','markersize',30)
  10. for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
  11. axis([0 3 0 3])
  12. title('三个二元向量及分类')
  13. xlabel('X(1,:)')
  14. ylabel('X(2,:)')
  15. %% 基于设计输入向量测试网络
  16. %将目标类索引 Tc 转换为向量 T
  17. %用 NEWPNN 设计 y 概率神经网络
  18. % SPREAD 值 1,因为这是输入向量之间的 y 典型距离。
  19. T = ind2vec(Tc);
  20. spread = 1;
  21. net = newpnn(X,T,spread);
  22. %测试网络
  23. %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
  24. Y = net(X);
  25. Yc = vec2ind(Y);
  26. figure(2)
  27. plot(X(1,:),X(2,:),'.','markersize',30)
  28. axis([0 3 0 3])
  29. for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
  30. title('测试网络')
  31. xlabel('X(1,:)')
  32. ylabel('X(2,:)')
  33. %数据测试
  34. x = [2; 1.5];
  35. y = net(x);
  36. ac = vec2ind(y);
  37. hold on
  38. figure(3)
  39. plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
  40. text(x(1)+0.1,x(2),sprintf('class %g',ac))
  41. hold off
  42. title('新数据分类')
  43. xlabel('X(1,:) and x(1)')
  44. ylabel('X(2,:) and x(2)')
  45. %% 概率神经网络将输入空间分为三个类。
  46. x1 = 0:.05:3;
  47. x2 = x1;
  48. [X1,X2] = meshgrid(x1,x2);
  49. xx = [X1(:) X2(:)]';
  50. yy = net(xx);
  51. yy = full(yy);
  52. m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
  53. m.FaceColor = [0 0.5 1];
  54. m.LineStyle = 'none';
  55. hold on
  56. m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
  57. m.FaceColor = [0 1.0 0.5];
  58. m.LineStyle = 'none';
  59. m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
  60. m.FaceColor = [0.5 0 1];
  61. m.LineStyle = 'none';
  62. plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
  63. plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
  64. hold off
  65. view(2)
  66. title('三分类')
  67. xlabel('X(1,:) and x(1)')
  68. ylabel('X(2,:) and x(2)')