Advertisement
RybaSG

lda

May 29th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.70 KB | None | 0 0
  1. clear all;
  2. close all;
  3. clc;
  4.  
  5. % Wczytaj plik z wspó³rzêdnymi wzorców
  6. file_dta = importdata('d22.dta', ' ');
  7. % Wczytaj plik z {-1, 1} wyznaczaj¹cymi przynale¿noœæ poszczególnych
  8. % wzorców do danej klasy
  9. file_inf = importdata('d22.inf', ' ');
  10.  
  11. % X1 to pierwsza kolumna pliku
  12. X1 = file_dta(:, 1);
  13. % X2 to druga kolumna pliku
  14. X2 = file_dta(:, 2);
  15. % X0 to kolumna z 1 i -1 która póŸniej bêdzie oznacza³a która klasa bêdzie
  16. % "obracana"
  17. X0 = file_inf;
  18.  
  19. % Wygeneruj wektory indeksów przynale¿noœci danych punktów do jednej z
  20. % dwóch klas
  21. indexes_class_1 = find(X0 == 1);
  22. indexes_class_2 = find(X0 == -1);
  23.  
  24. % Dla ka¿dego punktu ustaw odpowiedni¹ macierz koloru
  25. colors = zeros(length(X1), 3);
  26. colors(indexes_class_1, :) = repmat([1 0 0], length(indexes_class_1), 1);
  27. colors(indexes_class_2, :) = repmat([0 0 1], length(indexes_class_2), 1);
  28.  
  29. % Wzorce do klasyfikacji
  30. x1 = [0 0];
  31. x2 = [-10 -10];
  32. x3 = [10 10];
  33. x4 = [10 0];
  34. x5 = [0 10];
  35.  
  36. % Punkty jednej z klas musz¹ ju¿ byæ odpowiednio obrócone
  37. % (przetransformowane) aby by³o mo¿liwe spe³nienie kryterium (omega)T y > 0
  38. Y1 = X1 .* X0;
  39. Y2 = X2 .* X0;
  40. Y0 = X0;
  41.  
  42.  
  43.  
  44. % Perception algorithm
  45.  
  46. % Wartoœæ pocz¹tkowa ro
  47. ro_init = 0.01;
  48. ro = ro_init;
  49.  
  50. % Wykres z punktami ucz¹cymi przyporz¹dkowanymi do konkretnych klas
  51. figure('Name', 'Algorytm Perceptrona - uczenie');
  52. scatter(X1, X2, 12, colors);
  53. title('Algorytm Perceptrona - uczenie');
  54.  
  55. % Losowanie wartoœci pocz¹tkowej omega
  56. omega = rand(1,3);
  57.  
  58. % Wyœwietlenie wylosowanej prostej o parametrach omega
  59. hold on;
  60. plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'g');
  61. hold off;
  62.  
  63. % Obliczenia algorytmu Perceptrona
  64. omega_y = omega * [Y1 Y2 Y0]';
  65. missclasified = find(omega_y < 0);
  66. while length(missclasified) > 0
  67. yi = [Y1 Y2 Y0];
  68. yi = yi(missclasified, :);
  69.  
  70. if length(missclasified) == 1
  71. ro = norm(omega_y(missclasified)) ./ sum(yi .* yi) + ro_init;
  72. end
  73.  
  74. omega = omega + ro .* sum(yi);
  75.  
  76. omega_y = omega * [Y1 Y2 Y0]';
  77. missclasified = find(omega_y < 0);
  78. end
  79.  
  80. % Wyœwietlenie prostej rozdzielaj¹cej klasy po wyliczeniu przez algorytm
  81. % Perceptrona
  82. hold on;
  83. plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
  84. hold off;
  85.  
  86. % Generacja legendy wykresu
  87. hold on;
  88. legend({'Punkty nale¿¹ce do poszczególnych klas', 'Wylosowana prosta', 'Prosta po wyliczeniu przez algorytm'});
  89. hold off;
  90.  
  91. % Klasyfikacja punktów wejœciowych wed³ug prostej wyliczonej z algorytmu
  92. x1_perceptron = omega * [x1 1]';
  93. x2_perceptron = omega * [x2 1]';
  94. x3_perceptron = omega * [x3 1]';
  95. x4_perceptron = omega * [x4 1]';
  96. x5_perceptron = omega * [x5 1]';
  97.  
  98. % Wyœwietlenie wykresu z punktami wejœciowymi odpowiednio zakolorowanymi
  99. % pod k¹tem w³aœciwej klasy oraz wykresu prostej wyliczonej z algorytmu
  100. figure('Name', 'Algorytm Perceptrona - klasyfikacja');
  101. hold on;
  102. plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
  103. scatter(x1(1), x1(2), 24, [(x1_perceptron > 0) 0 (x1_perceptron < 0)]);
  104. scatter(x2(1), x2(2), 24, [(x2_perceptron > 0) 0 (x2_perceptron < 0)]);
  105. scatter(x3(1), x3(2), 24, [(x3_perceptron > 0) 0 (x3_perceptron < 0)]);
  106. scatter(x4(1), x4(2), 24, [(x4_perceptron > 0) 0 (x4_perceptron < 0)]);
  107. scatter(x5(1), x5(2), 24, [(x5_perceptron > 0) 0 (x5_perceptron < 0)]);
  108. legend({'Prosta po wyliczeniu przez algorytm', 'Punkty nale¿¹ce do poszczególnych klas'});
  109. title('Algorytm Perceptrona - klasyfikacja');
  110. hold off;
  111.  
  112.  
  113.  
  114.  
  115.  
  116. % Relaxation algorithm
  117.  
  118. % Wartoœæ pocz¹tkowa ro i b
  119. ro_init = 0.01;
  120. ro = ro_init;
  121. b = 1;
  122.  
  123. % Wykres z punktami ucz¹cymi przyporz¹dkowanymi do konkretnych klas
  124. figure('Name', 'Algorytm relaksacyjny - uczenie');
  125. scatter(X1, X2, 12, colors);
  126. title('Algorytm relaksacyjny - uczenie');
  127.  
  128. % Losowanie wartoœci pocz¹tkowej omega
  129. omega = rand(1,3);
  130.  
  131. % Wyœwietlenie wylosowanej prostej o parametrach omega
  132. hold on;
  133. plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'g');
  134. hold off;
  135.  
  136. omega_y = omega * [Y1 Y2 Y0]';
  137. missclasified = find(omega_y <= (b - 1e-12));
  138. yi = [Y1 Y2 Y0];
  139. while length(missclasified) > 0
  140. suma = 0;
  141. for i=missclasified
  142. suma = suma + (b - omega_y(i)) ./ (norm(yi(i, :)).^2) .* yi(i, :);
  143. end
  144.  
  145. omega = omega + ro .* suma;
  146.  
  147. omega_y = omega * [Y1 Y2 Y0]';
  148. missclasified = find(omega_y <= (b - 1e-12));
  149. end
  150.  
  151. % Wyœwietlenie prostej rozdzielaj¹cej klasy po wyliczeniu przez algorytm
  152. % relaksacyjny
  153. hold on;
  154. plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
  155. hold off;
  156.  
  157. % Generacja legendy wykresu
  158. hold on;
  159. legend({'Punkty nale¿¹ce do poszczególnych klas', 'Wylosowana prosta', 'Prosta po wyliczeniu przez algorytm'});
  160. hold off;
  161.  
  162. % Klasyfikacja punktów wejœciowych wed³ug prostej wyliczonej z algorytmu
  163. x1_relaxation = omega * [x1 1]';
  164. x2_relaxation = omega * [x2 1]';
  165. x3_relaxation = omega * [x3 1]';
  166. x4_relaxation = omega * [x4 1]';
  167. x5_relaxation = omega * [x5 1]';
  168.  
  169. % Wyœwietlenie wykresu z punktami wejœciowymi odpowiednio zakolorowanymi
  170. % pod k¹tem w³aœciwej klasy oraz wykresu prostej wyliczonej z algorytmu
  171. figure('Name', 'Algorytm relaksacyjny - klasyfikacja');
  172. hold on;
  173. plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
  174. scatter(x1(1), x1(2), 24, [(x1_relaxation > 0) 0 (x1_relaxation < 0)]);
  175. scatter(x2(1), x2(2), 24, [(x2_relaxation > 0) 0 (x2_relaxation < 0)]);
  176. scatter(x3(1), x3(2), 24, [(x3_relaxation > 0) 0 (x3_relaxation < 0)]);
  177. scatter(x4(1), x4(2), 24, [(x4_relaxation > 0) 0 (x4_relaxation < 0)]);
  178. scatter(x5(1), x5(2), 24, [(x5_relaxation > 0) 0 (x5_relaxation < 0)]);
  179. legend({'Prosta po wyliczeniu przez algorytm', 'Punkty nale¿¹ce do poszczególnych klas'});
  180. title('Algorytm relaksacyjny - klasyfikacja');
  181. hold off;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement