MATLAB - UCZENIE MASZYNOWE #4 - RYSUNKI

W poprzednich wpisach wybraliśmy się na maszynową wycieczkę teoretyczno – matematyczną. Czas chwilę odpocząć i zająć się czymś mniej skomplikowanym, tym bardziej, że zbliża się okres świąteczny. Dzisiaj dwa słowa o wizualizacji efektów automatycznej klasyfikacji.

Zazwyczaj mamy do czynienia z sytuacją, w której kilka zmiennych opisuje różne cechy obiektu (np. długość, kolor, temperatura) oraz jedną zmienną, która reprezentuje klasę/kategorie/klaster do którego dany element należy (np. długi, krótki lub jasny, ciemny, itp.). Zadanie polega na tym aby zobrazować na rysunku cechy elementów z podziałem na klasy.

Rozpatrzmy więc sztucznie wygenerowany zbiór danych, który posiada 300 elementów (wierszy) oraz trzy kolumny:

  • Cecha nr 1
  • Cecha nr 2
  • Klasa – przy czym dany element może należeć do jednej z trzech klas oznaczonych numerycznie {1,2,3}

Innymi słowy w zależności od wartości cechy 1 i cechy 2 dany element należy do klastra 1 lub 2 lub 3. Dane można pobrać TUTAJ.

Rysunek plot i scatter

Do narysowania rysunku z podziałem na klasy elementów można użyć klasycznej funkcji plot z odpowiednimi atrybutami.

load dane

figure; 
symbole = {'db','xr','og'}; 
for i = 1 : 3
    indx = find(dane(:,3)==i);
    plot(dane(indx,1),dane(indx,2),symbole{i});
%     scatter(dane(indx,1),dane(indx,2));
    hold on
end
xlabel('Cecha 1'); ylabel('Cecha 2'); grid on

Jak jednak widać występuje tu kilka problemów:

  • Trzeba ręcznie zdefiniować symbole i kolory symboli, którymi rozróżniane są klastry – przy dużej liczbie klastrów będzie nastręczać to trudności
  • Program wymaga pętli i „ręcznego” znajdywania elementów przynależnych do danego klastra, który jest rysowany w danym obiegu pętli.

W ten sam sposób w pętli można zastosować funkcję scatter, która jest o tyle prostsza w użyciu, że nie wymaga definiowania symboli i ich kolorów gdyż z definicji rysuje takie symbole. Dalej jednak jest tutaj wymagana pętla.

Rysunek gscatter

Rozwiązaniem tego problemu jest użycie funkcji gscatter, która jest przeznaczona do obrazowania danych po klasyfikacji. Jako trzeci argument przyjmuje ona zmienną zawierającą informację o przynależności danego elementu do klastra, dzięki czemu automatycznie rysuje klastry bez potrzeby używania pętli. Otrzymujemy ten sam efekt co w poprzednim programie, ale zamiast 8 linijek programu mamy jedną:

gscatter(dane(:,1), dane(:,2), dane(:,3), 'brg', 'dxo',[],[],'Cecha 1','Cecha 2');
Rysunek binscatter

Binscatter to nic innego jak mapa częstości występowania cech o określonych wartościach i jej efekt można porównać do działania funkcji histogram. Tu jednak poruszamy się w dwóch wymiarach (dwie cechy). Funkcja nie pozwala co prawda na rozróżnienie elementów z różnych klastrów, ale jest przydatna na etapie analizy danych pod kątem ich klasyfikacji. Dzięki analizie częstości widzimy wyraźnie trzy skupiska danych – może być to przesłanka do podjęcia decyzji o liczbie klastrów podczas automatycznej klasyfikacji.

figure; 
binscatter(dane(:,1),dane(:,2),10)
xlabel('Cecha 1'); ylabel('Cecha 2'); 
gscatter ponownie i k-Means

Odpowiednie połączenie wyników automatycznej klasyfikacji z użyciem funkcji gscatter pozwala narysować również obszary reprezentujące dane klastry. Poniżej znajduje się program, który to umożliwia.

[indx,klasa] = kmeans(dane(:,1:2),3);

x1 = min(dane(:,1)):0.01:max(dane(:,1));
x2 = min(dane(:,2)):0.01:max(dane(:,2));
[x1s,x2s] = meshgrid(x1,x2);
XGrid = [x1s(:),x2s(:)]; 

indxKlasa = kmeans(XGrid,3,'MaxIter',1,'Start',klasa);

figure;
gscatter(XGrid(:,1),XGrid(:,2),indxKlasa,'rgb',[],[],'off');
hold on;
gscatter(dane(:,1), dane(:,2), dane(:,3), 'brg', 'dxo',[],[],'Cecha 1','Cecha 2')

We wpisie zostały zaprezentowane podstawowe możliwości funkcji rysujących wykresy bąbelkowe. Posiadają one jednak szereg atrybutów za pomocą, których można kontrolować niemal każdy aspekt rysunku. Zachęcam Was do eksperymentowania. Wesołych Świąt 🙂

(Visited 156 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *