Как создать кластерный участок в R? - PullRequest
12 голосов
/ 26 января 2012

Как я могу создать кластерный график в R без использования clustplot ?

Я пытаюсь справиться с некоторой кластеризацией (используя R) и визуализацией (используя HTML5 Canvas).

По сути, я хочу создать кластерный график , но вместо того, чтобы строить данные, я хочу получить набор 2D точек или координат, которые я могу вытянуть на холст и сделать что-то довольно красивоес (но я не уверен, как это сделать).Я хотел бы представить, что я:

  1. Создать матрицу сходства для всего набора данных (используя dist)
  2. Кластеризация матрицы сходства с использованием kmeans или чего-то подобного (используя kmeans)
  3. Составьте график с использованием MDS или PCA, но я не уверен, как соотносятся шаги 2 и 3 (cmdscale).

Я проверил вопросы здесь , здесь и здесь (последний из которых наиболее полезен).

Ответы [ 2 ]

31 голосов
/ 26 января 2012

Вы имели в виду что-то подобное? Извините, но я ничего не знаю о HTML5 Canvas, только R ... Но я надеюсь, что это поможет ...

Сначала я кластеризирую данные с использованием kmeans (обратите внимание, что я не кластеризовал матрицу расстояний), затем вычисляю matix расстояния и строю его с использованием cmdscale. Затем я добавляю цвета к MDS-графику, которые соответствуют группам, идентифицированным kmeans. Плюс несколько приятных дополнительных графических функций.

Вы можете получить доступ к координатам из объекта, созданного 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

0 голосов
/ 22 мая 2015

Здесь вы можете найти один график для анализа результатов кластера, " координатный график ", в пакете "clusplot".

Он не основан на PCA. Он использует функциональную шкалу, чтобы все значения переменных были в диапазоне от 0 до 1, поэтому вы можете сравнить, какой кластер содержит максимальное / минимальное среднее значение для каждой переменной.

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)

Этот пост объясняет, как его использовать.

...