Search
Test: https://goo.gl/forms/1nRnCPNxmsQ1891K3
V dnešním cvičení opět využijeme několik souborů s daty - všechny jsou v následujícím souboru cviceni_10_shluky.zip
Při shlukování je vždy nutné přemýšlet o normalizaci dat.
mydata <- na.omit(mydata) # smazání chybějících hodnot mydata <- scale(mydata) # normalizace dat
Vyzkoušejte postupně algoritmus k-means na datových souborech kruhy.csv a tvary.csv. Pozor, nezapomeňte vyloučit atribut class ze shlukování. Atribut class použijte pouze pro vizualizaci shluků. Zvolte počet shluků roven 3 (parametr k=3).
kruhy.csv
tvary.csv
k
kc <- kmeans(data_bez_class, pocet shluku) print(kc)
U algoritmu k-means je nutné nastavit počet shluků. Ukážeme si, jak je možné počet shluků volit.
Vyzkoušejte následující funkci v R.
cluster_num_plot <- function(data,n){ result <- vector(length=n-1) for(i in 2:n){ cl <- kmeans(data, i) result[i-1] <- sum(cl$withinss) } plot(2:n,result,xlab="počet shluků", ylab="průměrná vzdálenost") }
Funkce provede postupně shlukování metodou kmeans pro počet shluků 1 až n. Kvalitu shlukování odhadneme pomocí parametru cl$withinss (průměrnou vzdálenost uvnitř všech shluků) a uložíme do vektoru result. Následně vykreslíme závislost počtu shluků na objektivní funkci (použijeme právě průměrnou vzdálenost uvnitř všech shluků).
kmeans
1
n
cl$withinss
result
Gaussian mixture model je flexibilnější než algoritmus k-means. Porovnejte výsledky shlukování pomocí k-means a pomocí GMM EM na datech tvary.csv.
library(mclust) cl_gmm <- Mclust(data,G=pocet_shluku) summary(cl_gmm) plot(cl_gmm)
Vyzkoušejte hierarchické shlukování na datovém souboru zvirata.csv a známých iris
zvirata.csv
iris
hc <- hclust(dist(zvirata[,2:14]), method="complete") plot(hc, hang = -1, labels=zvirata[,1]) help(cutree)