Berbagi teknologi

57. Klasifikasi berdasarkan jaringan saraf probabilistik (PNN) (matlab)

2024-07-12

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

1. Pengenalan klasifikasi berdasarkan jaringan saraf probabilistik (PNN)

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:

  1. Lapisan masukan data: Memasukkan data sampel masukan ke dalam model masing-masing.
  2. Lapisan pola:Lakukan pencocokan pola pada setiap data masukan dan hitung skor kemiripannya dengan kategori yang ditentukan.
  3. Lapisan perbandingan pola:Bandingkan skor kemiripan seluruh kategori dan temukan kategori dengan skor tertinggi sebagai hasil klasifikasi akhir.

PNN mempunyai ciri-ciri sebagai berikut:

  1. Efisiensi: PNN memiliki kecepatan pelatihan yang lebih cepat dan menunjukkan akurasi klasifikasi yang lebih tinggi dalam aplikasi praktis.
  2. ketahanan:PNN memiliki ketahanan yang kuat terhadap noise dan outlier serta dapat secara efektif menangani masalah klasifikasi yang kompleks.
  3. Mudah dijelaskan:Hasil PNN dapat diinterpretasikan secara intuitif, memungkinkan pengguna untuk lebih memahami dasar klasifikasi model.

Secara umum PNN merupakan algoritma klasifikasi yang sangat efektif dan cocok untuk masalah klasifikasi di berbagai bidang, seperti pengenalan gambar, klasifikasi teks, dll.

2. Deskripsi klasifikasi dan fungsi utama berdasarkan jaringan saraf probabilistik (PNN)

1) Deskripsi

Ada tiga vektor masukan biner X dan kelas terkaitnya Tc.
Buat jaringan saraf probabilistik untuk mengklasifikasikan vektor-vektor ini dengan benar.

2) Fungsi penting

fungsi newpnn():Merancang jaringan saraf probabilistik

Probabilistic Neural Network (PNN) adalah jaringan basis radial yang cocok untuk masalah klasifikasi.

tata bahasa

net = newpnn(P,T,spread)% menerima dua atau tiga parameter dan mengembalikan jaringan saraf probabilistik baru.

parameter

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.

sim() fungsi: mensimulasikan jaringan saraf

tata bahasa

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

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)

3. Kumpulan dan tampilan data

kode

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

Lihat efek

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Uji jaringan berdasarkan vektor masukan desain

1) Deskripsi

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.

2) Uji jaringan

kode

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

Lihat efek

99dcaabffb554913b0d153b807c6b7e2.png

3) Jaringan pengujian data baru

kode

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

Lihat efek

03a46217cb4840ddb1d7a4da2b249be4.png

5. Jaringan saraf probabilistik membagi ruang masukan menjadi tiga kategori.

menjelaskan

Dibagi menjadi tiga kategori

kode

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

coba efeknya

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Ringkasan

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.

7. Kode sumber

kode

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