Sztuczna Inteligencja
klasyfikator k-nn
Algorytm k-nn
Jest to jeden z najprostszych algorytmów, które mogą służyć do klasyfikacji. Metoda ta pomimo swej prostoty daje zwykle bardzo dokładne wynik klasyfikacji. Jego głównymi wadami jest niska prędkość i konieczność przechowywania często znacznej bazy próbek.
K-nn, aby działał, musi posiadać bazę próbek wzorcowych (X(wz)) zwanych również próbkami uczącymi. Algorytm ten do określenia przynależności próbki do konkretnej klasy potrzebuje również wartości parametru k (k >0, k jest liczbą całkowitą, dodatnią, zwykle nieparzystą).
K-nn wyznacza klasę dostarczonej próbki testowej (x(tst)) biorąc pod uwagę k-te najbliższe próbki z bazy próbek wzorcowych ( X(najbl), x(najbl )⊂X(wz) ) w stosunku do próbki testowej. Następnie algorytm wyszukuje, która klasa dla X(najbl) jest najbardziej popularna i tą klasa zostaje wybrana dla próbki testowej (x(tst)). W przypadku remisu klasyfikator odmawia odpowiedzi (wskazuje błędną klasę).
Głównym problemem jest dobór odpowiedniej wartości parametru k, który należy dobrać eksperymentalnie. W celu ustalenia, które próbki są najbliższe należy ustalić w jaki sposób liczona jest odległość między próbkami. Metoda liczenia odległości zwana jest metryką.
Metryka
Najpopularniejsze metryki służące do określenia odległości między próbkami składającymi się z atrybutów numerycznych to:
• Metryka Manhattan (miejska, taksówkowa) d (v(1), v(2))=
∑
i=1 n
|
vi(1)−vi(2)
|
, gdzie d (v(1), v(2)) to odległość między dwoma próbkami, i to identyfikator (numer) atrybutu, n to liczba atrybutów (wejściowych), vi(1), v(2)i to wartość (deskryptor) i-tego atrybutu dla odpowiednio pierwszej albo drugie próbki.• Metryka euklidesowa
d (v(1), v(2))=
√ ∑i=1n (vi(1)−vi(2))2 .
• Metryka Czebyszewa (maksimum) d (v(1), v(2))=maxi=1. .n
|
vi(1)−vi(2)
|
.• Metryka Minkowskiego (uogólnienie metryki Manhattan, euklidesowej i maksimum) d (v(1), v(2))=(
∑
i=1 n
|
vi(1)−v(2)pi
|
)1
p , gdzie p to parametr metryki Minkowskiego p>0
• Metryka z logarytmem d (v(1), v(2))=
∑
i=1 n
|
log vi(1)−log vi(2 )
|
.Testowanie (walidacja) systemu 1 kontra reszta
W celu przetestowania, czy algorytm k-nn działa prawidłowo dla wybranych parametrów (parametr k i miara) i bazy próbek należy użyć odpowiedniej metodologii. Jedną z nich jest 1 kontra reszta.
Polega ona na tym, że algorytm (obecnie klasyfikator k-nn) jest testowany przez N razy (N to liczba próbek w bazie). Za każdym razem kolejna próbka traktowana jest jako próbka testowa, a pozostałe jako próbki uczące (wzorcowe). Po przeprowadzeniu pojedynczego testu system zwraca odpowiedź (w tym wypadku numer klasy, albo odmowa odpowiedzi) dla podanej próbki testowej. Należy zliczyć jak często (w %) zwrócona odpowiedź jest prawidłowa (w tym wypadku numer zwróconej klasy zgadza się z klasą próbki testowej), liczba ta zwana jest dokładnością klasyfikacji.
Normalizacja wartości atrybutów numerycznych
Polega ona na tym, aby wartości dla każdego osobno atrybutu przekształcić liniowo tak, aby mieściły się dokładnie w przedziale [0; 1]. Podczas normalizacji należy pominąć atrybut wskazujący klasę (ostatni). Można użyć wzoru:
wartosc(znormalizowana)
= wartosc(oryginalna)
−wartosc(minimalnaOdpowiedniegoAtrybutu)
wartosc(maksymalnaOdpowiedniegoAtrybutu)
−wartosc(minimalnaOdpowiedniegoAtrybutu) , w innym zapisie:
v(znormalizowana)s ,i
= vs , i(oryginalna )
−mins '=1. .. N(v(oryginalna)s ,i
) maxs'=1... N(v(oryginalna)s ,i
)−mins '=1... N(v(oryginalna)s ,i
) , gdzie v(znormalizowana)s ,i
to wartość i-tego atrybutu, s-tej próbki po znormalizowaniu; v(oryginalna)s ,i
to wartość i-tego atrybutu, s-tej próbki przed znormalizowaniem; N to liczba próbek;
mins '=1... N(v(oryginalna)s ,i
) to minimalna wartość i-tego atrybutu dla próbek oryginalnych.
Na przykład:
Próbki przed normalizacją Próbki po normalizacji 1 -2 12 a
2 0 11 a 1.5 4 16 b
0 0 0.2 a 1 0.5 0 a 0.5 1 1 b
Należy zauważyć, że ostatni atrybut nie podlegał normalizacji, bo zawiera identyfikator klasy i jest nienumeryczny.
Zadania do wykonania
1. Najpierw proszę wczytać bazę próbek iris. Ostatni atrybut (kolumna) określa klasę próbki.
2. Następnie znormalizować wartości wszystkich atrybutów wejściowych (czyli wszystkich poza ostatnim).
3. Później dla różnych kombinacji wartości parametru k oraz metryk przeprowadzić poniższy eksperyment.
3.1. Wylicz dokładność klasyfikacji algorytmem k-nn korzystając z metody 1 kontra reszta.
4. Na końcu należy przedstawić dokładność klasyfikacji dla wszystkich przeprowadzonych eksperymentów.
W programie kilka metryk powinno być zaimplementowanych.
Wskazówka
Proponuję przetestować na początku k=3 oraz metrykę euklidesową.