Skip to content

Instantly share code, notes, and snippets.

@ky0on
Last active August 29, 2015 14:12
Show Gist options
  • Save ky0on/e6e903a8af0b43b14d23 to your computer and use it in GitHub Desktop.
Save ky0on/e6e903a8af0b43b14d23 to your computer and use it in GitHub Desktop.
機構セミナー@2015年1月15日 に載せるグラフを生成するRスクリプト
##
## Compare methods for nonhierarchical clustering
##
## Please install following libraries in advance
## * LICORS
## * apcluster
##
## @athor kyon
## @created Jan. 2 2015
##
#
# generate 4-calsses dataset
#
gen.dataset <- function(sd) {
n <- 25 # the number of data for each label
p1 <- cbind(rnorm(n=n, mean=1, sd=sd),rnorm(n=n, mean=1, sd=sd))
p2 <- cbind(rnorm(n=n, mean=10, sd=sd),rnorm(n=n, mean=1, sd=sd))
p3 <- cbind(rnorm(n=n, mean=1, sd=sd),rnorm(n=n, mean=10, sd=sd))
p4 <- cbind(rnorm(n=n, mean=10, sd=sd),rnorm(n=n, mean=10, sd=sd))
label <- as.factor(c(rep(1,n), rep(2,n), rep(3,n), rep(4,n)))
d <- as.data.frame(cbind(rbind(p1, p2, p3, p4), label))
colnames(d) <- c('x', 'y', 'label')
return(d)
}
#
# run clustering and plot result
#
compare.plot <- function(d, label) {
#init
par(mfrow=c(2, 3))
n_cluster <- length(levels(factor(label)))
#answer
plot(d, pch=as.integer(label), col=as.integer(label), main='Answer')
#k-means
d.km <- kmeans(d, n_cluster)
plot(d, pch=d.km$cluster, col=d.km$cluster, main='k-means')
#k-means++
library(LICORS)
d.kmpp <- kmeanspp(d, n_cluster)
plot(d, pch=d.kmpp$cluster, col=d.kmpp$cluster, main='k-means++')
#x-means
source('http://www.rd.dnc.ac.jp/~tunenori/src/xmeans.prog')
d.xm <- xmeans(d)
plot(d, pch=d.xm$cluster, col=d.xm$cluster, main='x-means')
#Affinity Propagation
require('apcluster')
d.s <- negDistMat(d, r=2)
d.ap <- apcluster(d.s)
plot(d, pch=as.integer(factor(labels(d.ap))), col=as.integer(factor(labels(d.ap))), main='Affinity Propagation')
}
#init pdf
pdf('clustering.pdf')
#artificial dataset
for (sd in seq(1, 3, 0.5)) {
d <- gen.dataset(sd=sd)
compare.plot(d[,1:2], d$label)
}
#iris dataset
## compare.plot(iris[,1:2], iris$Species)
compare.plot(iris[,2:3], iris$Species)
#finalize
dev.off()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment