k-meansでのクラスタリングはRはデフォルトで関数を用意している。 混合分布モデルでのクラスタリングは階層型。これは非階層型(分割最適化手法)のクラスタリング。
# 引用元 http://d.hatena.ne.jp/hamadakoichi/20100415/p1 kmeans
data(iris)
x <- iris[, 1:4] # 解析データ:iris 1-4列のデータ
km <- kmeans(x, 3) # k-meansの実行。クラスタ数は3に指定。
result <- km$cluster #クラスタリング結果の抽出
result #クラスタリング結果の表示
## [1] 2 1 1 1 2 2 2 2 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1
## [36] 2 2 2 1 2 2 1 1 2 2 1 2 1 2 2 3 3 3 3 3 3 3 1 3 3 1 3 3 3 3 3 3 3 3 3
## [71] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3
## [106] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [141] 3 3 3 3 3 3 3 3 3 3
answer <- iris[, 5] #クラスタリング正解:品種(iris 5列目)
ctbl <- table(answer, result) #正解と結果のクロス表を作成
ctbl #クロス表の表示
## result
## answer 1 2 3
## setosa 17 33 0
## versicolor 4 0 46
## virginica 0 0 50
# クロス表の正誤だけみても味気なかったので散布図をプロット
result.all <- cbind(x, cbind(answer, result))
result.all$result <- factor(result.all$result)
result.all$answer <- factor(result.all$answer)
library(GGally)
## Loading required package: ggplot2
## Loading required package: reshape
## Loading required package: plyr
## Attaching package: 'reshape'
## 以下のオブジェクトはマスクされています (from 'package:plyr') :
##
## rename, round_any
ggpairs(data = result.all[, -6], color = "answer") # answer 正しい種類での色分け
ggpairs(data = result.all[, -5], color = "result") # result k-meansでのクラスタリング結果での色分け