Κοινή χρήση τεχνολογίας

57. Ταξινόμηση με βάση πιθανολογικό νευρωνικό δίκτυο (PNN) (matlab)

2024-07-12

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

1. Εισαγωγή στην ταξινόμηση με βάση πιθανολογικό νευρωνικό δίκτυο (PNN)

Το PNN (Πιθανοτικό Νευρωνικό Δίκτυο, πιθανοτικό νευρωνικό δίκτυο) είναι ένα μοντέλο νευρωνικών δικτύων που βασίζεται στη θεωρία πιθανοτήτων, που χρησιμοποιείται κυρίως για την επίλυση προβλημάτων ταξινόμησης. Το PNN προτάθηκε για πρώτη φορά από τους Makovsky και Masikin το 1993. Είναι ένας πολύ αποτελεσματικός αλγόριθμος ταξινόμησης.

Η αρχή του PNN μπορεί να συνοψιστεί συνοπτικά στα ακόλουθα βήματα:

  1. Επίπεδο εισαγωγής δεδομένων: Εισαγάγετε τα δεδομένα του δείγματος εισόδου στο μοντέλο αντίστοιχα.
  2. Επίπεδο μοτίβου:Εκτελέστε αντιστοίχιση μοτίβων σε κάθε δεδομένα εισόδου και υπολογίστε τη βαθμολογία ομοιότητας μεταξύ αυτού και της καθορισμένης κατηγορίας.
  3. Επίπεδο σύγκρισης προτύπων:Συγκρίνετε τις βαθμολογίες ομοιότητας όλων των κατηγοριών και βρείτε την κατηγορία με την υψηλότερη βαθμολογία ως τελικό αποτέλεσμα κατάταξης.

Το PNN έχει τα ακόλουθα χαρακτηριστικά:

  1. Αποδοτικότητα: Το PNN έχει μεγαλύτερη ταχύτητα εκπαίδευσης και δείχνει μεγαλύτερη ακρίβεια ταξινόμησης σε πρακτικές εφαρμογές.
  2. ευρωστία:Το PNN έχει ισχυρή ανθεκτικότητα στο θόρυβο και τα ακραία σημεία και μπορεί να χειριστεί αποτελεσματικά πολύπλοκα προβλήματα ταξινόμησης.
  3. Εύκολο να εξηγηθεί:Τα αποτελέσματα του PNN μπορούν να ερμηνευτούν διαισθητικά, επιτρέποντας στους χρήστες να κατανοήσουν καλύτερα τη βάση ταξινόμησης του μοντέλου.

Γενικά, ο PNN είναι ένας πολύ αποτελεσματικός αλγόριθμος ταξινόμησης και είναι κατάλληλος για προβλήματα ταξινόμησης σε διάφορους τομείς, όπως η αναγνώριση εικόνων, η ταξινόμηση κειμένου κ.λπ.

2. Περιγραφή ταξινόμησης και βασικές συναρτήσεις με βάση πιθανολογικό νευρωνικό δίκτυο (PNN)

1) Περιγραφή

Υπάρχουν τρία δυαδικά διανύσματα εισόδου X και οι σχετικές κλάσεις Tc.
Δημιουργήστε ένα πιθανολογικό νευρωνικό δίκτυο για να ταξινομήσετε σωστά αυτά τα διανύσματα.

2) Σημαντικές λειτουργίες

Λειτουργία newpnn():Σχεδιασμός πιθανοτικού νευρωνικού δικτύου

Το Πιθανολογικό Νευρωνικό Δίκτυο (PNN) είναι ένα δίκτυο ακτινικής βάσης κατάλληλο για προβλήματα ταξινόμησης.

γραμματική

net = newpnn(P,T,spread)% δέχεται δύο ή τρεις παραμέτρους και επιστρέφει ένα νέο πιθανοτικό νευρωνικό δίκτυο.

παράμετρος

Π:r × Q πίνακας διανυσμάτων εισόδου Q

Τ:s × Q πίνακας διανυσμάτων κλάσης στόχου Q

εξάπλωση: Επέκταση των διαδιδόμενων συναρτήσεων ακτινικής βάσης (προεπιλογή = 0,1)

Εάν η διάχυση είναι κοντά στο μηδέν, το δίκτυο λειτουργεί ως ταξινομητής πλησιέστερου γείτονα. Όταν η κλίμακα γίνεται μεγάλη, το σχεδιασμένο δίκτυο λαμβάνει υπόψη πολλά κοντινά διανύσματα σχεδίασης.

sim() συνάρτηση: προσομοίωση νευρωνικού δικτύου

γραμματική

[Y,Xf,Af] = sim(net,X,Xi,Ai,T) 
παράμετρος

