Kodomo

Пользователь

Кластеризация

Как найти расстояние между данными

Шаг 1. Сгенерируем данные

dat <- rbind(samp1=c(0,0,0), samp2=c(0,0,3), samp3=c(1,1,1), samp4=c(2,2,2))
dat

Шаг 2. Получаем расстояния, преобразуем в матрицу

dist(dat, method="euclidian")
as.matrix(dist(dat, method="euclidian"))

Простейшая иерархическая кластеризация

Шаг 1. Генерируем данные

y <- matrix(rnorm(50), 10, 5, dimnames=list(paste("g", 1:10, sep=""), paste("t", 1:5, sep=""))) 

Шаг 2. Находим расстояния с помощью корреляции, строим дерево

c <- cor(t(y), method="spearman")
d <- as.dist(1-c)
hr <- hclust(d, method = "complete", members=NULL) 
plot(hr) 

Шаг 3. Другой вид представления дерева

plot(as.dendrogram(hr), edgePar=list(col=3, lwd=4), horiz=T) 

Деревья

Анализ частот слов в блогах: Читаем данные:

blogdata<-read.csv("blogdata1.csv")

выбираем несколько случайных блогов:

idx<- sample(1:dim(blogdata)[1],  10)  
blogdataSample<-blogdata[idx,] 

делаем иерархическую кластеризацию и строим дерево

blogdataSample$Blog<-NULL
hc<-hclust(dist(blogdataSample),  method="single")  
hc$labels<-blogdata$Blog[idx]
plot(hc,  hang=-1)

обрезаем дерево (поскольку выборка у каждого случайная, положение линии определите для Вашего случая):

mycl <-cutree(hc,  k=3)
plot(hc)
abline(h=55,  col="red")

Красим ветки: Функция раскраски:

dendroCol <- function(dend=dend, keys=keys, xPar="edgePar", bgr="red", fgr="blue", pch=20, lwd=1, ...) {
        if(is.leaf(dend)) {
                myattr <- attributes(dend)
                if(length(which(keys==myattr$label))==1){
                        attr(dend, xPar) <- c(myattr$edgePar, list(lab.col=fgr, col=fgr, pch=pch, lwd=lwd))
                        # attr(dend, xPar) <- c(attr$edgePar, list(lab.col=fgr, col=fgr, pch=pch))
                } else {
                        attr(dend, xPar) <- c(myattr$edgePar, list(lab.col=bgr, col=bgr, pch=pch, lwd=lwd))
                }
        }
  return(dend)
}

Теперь красим (имена веток выберите для своего случая):

dend_colored<-dendrapply(as.dendrogram(hc), dendroCol,  keys=c("Wonkexe","Signum sine by  Guy  Kawasaki"), xPar="edgePar", bgr="red", fgr="blue", lwd=2, pch=20)
plot(dend_colored)

Метод главных компонент

Шаг 1. Генерируем данные

z1 <- rnorm(10000, mean=1, sd=1)
z2 <- rnorm(10000, mean=3, sd=3) 
z3 <- rnorm(10000, mean=5, sd=5) 
z4 <- rnorm(10000, mean=7, sd=7) 
z5 <- rnorm(10000, mean=9, sd=9) 
mydata <- matrix(c(z1, z2, z3, z4, z5), 2500, 20, byrow=T, dimnames=list(paste("R", 1:2500, sep=""), paste("C", 1:20, sep=""))) 

Шаг 2. Строим PCA

pca <- prcomp(mydata, scale=T) 
summary(pca) 
summary(pca)$importance[, 1:6]

Шаг 3. Рисуем график

mycolors <- c("red", "green", "blue", "magenta", "black") 

plot(pca$x, pch=20, col=mycolors[sort(rep(1:5, 500))])

Многомерное шкалирование

Шаг 1. Делаем MDS и рисуем

loc <- cmdscale(eurodist) 
plot(loc[,1], -loc[,2], type="n", xlab="", ylab="", main="cmdscale(eurodist)")
text(loc[,1], -loc[,2], rownames(loc), cex=0.8)