13. Uczenie maszynowe

Dzisiejsze zadanie nie do końca jest proste. Będziemy prosili MATLABa, żeby stworzył na podstawie dostarczonych danych funkcję, która potrafi rozróżnić dwie sytuacje — rozpoznać dane należące do dwu kategorii.

  1. Należy powtórzyć czynności przedstawione na wykładzie, to znaczy wygenerować dane i uruchomić aplikacje

    Zapoznać się z opisami funkcji

  2. Wykonać uczenie i ocenić wyniki.

  3. Spróbować na podstawie informacji z internetu opisać jedną (lub dwie) metody klasyfikacji.

Przygotowanie danych (wersja I)

Dane

Wartości 1, 2 należą do klasy „A”

Wartości 3, 4 — do klasy „B”

Generujemy dane losowe za pomocą funkcji randi()

%rng('default')

N będzie to liczba danych sprawdzimy, czy jakość klasyfikacji od niej zależy

N = 100;
wartosc = randi(4,N,1);
histogram(wartosc)

Definiujemy klasy: wartość większa od 2 — “B”

mniejsza od 3 — “A”

klasa(wartosc>2) = "B";
klasa(wartosc<3) = "A";

Robimy tablicę o dwu kolumnach “wartosc” , “klasa”

dane=table(wartosc, klasa', VariableNames={'wartosc','klasa'});
podzial = cvpartition(dane.klasa, 'Holdout', 0.2);
indeksy = training(podzial);
DaneUczace = dane(indeksy,:);
DaneTestowe = dane(~indeksy,:); 
%histogram(DaneTestowe.wartosc)
%hold on
%histogram(DaneUczace.wartosc)

Aplikacja Classification Learner App

Znajduje się w zakładce APPS głównego okna MATLABa w dziale MACHINE LEARNING AND DEEP LEARNING

Przygotowanie danych (wersja II)

W tym przypadku klasy nie są całkowicie rozdzielone

Dane

Wartości 1, 2 należa do klasy „A”

Wartości 4, 5 — do klasy „B”

Generujemy dane losoweza pomocą funkcji randi()

%rng('default')

N będzie to liczba danychm sperawdzimy, czy jakość klasyfikacji od niej zależy

N = 100;
wartosc = randi(5,N,1);
histogram(wartosc)

Definiujemy klasy: wartosć większa od 3 — “B”

mniejsza od 3 — “A”

równa 3 — losujemy

klasa(wartosc>3) = "B";
klasa(wartosc<3) = "A";
for i = 1:N
    if (wartosc == 3)
        klasa(i) = losuj();
    end
end

Robimy tanlicę o dwu kolumnach “wartosc” , “klasa”

dane=table(wartosc, klasa', VariableNames={'wartosc','klasa'});
podzial = cvpartition(dane.klasa, 'Holdout', 0.2);
indeksy = training(podzial);
DaneUczace = dane(indeksy,:);
DaneTestowe = dane(~indeksy,:); 
%histogram(DaneTestowe.wartosc)
%hold on
%histogram(DaneUczace.wartosc)
function a = losuj()
x = randn(1);
if x>=0
    a = "B";
else
    a = "A";
end
end

Uwaga: W tym przypadku uczenie będzie znacznie wolniejsze… Należy raczej wybrać „metody najszybsze do wytrenowania”.

Co więcej?

  1. Chętni mogą skonstruować dane do przypadku dwuwymiarowego (losowe punkty z dwu okręgów lub prostokątów) nie zachodzących (lub zachodzących) na siebie.
  2. W przypadku obiektów „zachodzących na siebie” można dodać trzeci wymiar („wysokość”) i tak dobrać wartości tego parametru aby obiekty wyróżniały się: A jest „niski”, B jest „wysoki” i sprawdzić czy pozwala to uzyskać 100% rozpoznawalność…

Literatura

Poprzedni
Następny