net: δίκτυο

X: είσοδος στο δίκτυο

Xi: αρχική συνθήκη καθυστέρησης εισόδου (προεπιλογή = 0)

Ai: συνθήκη καθυστέρησης αρχικής στρώσης (προεπιλογή = 0)

T: στόχος δικτύου (προεπιλογή = 0)

3. Σύνολο δεδομένων και εμφάνιση

κώδικας

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

Προβολή εφέ

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Δοκιμάστε το δίκτυο με βάση το διάνυσμα εισόδου σχεδιασμού

1) Περιγραφή

Μετατρέψτε τον δείκτη κλάσης στόχου Tc σε διάνυσμα T
Χρησιμοποιήστε το NEWPNN για να σχεδιάσετε πιθανοτικό νευρωνικό δίκτυο
Το SPREAD έχει τιμή 1 επειδή αυτή είναι η τυπική απόσταση μεταξύ των διανυσμάτων εισόδου.

2) Δοκιμαστικό δίκτυο

κώδικας

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

Προβολή εφέ

99dcaabffb554913b0d153b807c6b7e2.png

3) Νέο δίκτυο δοκιμών δεδομένων

κώδικας

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

Προβολή εφέ

03a46217cb4840ddb1d7a4da2b249be4.png

5. Το πιθανοτικό νευρωνικό δίκτυο χωρίζει τον χώρο εισόδου σε τρεις κατηγορίες.

εικονογραφώ

Χωρίζεται σε τρεις κατηγορίες

κώδικας

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

εφέ δοκιμής

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Περίληψη

Το πιθανοτικό νευρωνικό δίκτυο (PNN) είναι ένα τεχνητό νευρωνικό δίκτυο που χρησιμοποιείται για την ταξινόμηση προτύπων. Βασίζεται στο θεώρημα του Bayes και στο μοντέλο μείγματος Gauss και μπορεί να χρησιμοποιηθεί για την επεξεργασία διαφόρων τύπων δεδομένων, συμπεριλαμβανομένων συνεχών δεδομένων και διακριτών δεδομένων. Το PNN είναι πιο ευέλικτο από τα παραδοσιακά νευρωνικά δίκτυα όταν ασχολείται με προβλήματα ταξινόμησης και έχει υψηλότερη ακρίβεια και δυνατότητες γενίκευσης.

Η βασική αρχή λειτουργίας του PNN είναι ο υπολογισμός της ομοιότητας μεταξύ του συνόλου δεδομένων εισόδου και κάθε δείγματος στο σύνολο δειγμάτων και η ταξινόμηση των δεδομένων εισόδου με βάση την ομοιότητα. Το PNN αποτελείται από τέσσερα επίπεδα: στρώμα εισόδου, στρώμα προτύπων, στρώμα ανταγωνισμού και στρώμα εξόδου. Τα δεδομένα εισόδου διαβιβάζονται πρώτα στο επίπεδο προτύπων μέσω του επιπέδου εισόδου, στη συνέχεια υπολογίζεται η ομοιότητα μέσω του επιπέδου ανταγωνισμού και τελικά ταξινομούνται στο επίπεδο εξόδου ανάλογα με την ομοιότητα.

Στο Matlab, μπορείτε να χρησιμοποιήσετε σχετικές εργαλειοθήκες ή να προγραμματίσετε μόνοι σας την εφαρμογή της ταξινόμησης PNN. Πρώτα, πρέπει να προετοιμάσετε ένα σύνολο δεδομένων εκπαίδευσης και ένα σύνολο δεδομένων δοκιμής και, στη συνέχεια, να εκπαιδεύσετε το μοντέλο PNN μέσω του συνόλου δεδομένων εκπαίδευσης. Μετά την ολοκλήρωση της εκπαίδευσης, το σύνολο δεδομένων δοκιμής μπορεί να χρησιμοποιηθεί για να αξιολογήσει την απόδοση ταξινόμησης του PNN και να κάνει προβλέψεις.

Συνολικά, το PNN είναι μια ισχυρή μέθοδος ταξινόμησης κατάλληλη για διάφορα προβλήματα ταξινόμησης. Σε πρακτικές εφαρμογές, τα κατάλληλα χαρακτηριστικά και οι παράμετροι του μοντέλου μπορούν να επιλεγούν σύμφωνα με συγκεκριμένα προβλήματα για τη βελτίωση της απόδοσης ταξινόμησης. Το Matlab παρέχει πληθώρα εργαλείων και υποστήριξης λειτουργιών, καθιστώντας ευκολότερη την υλοποίηση και εφαρμογή του PNN.

7. Πηγαίος κώδικας

κώδικας

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