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.
Należy powtórzyć czynności przedstawione na wykładzie, to znaczy wygenerować dane i uruchomić aplikacje
Zapoznać się z opisami funkcji
Wykonać uczenie i ocenić wyniki.
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?
- 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.
- 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
Jest tego sporo. Zacząć można od The Hundred-Page Machine Learning Book by Andriy Burkov.
Interesujący zestaw darmowych książek jest tu: Rózne darmowe podręczniki, zwłaszcza godna polecenia jest książka Abhishek Thakur Approaching (Almost) Any Machine Learning Problem
Niezła jest też dokumentacja MATLABa na stronie What Is Supervised Learning?