2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
PNN (Probabilistic Neural Network, probabilistisches neuronales Netzwerk) ist ein auf der Wahrscheinlichkeitstheorie basierendes neuronales Netzwerkmodell, das hauptsächlich zur Lösung von Klassifizierungsproblemen verwendet wird. PNN wurde erstmals 1993 von Makovsky und Masikin vorgeschlagen. Es handelt sich um einen sehr effektiven Klassifizierungsalgorithmus.
Das Prinzip von PNN lässt sich kurz wie folgt zusammenfassen:
PNN hat die folgenden Eigenschaften:
Im Allgemeinen ist PNN ein sehr effektiver Klassifizierungsalgorithmus und eignet sich für Klassifizierungsprobleme in verschiedenen Bereichen wie Bilderkennung, Textklassifizierung usw.
Es gibt drei binäre Eingabevektoren X und die zugehörigen Klassen Tc.
Erstellen Sie ein probabilistisches neuronales Netzwerk, um diese Vektoren korrekt zu klassifizieren.
Das probabilistische neuronale Netzwerk (PNN) ist ein radiales Basisnetzwerk, das für Klassifizierungsprobleme geeignet ist.
net = newpnn(P,T,spread)% akzeptiert zwei oder drei Parameter und gibt ein neues probabilistisches neuronales Netzwerk zurück.
P:r × Q-Matrix von Q Eingabevektoren
T:s × Q-Matrix von Q Zielklassenvektoren
verbreiten: Erweiterung propagierter radialer Basisfunktionen (Standard = 0,1)
Wenn die Diffusion nahe Null liegt, fungiert das Netzwerk als Klassifikator für den nächsten Nachbarn. Wenn die Skalierung groß wird, berücksichtigt das entworfene Netzwerk mehrere nahegelegene Entwurfsvektoren.
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
Netz: Netzwerk
X: Eingabe in das Netzwerk
Xi: anfängliche Eingangsverzögerungsbedingung (Standard = 0)
Ai: anfängliche Schichtverzögerungsbedingung (Standard = 0)
T: Netzwerkziel (Standard = 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,:)')
Konvertieren Sie den Zielklassenindex Tc in den Vektor T
Verwenden Sie NEWPNN, um ein probabilistisches neuronales Netzwerk zu entwerfen
SPREAD hat den Wert 1, da dies der typische Abstand zwischen Eingabevektoren ist.
- 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)')
Unterteilt in drei Kategorien
- 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)')
Das probabilistische neuronale Netzwerk (PNN) ist ein künstliches neuronales Netzwerk, das zur Musterklassifizierung verwendet wird. Es basiert auf dem Satz von Bayes und dem Gaußschen Mischungsmodell und kann zur Verarbeitung verschiedener Datentypen verwendet werden, einschließlich kontinuierlicher Daten und diskreter Daten. PNN ist bei der Lösung von Klassifizierungsproblemen flexibler als herkömmliche neuronale Netze und verfügt über eine höhere Genauigkeit und Generalisierungsfähigkeiten.
Das grundlegende Arbeitsprinzip von PNN besteht darin, die Ähnlichkeit zwischen dem Eingabedatensatz und jeder Stichprobe im Stichprobensatz zu berechnen und die Eingabedaten anhand der Ähnlichkeit zu klassifizieren. PNN besteht aus vier Schichten: Eingabeschicht, Musterschicht, Wettbewerbsschicht und Ausgabeschicht. Die Eingabedaten werden zuerst über die Eingabeschicht an die Musterschicht weitergeleitet, dann wird die Ähnlichkeit über die Konkurrenzschicht berechnet und schließlich in der Ausgabeschicht entsprechend der Ähnlichkeit klassifiziert.
In Matlab können Sie relevante Toolboxen verwenden oder sich selbst programmieren, um die PNN-Klassifizierung zu implementieren. Zuerst müssen Sie einen Trainingsdatensatz und einen Testdatensatz vorbereiten und dann das PNN-Modell anhand des Trainingsdatensatzes trainieren. Nach Abschluss des Trainings kann der Testdatensatz verwendet werden, um die Klassifizierungsleistung des PNN zu bewerten und Vorhersagen zu treffen.
Insgesamt ist PNN eine leistungsstarke Klassifizierungsmethode, die für verschiedene Klassifizierungsprobleme geeignet ist. In praktischen Anwendungen können geeignete Merkmale und Modellparameter entsprechend spezifischer Probleme ausgewählt werden, um die Klassifizierungsleistung zu verbessern. Matlab bietet eine Fülle von Tools und Funktionsunterstützung, die die Implementierung und Anwendung von PNN erleichtern.
- %% 基于概率神经网络(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)')
-
-
-