Kolejnym z zadań uczenia maszynowego jest klasteryzacja lub inaczej grupowanie. Polega ona na przypisywaniu podobnych instancji do tej samej klasy. Dane do zadania klasyfikacji pochodzą z nieetykietowanych zbiorów uczących, gdzie brakuje podanych wprost klas dla instancji.
Algorytmy uczące wykonujące klasteryzację nazywamy klasteryzatorami. W pakiecie RWeka wyróżniamy następujące klasteryzatory: Cobwem, DBScan, FarthestFirst, SimpleKMeans oraz XMeans. Najpopularniejszym algorytmem klasteryzacji jest SimpleKMeans, który następnie opiszemy.
SimpleKMeans przyjmuje parametr K określający ilość klas do których chcemy przypisywać instancje. Parametry ten musi zostać z góry określony co jest często problematyczne. Przykładowo spoglądając na nieetykietowany zbiór uczący iris nieposiadający informacji o gatunkach, czy jesteśmy w stanie powiedzieć ile różnych gatunków opisują wymienione instancje? Odpowiedź jest przecząca. Dla celów ilustracyjnych przyjmiemy, iż wiemy że w zbiorze tym znajdują się dokładnie 3 rożne gatunki lecz nie wiemy, która instancja należy do którego gatunku. Przystąpmy do klasteryzacji z wykorzystaniem algorytmu SimpleKMeans.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
> library(RWeka) > unlabeled_iris <- iris[, -5] > SimpleKMeans(unlabeled_iris[, -5]) kMeans ====== Number of iterations: 7 Within cluster sum of squared errors: 12.127790750538196 Initial starting points (random): Cluster 0: 6.1,2.9,4.7,1.4 Cluster 1: 6.2,2.9,4.3,1.3 Missing values globally replaced with mean/mode Final cluster centroids: Cluster# Attribute Full Data 0 1 (150.0) (100.0) (50.0) =============================================== Sepal.Length 5.8433 6.262 5.006 Sepal.Width 3.0573 2.872 3.428 Petal.Length 3.758 4.906 1.462 Petal.Width 1.1993 1.676 0.246 |
Algorytm SimpleKMeans automatycznie dobrał liczbę klastrów równą 2. Następnie próbował przyporządkować wszystkie instancje do jednej z tych dwóch grup. Wiemy, że nasz zbiór zawiera 3 różne gatunki, dlatego w następnym podejściu ustawimy arbitralnie liczbę grup. Użyjemy do tego funkcji Weka_control() przyjmującej sekwencje parametrów zapisanych w parach nazwa_parametru = wartość_parametru. Wywołanie powyższej funkcji wraz z algorytmem uczącym SimpleKMeans wygląda następująco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
> SimpleKMeans(iris[, -5], Weka_control(N = 3)) kMeans ====== Number of iterations: 6 Within cluster sum of squared errors: 6.982216473785234 Initial starting points (random): Cluster 0: 6.1,2.9,4.7,1.4 Cluster 1: 6.2,2.9,4.3,1.3 Cluster 2: 6.9,3.1,5.1,2.3 Missing values globally replaced with mean/mode Final cluster centroids: Cluster# Attribute Full Data 0 1 2 (150.0) (61.0) (50.0) (39.0) ========================================================== Sepal.Length 5.8433 5.8885 5.006 6.8462 Sepal.Width 3.0573 2.7377 3.428 3.0821 Petal.Length 3.758 4.3967 1.462 5.7026 Petal.Width 1.1993 1.418 0.246 2.0795 |
Analizując wyniki klasteryzacji i wiedząc, że rozkład gatunków irysów jest równomierny (po 50 instancji na gatunek) łatwo dopatrzeć się błędu klasteryzacji. Mianowicie, ze wszystkich 150 instancji: 61 instancji zostało przypisanych do klastra #0, 50 instancji do klastra #1 oraz 39 instancji do klastra #2.