Teknologian jakaminen

57. Todennäköisyyspohjaiseen hermoverkkoon (PNN) perustuva luokitus (matlab)

2024-07-12

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

1. Johdatus todennäköisyyspohjaiseen hermoverkkoon (PNN) perustuvaan luokitukseen

PNN (Probabilistic Neural Network, probabilistic neuro network) on todennäköisyysteoriaan perustuva hermoverkkomalli, jota käytetään pääasiassa luokitteluongelmien ratkaisemiseen. Makovsky ja Masikin ehdottivat PNN:ää ensimmäisen kerran vuonna 1993. Se on erittäin tehokas luokitusalgoritmi.

PNN:n periaate voidaan tiivistää lyhyesti seuraaviin vaiheisiin:

  1. Tietojen syöttökerros: Syötä näytetiedot malliin vastaavasti.
  2. Kuviokerros:Suorita kuvioiden vastaavuus jokaiselle syötedatalle ja laske samankaltaisuuspisteet sen ja määritetyn luokan välillä.
  3. Kuvioiden vertailutaso:Vertaa kaikkien luokkien samankaltaisuuspisteitä ja löydä korkeimman pistemäärän saanut luokka lopulliseksi luokitustulokseksi.

PNN:llä on seuraavat ominaisuudet:

  1. Tehokkuus: PNN:llä on nopeampi harjoitusnopeus ja se osoittaa korkeamman luokitustarkkuuden käytännön sovelluksissa.
  2. kestävyys:PNN:llä on vahva kestävyys kohinaa ja poikkeavuuksia vastaan, ja se pystyy käsittelemään tehokkaasti monimutkaisia ​​luokitusongelmia.
  3. Helppo selittää:PNN:n tuloksia voidaan tulkita intuitiivisesti, jolloin käyttäjät voivat ymmärtää paremmin mallin luokitteluperusteita.

Yleisesti ottaen PNN on erittäin tehokas luokittelualgoritmi ja sopii eri alojen luokitteluongelmiin, kuten kuvantunnistukseen, tekstin luokitteluun jne.

2. Luokittelukuvaus ja avaintoiminnot, jotka perustuvat todennäköisyyspohjaiseen hermoverkkoon (PNN)

1) Kuvaus

Binäärisyötevektoria X ja niihin liittyvät luokkat Tc on kolme.
Luo todennäköisyyspohjainen hermoverkko näiden vektorien luokittelemiseksi oikein.

2) Tärkeitä toimintoja

newpnn()-funktio:Todennäköisyyspohjaisen hermoverkon suunnittelu

Probabilistic Neural Network (PNN) on säteittäinen perusverkko, joka soveltuu luokitteluongelmiin.

kielioppi

net = newpnn(P,T,spread)% hyväksyy kaksi tai kolme parametria ja palauttaa uuden todennäköisyyspohjaisen hermoverkon.

parametri

P:r × Q Q-tulovektorien matriisi

T:Q-kohdeluokan vektorien s × Q matriisi

levitän: Etenevien säteittäisten kantafunktioiden laajennus (oletus = 0,1)

Jos diffuusio on lähellä nollaa, verkko toimii lähimmän naapurin luokittelijana. Kun skaalaus tulee suureksi, suunniteltu verkko ottaa huomioon useita lähellä olevia suunnitteluvektoreita.

sim()-funktio: simuloi hermoverkkoa

kielioppi

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

net: verkko

X: tulo verkkoon

Xi: tuloviiveen alkutila (oletus = 0)

Ai: alkukerroksen viivetila (oletus = 0)

T: verkon kohde (oletus = 0)

3. Tietojoukko ja näyttö

koodi

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

Näytä tehoste

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Testaa verkko suunnittelutulovektorin perusteella

1) Kuvaus

Muunna kohdeluokkaindeksi Tc vektoriksi T
Käytä NEWPNN:ää todennäköisyyspohjaisen hermoverkon suunnitteluun
SPREAD:n arvo on 1, koska tämä on tyypillinen tulovektorien välinen etäisyys.

2) Testaa verkko

koodi

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

Näytä tehoste

99dcaabffb554913b0d153b807c6b7e2.png

3) Uusi datatestausverkko

koodi

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

Näytä tehoste

03a46217cb4840ddb1d7a4da2b249be4.png

5. Todennäköisyyspohjainen hermoverkko jakaa syöttöavaruuden kolmeen kategoriaan.

havainnollistaa

Jaettu kolmeen kategoriaan

koodi

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

kokeile vaikutusta

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Yhteenveto

Probabilistinen hermoverkko (PNN) on keinotekoinen hermoverkko, jota käytetään kuvioiden luokitteluun. Se perustuu Bayesin lauseeseen ja Gaussin sekoitusmalliin ja sitä voidaan käyttää erityyppisten tietojen, mukaan lukien jatkuvan datan ja diskreetin datan, käsittelyyn. PNN on joustavampi kuin perinteiset neuroverkot luokitteluongelmissa, ja sillä on suurempi tarkkuus ja yleistyskyky.

PNN:n perustoimintaperiaate on laskea syöttötietojoukon ja kunkin näytejoukon näytteen samankaltaisuus ja luokitella syöttötiedot samankaltaisuuden perusteella. PNN koostuu neljästä kerroksesta: syöttökerros, kuviokerros, kilpailukerros ja tuloskerros. Syöttötiedot välitetään ensin kuviokerrokseen syöttökerroksen kautta, sitten samankaltaisuus lasketaan kilpailukerroksen kautta ja lopuksi luokitellaan tuloskerrokseen samankaltaisuuden mukaan.

Matlabissa voit käyttää asianmukaisia ​​työkalupakkeja tai ohjelmoida itse PNN-luokituksen toteuttamiseen. Ensin sinun on valmisteltava harjoitustietojoukko ja testitietojoukko ja sitten harjoitettava PNN-malli harjoitustietojoukon kautta. Kun koulutus on suoritettu, testitietojoukkoa voidaan käyttää arvioimaan PNN:n luokittelukykyä ja tekemään ennusteita.

Kaiken kaikkiaan PNN on tehokas luokittelumenetelmä, joka sopii erilaisiin luokitusongelmiin. Käytännön sovelluksissa sopivat ominaisuudet ja malliparametrit voidaan valita tiettyjen ongelmien mukaan luokituksen suorituskyvyn parantamiseksi. Matlab tarjoaa runsaasti työkaluja ja toimintotukea, mikä helpottaa PNN:n käyttöönottoa ja soveltamista.

7. Lähdekoodi

koodi

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