2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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 :
PNN présente les caractéristiques suivantes :
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.
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.
Le réseau neuronal probabiliste (PNN) est un réseau à base radiale adapté aux problèmes de classification.
net = newpnn(P,T,spread)% accepte deux ou trois paramètres et renvoie un nouveau réseau neuronal probabiliste.
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.
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
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)
- X = [1 2; 2 2; 1 1]';
- Tc = [1 2 3];
- figure(1)
- plot(X(1,:),X(2,:),'.','markersize',30)
- for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
- axis([0 3 0 3])
- title('三个二元向量及分类')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
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.
- T = ind2vec(Tc);
- spread = 1;
- net = newpnn(X,T,spread);
- %测试网络
- %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
- Y = net(X);
- Yc = vec2ind(Y);
- figure(2)
- plot(X(1,:),X(2,:),'.','markersize',30)
- axis([0 3 0 3])
- for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
- title('测试网络')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
- x = [2; 1.5];
- y = net(x);
- ac = vec2ind(y);
- hold on
- figure(3)
- plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
- text(x(1)+0.1,x(2),sprintf('class %g',ac))
- hold off
- title('新数据分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
Divisé en trois catégories
- x1 = 0:.05:3;
- x2 = x1;
- [X1,X2] = meshgrid(x1,x2);
- xx = [X1(:) X2(:)]';
- yy = net(xx);
- yy = full(yy);
- m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
- m.FaceColor = [0 0.5 1];
- m.LineStyle = 'none';
- hold on
- m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
- m.FaceColor = [0 1.0 0.5];
- m.LineStyle = 'none';
- m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
- m.FaceColor = [0.5 0 1];
- m.LineStyle = 'none';
- plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
- plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
- hold off
- view(2)
- title('三分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
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.
- %% 基于概率神经网络(PNN)的分类(matlab)
- %此处有三个二元输入向量 X 和它们相关联的类 Tc。
- %创建 y 概率神经网络,对这些向量正确分类。
- %重要函数:NEWPNN 和 SIM 函数
- %% 数据集及显示
- X = [1 2; 2 2; 1 1]';
- Tc = [1 2 3];
- figure(1)
- plot(X(1,:),X(2,:),'.','markersize',30)
- for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
- axis([0 3 0 3])
- title('三个二元向量及分类')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
- %% 基于设计输入向量测试网络
- %将目标类索引 Tc 转换为向量 T
- %用 NEWPNN 设计 y 概率神经网络
- % SPREAD 值 1,因为这是输入向量之间的 y 典型距离。
- T = ind2vec(Tc);
- spread = 1;
- net = newpnn(X,T,spread);
- %测试网络
- %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
- Y = net(X);
- Yc = vec2ind(Y);
- figure(2)
- plot(X(1,:),X(2,:),'.','markersize',30)
- axis([0 3 0 3])
- for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
- title('测试网络')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
- %数据测试
- x = [2; 1.5];
- y = net(x);
- ac = vec2ind(y);
- hold on
- figure(3)
- plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
- text(x(1)+0.1,x(2),sprintf('class %g',ac))
- hold off
- title('新数据分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
- %% 概率神经网络将输入空间分为三个类。
- x1 = 0:.05:3;
- x2 = x1;
- [X1,X2] = meshgrid(x1,x2);
- xx = [X1(:) X2(:)]';
- yy = net(xx);
- yy = full(yy);
- m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
- m.FaceColor = [0 0.5 1];
- m.LineStyle = 'none';
- hold on
- m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
- m.FaceColor = [0 1.0 0.5];
- m.LineStyle = 'none';
- m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
- m.FaceColor = [0.5 0 1];
- m.LineStyle = 'none';
- plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
- plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
- hold off
- view(2)
- title('三分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
-
-
-