informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
PNN (Probabilistic Neural Network, jaringan saraf probabilistik) adalah model jaringan saraf berdasarkan teori probabilitas, terutama digunakan untuk memecahkan masalah klasifikasi. PNN pertama kali diusulkan oleh Makovsky dan Masikin pada tahun 1993. Ini adalah algoritma klasifikasi yang sangat efektif.
Prinsip PNN dapat diringkas secara singkat sebagai langkah-langkah berikut:
PNN mempunyai ciri-ciri sebagai berikut:
Secara umum PNN merupakan algoritma klasifikasi yang sangat efektif dan cocok untuk masalah klasifikasi di berbagai bidang, seperti pengenalan gambar, klasifikasi teks, dll.
Ada tiga vektor masukan biner X dan kelas terkaitnya Tc.
Buat jaringan saraf probabilistik untuk mengklasifikasikan vektor-vektor ini dengan benar.
Probabilistic Neural Network (PNN) adalah jaringan basis radial yang cocok untuk masalah klasifikasi.
net = newpnn(P,T,spread)% menerima dua atau tiga parameter dan mengembalikan jaringan saraf probabilistik baru.
P:r × Q matriks vektor masukan Q
T:s × Q matriks vektor kelas target Q
menyebar: Perpanjangan fungsi basis radial yang disebarkan (default = 0,1)
Jika difusi mendekati nol, jaringan bertindak sebagai pengklasifikasi tetangga terdekat. Ketika penskalaan menjadi besar, jaringan yang dirancang mempertimbangkan beberapa vektor desain terdekat.
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
bersih: jaringan
X: masukan ke jaringan
Xi: kondisi penundaan input awal (default = 0)
Ai: kondisi penundaan lapisan awal (default = 0)
T: target jaringan (default = 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,:)')
Ubah indeks kelas target Tc menjadi vektor T
Gunakan NEWPNN untuk merancang jaringan saraf probabilistik
SPREAD mempunyai nilai 1 karena ini adalah jarak khas antara vektor masukan.
- 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)')
Dibagi menjadi tiga kategori
- 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)')
Jaringan saraf probabilistik (PNN) adalah jaringan saraf tiruan yang digunakan untuk klasifikasi pola. Hal ini didasarkan pada teorema Bayes dan model campuran Gaussian dan dapat digunakan untuk memproses berbagai jenis data, termasuk data kontinu dan data diskrit. PNN lebih fleksibel dibandingkan jaringan saraf tradisional ketika menangani masalah klasifikasi, serta memiliki akurasi dan kemampuan generalisasi yang lebih tinggi.
Prinsip kerja dasar PNN adalah menghitung kemiripan antara kumpulan data masukan dengan setiap sampel dalam kumpulan sampel, dan mengklasifikasikan data masukan berdasarkan kesamaannya. PNN terdiri dari empat lapisan: lapisan masukan, lapisan pola, lapisan persaingan, dan lapisan keluaran. Data masukan terlebih dahulu diteruskan ke lapisan pola melalui lapisan masukan, kemudian dihitung kesamaannya melalui lapisan kompetisi, dan terakhir diklasifikasikan ke dalam lapisan keluaran menurut kesamaannya.
Di Matlab, Anda dapat menggunakan kotak peralatan atau program yang relevan untuk mengimplementasikan klasifikasi PNN. Pertama, Anda perlu menyiapkan kumpulan data pelatihan dan kumpulan data pengujian, lalu melatih model PNN melalui kumpulan data pelatihan. Setelah pelatihan selesai, kumpulan data pengujian dapat digunakan untuk mengevaluasi kinerja klasifikasi PNN dan membuat prediksi.
Secara keseluruhan, PNN adalah metode klasifikasi ampuh yang cocok untuk berbagai masalah klasifikasi. Dalam aplikasi praktis, fitur dan parameter model yang sesuai dapat dipilih berdasarkan masalah spesifik untuk meningkatkan kinerja klasifikasi. Matlab menyediakan segudang alat dan dukungan fungsi, sehingga memudahkan implementasi dan penerapan PNN.
- %% 基于概率神经网络(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)')
-
-
-