R言語プログラミング: クラスター分析 - k-means
4/17(土)の第3回 データマイニング+WEB 勉強会@東京 (Tokyo.Webmining#3)での私の一つ目のトーク「1. R言語による クラスター分析 - 活用編 (60分)」の一部関連内容です。当日は、全体像も含め分かる形の講義資料で話します。
当日、USTREAM配信も行う予定ですので、興味のある方はぜひご覧下さい。
第3回 データマイニング+WEB 勉強会@東京 (Tokyo.Webmining#3) : ATND
※内容記述に関して粗い部分も、追って洗練します。
k-means
k-meansは、クラスター分析の非階層的手法で代表的な手法。
現実のクラスタリングでもk-meansが使われることが多く、実用的な手法。
※階層的手法の対極にある「非階層的手法」(分割最適化手法とも呼ばれる)。詳細は次エントリを参照:「はじめてでもわかる R言語によるクラスター分析」
※アルゴリズム詳細は「第3回 データマイニング+WEB 勉強会@東京」でお話しします。また本エントリにも追記しようと思います。
R言語プログラミング
Rでは k-means によるクラスタリングを行う関数 kmeans()が標準で用意されている。
kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"))
[引数]
2)クラスタの代表点ベクトルを指定する場合:クラスタ数 K はこの代表点の個数から算出される。
[任意引数(省略可能)]
- iter.max : 繰り返しの最大回数。デフォルトは N=10。
- nstart : ランダムに初期値を設定する場合のパラメータ。初期値を変更したい場合に用いる。
- algorithm : 利用するアルゴリズムを Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"の中から選べる。デフォルトは "Hartigan-Wong"(通常、この"Hartigan-Wong"が最も良い結果を出すといわれている)。
ソース
x <- iris[,1:4] #解析データ:iris 1-4列のデータ km <- kmeans(x,3) #k-meansの実行。クラスタ数は3に指定。 result <- km$cluster #クラスタリング結果の抽出 result #クラスタリング結果の表示 answer <- iris[,5] #クラスタリング正解:品種(iris 5列目) ctbl <- table(answer, result) #正解と結果のクロス表を作成 ctbl #クロス表の表示 calcEntropy(ctbl) #エントロピー(Entropy)の算出 calcPurity(ctbl) #純度 (Purity)の算出
関数 calcEntropy(ctbl) (エントロピー(Entropy)の算出)、calcPurity(ctbl) (純度 (Purity)の算出)の関数定義はhttp://d.hatena.ne.jp/hamadakoichi/20100324/p1:こちらにソースを載せてあります。
実行結果
> x <- iris[,1:4] #解析データ:iris 1-4列のデータ > km <- kmeans(x,3) #k-meansの実行。クラスタ数は3に指定。 > > result <- km$cluster #クラスタリング結果の抽出 > result #クラスタリング結果の表示 [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 [75] 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 2 2 2 2 3 2 2 2 2 [112] 2 2 3 3 2 2 2 2 3 2 3 2 3 2 2 3 3 2 2 2 2 2 3 2 2 2 2 3 2 2 2 3 2 2 2 3 2 [149] 2 3 > > answer <- iris[,5] #クラスタリング正解:品種(iris 5列目) > > ctbl <- table(answer, result) #正解と結果のクロス表を作成 > ctbl #クロス表の表示 result answer 1 2 3 setosa 50 0 0 versicolor 0 2 48 virginica 0 36 14 > > calcEntropy(ctbl) #エントロピー(Entropy)の算出 [1] 0.2308662 > calcPurity(ctbl) #純度 (Purity)の算出 [1] 0.8933333
結果はWard法の結果と同程度のよい結果を得られる。
※Entropyは小さく、Purityは大きい、ほうが良いクラスタリング。詳細は次エントリを参照: 「はじめてでもわかる R言語によるクラスター分析」
関連リンク:データマイニング+WEB勉強会@東京 (Tokyo.Webmining)
参考文献
- 作者: 新納浩幸
- 出版社/メーカー: オーム社
- 発売日: 2007/11/01
- メディア: 単行本
- 購入: 9人 クリック: 207回
- この商品を含むブログ (29件) を見る
- 作者: 宮本定明
- 出版社/メーカー: 森北出版
- 発売日: 1999/10
- メディア: 単行本
- クリック: 36回
- この商品を含むブログ (8件) を見る
- 作者: 金明哲
- 出版社/メーカー: 森北出版
- 発売日: 2007/10/01
- メディア: 単行本(ソフトカバー)
- 購入: 36人 クリック: 694回
- この商品を含むブログ (64件) を見る