Technologieaustausch

57. Klassifizierung basierend auf einem probabilistischen neuronalen Netzwerk (PNN) (Matlab)

2024-07-12

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

1. Einführung in die Klassifizierung basierend auf probabilistischen neuronalen Netzwerken (PNN)

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:

  1. Dateneingabeschicht: Geben Sie die eingegebenen Beispieldaten jeweils in das Modell ein.
  2. Musterebene:Führen Sie einen Mustervergleich für alle Eingabedaten durch und berechnen Sie den Ähnlichkeitswert zwischen ihnen und der angegebenen Kategorie.
  3. Mustervergleichsebene:Vergleichen Sie die Ähnlichkeitswerte aller Kategorien und ermitteln Sie als endgültiges Klassifizierungsergebnis die Kategorie mit dem höchsten Wert.

PNN hat die folgenden Eigenschaften:

  1. Effizienz: PNN hat eine schnellere Trainingsgeschwindigkeit und zeigt in praktischen Anwendungen eine höhere Klassifizierungsgenauigkeit.
  2. Robustheit:PNN weist eine hohe Robustheit gegenüber Rauschen und Ausreißern auf und kann komplexe Klassifizierungsprobleme effektiv bewältigen.
  3. Einfach erklärt:Die Ergebnisse von PNN können intuitiv interpretiert werden, sodass Benutzer die Klassifizierungsbasis des Modells besser verstehen können.

Im Allgemeinen ist PNN ein sehr effektiver Klassifizierungsalgorithmus und eignet sich für Klassifizierungsprobleme in verschiedenen Bereichen wie Bilderkennung, Textklassifizierung usw.

2. Klassifizierungsbeschreibung und Schlüsselfunktionen basierend auf dem probabilistischen neuronalen Netzwerk (PNN)

1) Beschreibung

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.

2) Wichtige Funktionen

newpnn()-Funktion:Entwurf eines probabilistischen neuronalen Netzwerks

Das probabilistische neuronale Netzwerk (PNN) ist ein radiales Basisnetzwerk, das für Klassifizierungsprobleme geeignet ist.

Grammatik

net = newpnn(P,T,spread)% akzeptiert zwei oder drei Parameter und gibt ein neues probabilistisches neuronales Netzwerk zurück.

Parameter

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.

sim()-Funktion: neuronales Netzwerk simulieren

Grammatik

[Y,Xf,Af] = sim(net,X,Xi,Ai,T) 
Parameter

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)

3. Datensatz und Anzeige

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,:)')

Wirkung anzeigen

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Testen Sie das Netzwerk basierend auf dem Entwurfseingabevektor

1) Beschreibung

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.

2) Testnetzwerk

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,:)')

Wirkung anzeigen

99dcaabffb554913b0d153b807c6b7e2.png

3) Neues Datentestnetzwerk

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)')

Wirkung anzeigen

03a46217cb4840ddb1d7a4da2b249be4.png

5. Das probabilistische neuronale Netzwerk unterteilt den Eingaberaum in drei Kategorien.

veranschaulichen

Unterteilt in drei Kategorien

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)')

Versuchen Sie es mit dem Effekt

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Zusammenfassung

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.

7. Quellcode

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)')