Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all;
- close all;
- clc;
- % Wczytaj plik z wspó³rzêdnymi wzorców
- file_dta = importdata('d22.dta', ' ');
- % Wczytaj plik z {-1, 1} wyznaczaj¹cymi przynale¿noæ poszczególnych
- % wzorców do danej klasy
- file_inf = importdata('d22.inf', ' ');
- % X1 to pierwsza kolumna pliku
- X1 = file_dta(:, 1);
- % X2 to druga kolumna pliku
- X2 = file_dta(:, 2);
- % X0 to kolumna z 1 i -1 która póniej bêdzie oznacza³a która klasa bêdzie
- % "obracana"
- X0 = file_inf;
- % Wygeneruj wektory indeksów przynale¿noci danych punktów do jednej z
- % dwóch klas
- indexes_class_1 = find(X0 == 1);
- indexes_class_2 = find(X0 == -1);
- % Dla ka¿dego punktu ustaw odpowiedni¹ macierz koloru
- colors = zeros(length(X1), 3);
- colors(indexes_class_1, :) = repmat([1 0 0], length(indexes_class_1), 1);
- colors(indexes_class_2, :) = repmat([0 0 1], length(indexes_class_2), 1);
- % Wzorce do klasyfikacji
- x1 = [0 0];
- x2 = [-10 -10];
- x3 = [10 10];
- x4 = [10 0];
- x5 = [0 10];
- % Punkty jednej z klas musz¹ ju¿ byæ odpowiednio obrócone
- % (przetransformowane) aby by³o mo¿liwe spe³nienie kryterium (omega)T y > 0
- Y1 = X1 .* X0;
- Y2 = X2 .* X0;
- Y0 = X0;
- % Perception algorithm
- % Wartoæ pocz¹tkowa ro
- ro_init = 0.01;
- ro = ro_init;
- % Wykres z punktami ucz¹cymi przyporz¹dkowanymi do konkretnych klas
- figure('Name', 'Algorytm Perceptrona - uczenie');
- scatter(X1, X2, 12, colors);
- title('Algorytm Perceptrona - uczenie');
- % Losowanie wartoci pocz¹tkowej omega
- omega = rand(1,3);
- % Wywietlenie wylosowanej prostej o parametrach omega
- hold on;
- plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'g');
- hold off;
- % Obliczenia algorytmu Perceptrona
- omega_y = omega * [Y1 Y2 Y0]';
- missclasified = find(omega_y < 0);
- while length(missclasified) > 0
- yi = [Y1 Y2 Y0];
- yi = yi(missclasified, :);
- if length(missclasified) == 1
- ro = norm(omega_y(missclasified)) ./ sum(yi .* yi) + ro_init;
- end
- omega = omega + ro .* sum(yi);
- omega_y = omega * [Y1 Y2 Y0]';
- missclasified = find(omega_y < 0);
- end
- % Wywietlenie prostej rozdzielaj¹cej klasy po wyliczeniu przez algorytm
- % Perceptrona
- hold on;
- plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
- hold off;
- % Generacja legendy wykresu
- hold on;
- legend({'Punkty nale¿¹ce do poszczególnych klas', 'Wylosowana prosta', 'Prosta po wyliczeniu przez algorytm'});
- hold off;
- % Klasyfikacja punktów wejciowych wed³ug prostej wyliczonej z algorytmu
- x1_perceptron = omega * [x1 1]';
- x2_perceptron = omega * [x2 1]';
- x3_perceptron = omega * [x3 1]';
- x4_perceptron = omega * [x4 1]';
- x5_perceptron = omega * [x5 1]';
- % Wywietlenie wykresu z punktami wejciowymi odpowiednio zakolorowanymi
- % pod k¹tem w³aciwej klasy oraz wykresu prostej wyliczonej z algorytmu
- figure('Name', 'Algorytm Perceptrona - klasyfikacja');
- hold on;
- plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
- scatter(x1(1), x1(2), 24, [(x1_perceptron > 0) 0 (x1_perceptron < 0)]);
- scatter(x2(1), x2(2), 24, [(x2_perceptron > 0) 0 (x2_perceptron < 0)]);
- scatter(x3(1), x3(2), 24, [(x3_perceptron > 0) 0 (x3_perceptron < 0)]);
- scatter(x4(1), x4(2), 24, [(x4_perceptron > 0) 0 (x4_perceptron < 0)]);
- scatter(x5(1), x5(2), 24, [(x5_perceptron > 0) 0 (x5_perceptron < 0)]);
- legend({'Prosta po wyliczeniu przez algorytm', 'Punkty nale¿¹ce do poszczególnych klas'});
- title('Algorytm Perceptrona - klasyfikacja');
- hold off;
- % Relaxation algorithm
- % Wartoæ pocz¹tkowa ro i b
- ro_init = 0.01;
- ro = ro_init;
- b = 1;
- % Wykres z punktami ucz¹cymi przyporz¹dkowanymi do konkretnych klas
- figure('Name', 'Algorytm relaksacyjny - uczenie');
- scatter(X1, X2, 12, colors);
- title('Algorytm relaksacyjny - uczenie');
- % Losowanie wartoci pocz¹tkowej omega
- omega = rand(1,3);
- % Wywietlenie wylosowanej prostej o parametrach omega
- hold on;
- plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'g');
- hold off;
- omega_y = omega * [Y1 Y2 Y0]';
- missclasified = find(omega_y <= (b - 1e-12));
- yi = [Y1 Y2 Y0];
- while length(missclasified) > 0
- suma = 0;
- for i=missclasified
- suma = suma + (b - omega_y(i)) ./ (norm(yi(i, :)).^2) .* yi(i, :);
- end
- omega = omega + ro .* suma;
- omega_y = omega * [Y1 Y2 Y0]';
- missclasified = find(omega_y <= (b - 1e-12));
- end
- % Wywietlenie prostej rozdzielaj¹cej klasy po wyliczeniu przez algorytm
- % relaksacyjny
- hold on;
- plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
- hold off;
- % Generacja legendy wykresu
- hold on;
- legend({'Punkty nale¿¹ce do poszczególnych klas', 'Wylosowana prosta', 'Prosta po wyliczeniu przez algorytm'});
- hold off;
- % Klasyfikacja punktów wejciowych wed³ug prostej wyliczonej z algorytmu
- x1_relaxation = omega * [x1 1]';
- x2_relaxation = omega * [x2 1]';
- x3_relaxation = omega * [x3 1]';
- x4_relaxation = omega * [x4 1]';
- x5_relaxation = omega * [x5 1]';
- % Wywietlenie wykresu z punktami wejciowymi odpowiednio zakolorowanymi
- % pod k¹tem w³aciwej klasy oraz wykresu prostej wyliczonej z algorytmu
- figure('Name', 'Algorytm relaksacyjny - klasyfikacja');
- hold on;
- plot(X1, -omega(1) / omega(2) .* X1 - omega(3) / omega(2), 'black');
- scatter(x1(1), x1(2), 24, [(x1_relaxation > 0) 0 (x1_relaxation < 0)]);
- scatter(x2(1), x2(2), 24, [(x2_relaxation > 0) 0 (x2_relaxation < 0)]);
- scatter(x3(1), x3(2), 24, [(x3_relaxation > 0) 0 (x3_relaxation < 0)]);
- scatter(x4(1), x4(2), 24, [(x4_relaxation > 0) 0 (x4_relaxation < 0)]);
- scatter(x5(1), x5(2), 24, [(x5_relaxation > 0) 0 (x5_relaxation < 0)]);
- legend({'Prosta po wyliczeniu przez algorytm', 'Punkty nale¿¹ce do poszczególnych klas'});
- title('Algorytm relaksacyjny - klasyfikacja');
- hold off;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement