2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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:
PNN:llä on seuraavat ominaisuudet:
Yleisesti ottaen PNN on erittäin tehokas luokittelualgoritmi ja sopii eri alojen luokitteluongelmiin, kuten kuvantunnistukseen, tekstin luokitteluun jne.
Binäärisyötevektoria X ja niihin liittyvät luokkat Tc on kolme.
Luo todennäköisyyspohjainen hermoverkko näiden vektorien luokittelemiseksi oikein.
Probabilistic Neural Network (PNN) on säteittäinen perusverkko, joka soveltuu luokitteluongelmiin.
net = newpnn(P,T,spread)% hyväksyy kaksi tai kolme parametria ja palauttaa uuden todennäköisyyspohjaisen hermoverkon.
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.
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
net: verkko
X: tulo verkkoon
Xi: tuloviiveen alkutila (oletus = 0)
Ai: alkukerroksen viivetila (oletus = 0)
T: verkon kohde (oletus = 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,:)')
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.
- 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)')
Jaettu kolmeen kategoriaan
- 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)')
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.
- %% 基于概率神经网络(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)')
-
-
-