Condivisione della tecnologia

57. Classificazione basata su reti neurali probabilistiche (PNN) (matlab)

2024-07-12

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

1. Introduzione alla classificazione basata su reti neurali probabilistiche (PNN)

PNN (Probabilistic Neural Network, rete neurale probabilistica) è un modello di rete neurale basato sulla teoria della probabilità, utilizzato principalmente per risolvere problemi di classificazione. Il PNN è stato proposto per la prima volta da Makovsky e Masikin nel 1993. È un algoritmo di classificazione molto efficace.

Il principio della PNN può essere brevemente riassunto nei seguenti passaggi:

  1. Livello di input dei dati: immettere rispettivamente i dati del campione di input nel modello.
  2. Strato del modello:Esegui la corrispondenza dei modelli su ciascun dato di input e calcola il punteggio di somiglianza tra esso e la categoria specificata.
  3. Livello di confronto dei modelli:Confronta i punteggi di somiglianza di tutte le categorie e trova la categoria con il punteggio più alto come risultato della classificazione finale.

La PNN ha le seguenti caratteristiche:

  1. Efficienza: PNN ha una velocità di addestramento più elevata e mostra una maggiore precisione di classificazione nelle applicazioni pratiche.
  2. robustezza:La PNN ha una forte robustezza rispetto al rumore e ai valori anomali e può gestire efficacemente problemi di classificazione complessi.
  3. Facile da spiegare:I risultati della PNN possono essere interpretati in modo intuitivo, consentendo agli utenti di comprendere meglio la base di classificazione del modello.

In generale, PNN è un algoritmo di classificazione molto efficace ed è adatto a problemi di classificazione in vari campi, come il riconoscimento delle immagini, la classificazione del testo, ecc.

2. Descrizione della classificazione e funzioni chiave basate sulla rete neurale probabilistica (PNN)

1) Descrizione

Ci sono tre vettori di input binari X e le loro classi associate Tc.
Crea una rete neurale probabilistica per classificare correttamente questi vettori.

2) Funzioni importanti

funzione newpnn():Progettare una rete neurale probabilistica

La Rete Neurale Probabilistica (PNN) è una rete a base radiale adatta a problemi di classificazione.

grammatica

net = newpnn(P,T,spread)% accetta due o tre parametri e restituisce una nuova rete neurale probabilistica.

parametro

P:matrice r × Q di Q vettori di input

T:Matrice s × Q dei vettori delle classi target Q

diffusione: Estensione delle funzioni di base radiale propagate (default = 0.1)

Se la diffusione è prossima allo zero, la rete agisce come un classificatore del vicino più vicino. Quando la scala diventa ampia, la rete progettata considera diversi vettori di progettazione vicini.

funzione sim(): simula la rete neurale

grammatica

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

rete: rete

X: ingresso alla rete

Xi: condizione iniziale di ritardo dell'ingresso (default = 0)

Ai: condizione di ritardo del livello iniziale (default = 0)

T: destinazione della rete (impostazione predefinita = 0)

3. Insieme e visualizzazione dei dati

codice

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

Visualizza l'effetto

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Testare la rete in base al vettore di input di progettazione

1) Descrizione

Convertire l'indice della classe di destinazione Tc nel vettore T
Utilizza NEWPNN per progettare la tua rete neurale probabilistica
SPREAD ha un valore pari a 1 perché questa è la distanza tipica tra i vettori di input.

2) Testare la rete

codice

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

Visualizza l'effetto

99dcaabffb554913b0d153b807c6b7e2.png

3) Nuova rete di test dati

codice

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

Visualizza l'effetto

03a46217cb4840ddb1d7a4da2b249be4.png

5. La rete neurale probabilistica divide lo spazio di input in tre categorie.

illustrare

Diviso in tre categorie

codice

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

prova l'effetto

Italiano:

6. Riepilogo

La rete neurale probabilistica (PNN) è una rete neurale artificiale utilizzata per la classificazione dei modelli. Si basa sul teorema di Bayes e sul modello della miscela gaussiana e può essere utilizzato per elaborare vari tipi di dati, inclusi dati continui e dati discreti. La PNN è più flessibile delle reti neurali tradizionali quando si tratta di problemi di classificazione e ha una maggiore precisione e capacità di generalizzazione.

Il principio di funzionamento di base della PNN è calcolare la somiglianza tra il set di dati di input e ciascun campione nel set di campioni e classificare i dati di input in base alla somiglianza. La PNN è composta da quattro livelli: livello di input, livello di pattern, livello di competizione e livello di output. I dati di input vengono prima passati allo strato di pattern attraverso lo strato di input, quindi la somiglianza viene calcolata attraverso lo strato di competizione e infine classificata nello strato di output in base alla somiglianza.

In Matlab è possibile utilizzare toolbox pertinenti o programmarsi autonomamente per implementare la classificazione PNN. Innanzitutto, è necessario preparare un set di dati di addestramento e un set di dati di test, quindi addestrare il modello PNN tramite il set di dati di addestramento. Una volta completato l'addestramento, il set di dati del test può essere utilizzato per valutare le prestazioni di classificazione della PNN e fare previsioni.

Nel complesso, la PNN è un potente metodo di classificazione adatto a vari problemi di classificazione. Nelle applicazioni pratiche, è possibile selezionare caratteristiche e parametri del modello appropriati in base a problemi specifici per migliorare le prestazioni di classificazione. Matlab fornisce una vasta gamma di strumenti e supporto funzionale, semplificando l'implementazione e l'applicazione della PNN.

7. Codice sorgente

codice

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