2012-01-26 10 views
10

Jak utworzyć wykres klastra w R bez używania clustplot?Jak utworzyć wykres klastra w R?

Próbuję uzyskać dostęp do niektórych klastrów (za pomocą R) i wizualizacji (przy użyciu Canvas HTML5).

Zasadniczo chcę utworzyć , ale zamiast kreślenia danych, chcę uzyskać zestaw punktów lub współrzędnych 2D, które można przeciągnąć na płótno i zrobić coś może być piękne (ale nie jestem pewien jak to zrobić Zrób to). Mogę sobie wyobrazić, że:

  1. Tworzenie macierzy podobieństwa dla całego zbioru danych (przy użyciu dist)
  2. Cluster macierz podobieństwa użyciu kmeans lub coś podobnego (z wykorzystaniem kmeans)
  3. Plot wynikiem korzystania MDS lub PCA - ale nie jestem pewien, jak odnoszą się kroki 2 i 3 (cmdscale).

Mam wyrejestrowany pytania here, here i here (z których ostatnia to najbardziej użytku).

Odpowiedz

28

Czy miałeś na myśli coś takiego? Przepraszam, ale nic nie wiem o płótnie HTML5, tylko R ... Ale mam nadzieję, że to pomoże ...

Najpierw łączę dane używając kmeans (zauważ, że nie skupiłem matrycy odległości), niż obliczam odległość matix i wykreślić go za pomocą cmdscale. Następnie dodaję kolory do wykresu MDS, który odpowiada grupom zidentyfikowanym przez kmeans. Plus kilka ciekawych dodatkowych funkcji graficznych.

Możesz uzyskać dostęp do współrzędnych z obiektu utworzonego przez cmdscale.

### some sample data 
require(vegan) 
data(dune) 

# kmeans 
kclus <- kmeans(dune,centers= 4, iter.max=1000, nstart=10000) 

# distance matrix 
dune_dist <- dist(dune) 

# Multidimensional scaling 
cmd <- cmdscale(dune_dist) 

# plot MDS, with colors by groups from kmeans 
groups <- levels(factor(kclus$cluster)) 
ordiplot(cmd, type = "n") 
cols <- c("steelblue", "darkred", "darkgreen", "pink") 
for(i in seq_along(groups)){ 
    points(cmd[factor(kclus$cluster) == groups[i], ], col = cols[i], pch = 16) 
} 

# add spider and hull 
ordispider(cmd, factor(kclus$cluster), label = TRUE) 
ordihull(cmd, factor(kclus$cluster), lty = "dotted") 

enter image description here

+1

Dzięki @EDi, to jest naprawdę świetne. Tak więc, aby wyjaśnić, klastry, a następnie zbudować podobieństwo matirx. Następnie używasz MDS do pozycjonowania punktów w 2D, a następnie kolorujesz punkty według ich relacji do klastra. Znakomity. Jeśli masz szansę, możesz wyjaśnić, co to robi: grupy <- poziomy (współczynnik (kclus $ cluster)) – slotishtype

+1

zobacz moją edycję. groups jest po prostu obiektem, który zawiera nazwy grup, używane tylko dla pętli for. – EDi

+0

OK Widzę twoją zmianę. Jedno ostatnie pytanie, czy możesz zgrupować matrycę odległości, czy jest to szalony ruch? Przepraszam, uczę się w tej chwili i właśnie przepracowuję swoją drogę. – slotishtype

0

Tutaj można znaleźć jeden wykres do analizy wyników klastrów "współrzędnych wykres", w ramach pakietu "clusplot".

Nie jest oparty na PCA. Używa skali funkcji, aby wszystkie zmienne były w zakresie od 0 do 1, dzięki czemu można porównać, który klaster zawiera średnią maks./Min dla każdej zmiennej.

install.packages("devtools") ## To be able to download packages from github 
library(devtools) 
install_github("pablo14/clusplus") 
library(clusplus) 

## Create k-means model with 3 clusters 
fit_mtcars=kmeans(mtcars,3) 

## Call the function 
plot_clus_coord(fit_mtcars, mtcars) 

This post wyjaśnia, jak z niego korzystać.