Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Kmeans VS kmeans++ and ykmeans
@R for Marketing Research and Analytics
2015年11月24日(火)
太田 博三
K-means
• 文法:
• kmeans(x, centers, iter.max = 10, nstart = 1,
algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
"MacQueen")...
K-means
• K-means法の手順
① 事前にクラスタ数kと繰り返し回数nを決めておく。
② step1:クラスタの中心点を、対象データの中からランダムにk
個選び出す。
③ step2:データごとに各クラスタの中心点との距離を求め、最...
K-meansの例
require(graphics)
# a 2-dimensional example
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
matrix(rnorm(100,...
K-means++
• 文法:
• kmeanspp(data, k = 2, start = "random", iter.max = 100, nstart = 10, ...)
• Arguments
• data:an N ¥times...
K-means++
• K-means法の手順
• step1:対象データかの中から、クラスタの中心点をランダムに1
つ選び出す
• step2:それぞれのデータと選び出した中心点との距離を計算す
る
• step3:step2で求めた距離の二...
K-means++
• 用例
• install.packages("LICORS")
• library(LICORS)
• set.seed(1984)
• nn <- 100
• XX <- matrix(rnorm(nn), ncol ...
ykmeans
• 文法:
ykmeans (x, variable.names, target.name, k.list, n)
x:データフレーム
variable.names:クラスタリングの時の使う説明変数名
target.name :...
K-means++
• 「とりあえず100回くらい実行すれば安定するだろう」
• という仮定のもとに、100回実行して、一番多く分類され
たクラスタを採用している。
K-means++
• 用例2つ
#Examples1
• install.packages("ykmeans")
• library(ykmeans)
• data <- read.csv("data_ykmeans.csv", sep=",...
Upcoming SlideShare
Loading in …5
×

Kmeans vs kmeanspp_20151124

748 views

Published on

Comparative studies

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

Kmeans vs kmeanspp_20151124

  1. 1. Kmeans VS kmeans++ and ykmeans @R for Marketing Research and Analytics 2015年11月24日(火) 太田 博三
  2. 2. K-means • 文法: • kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen")) • centers:クラスターの数, iter.max: 繰り返しの最大値, • nstart: 初期中心を与える方法 • 引数algorithm:4種類 ※centersがクラスターの数の場合、初期中心値はランダムになります。
  3. 3. K-means • K-means法の手順 ① 事前にクラスタ数kと繰り返し回数nを決めておく。 ② step1:クラスタの中心点を、対象データの中からランダムにk 個選び出す。 ③ step2:データごとに各クラスタの中心点との距離を求め、最も 近くに中心点があるクラスタに割り当てる ④ step3:クラスタごとに、割り当てられたデータの平均値を求め、 新たな中心点として採用する。 ⑤ クラスタに割り当てるデータに変化がなくなる(=各クラスタの 中心点が定まる)まで、step2からstep3を繰り返す。ただし、繰 り返し数がnに達した場合はその時点で終了する。
  4. 4. K-meansの例 require(graphics) # a 2-dimensional example x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) colnames(x) <- c("x", "y") (cl <- kmeans(x, 2)) plot(x, col = cl$cluster) points(cl$centers, col = 1:2, pch = 8, cex = 2)
  5. 5. K-means++ • 文法: • kmeanspp(data, k = 2, start = "random", iter.max = 100, nstart = 10, ...) • Arguments • data:an N ¥times d matrix, where N are the samples and d is the dimension of space. • k:number of clusters. • start:first cluster center to start with • iter.max:the maximum number of iterations allowed • nstart:how many random sets should be chosen? • ...:additional arguments passed to kmeans
  6. 6. K-means++ • K-means法の手順 • step1:対象データかの中から、クラスタの中心点をランダムに1 つ選び出す • step2:それぞれのデータと選び出した中心点との距離を計算す る • step3:step2で求めた距離の二乗に比例した確率で、データを1 つ選び出し、クラスタの中心点として採用する • 選び出したクラスタの中心点がk個になるまでstep2から3を繰り 返す。
  7. 7. K-means++ • 用例 • install.packages("LICORS") • library(LICORS) • set.seed(1984) • nn <- 100 • XX <- matrix(rnorm(nn), ncol = 2) • YY <- matrix(runif(length(XX) * 2, -1, 1), ncol = ncol(XX)) • ZZ <- rbind(XX, YY) • cluster_ZZ <- ykmeans(ZZ,, 3:6) • plot(ZZ, col = cluster_ZZ$cluster + 1, pch = 19)
  8. 8. ykmeans • 文法: ykmeans (x, variable.names, target.name, k.list, n) x:データフレーム variable.names:クラスタリングの時の使う説明変数名 target.name :クラスタ間で比較しようと思っている変数名 k.list:クラスタ数候補 n:試行回数
  9. 9. K-means++ • 「とりあえず100回くらい実行すれば安定するだろう」 • という仮定のもとに、100回実行して、一番多く分類され たクラスタを採用している。
  10. 10. K-means++ • 用例2つ #Examples1 • install.packages("ykmeans") • library(ykmeans) • data <- read.csv("data_ykmeans.csv", sep=",", header=T, row.names=1) • data.sc <- scale(data) #データを標準化(各変量の単位が異なる場合) • data.df <- as.data.frame(data.sc) • ykm <- ykmeans(data.df, paste0("x", 1:10), "y", 7:15, n=500) • #引数は、データフレーム、説明変数、比較する変数、クラスタ数候補、k- means試行回数 • table(ykm$cluster) • write.table(ykm$cluster, sep=",", "ykm.csv") #Examples2 • data(actData) • act.ykm <- ykmeans(actData, paste0("x",1:17),"y",3:6) • table(act.ykm$cluster)

×