Rによるクラスタリング – k-means

デジタルトランスフォーメーション技術 人工知能技術 機械学習  数学 アルゴリズムとデータ構造 プログラミング  R言語と機械学習 本ブログのナビ 

Rによるクラスタリング – k-means

前回Rでのクラスタリングの例として、階層クラスタリングについて紹介した。今回は非階層クラスタリングであるk-meansについて紹介する。

kmeans関数は以下となる。

> kmeans(x, centers, iter.max = 10, nstart = 1,algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"))

関数 kmeans はクラスターの分類結果 ($cluster)、クラスターの中心ベクトル ($centers)、各クラスター内の個体数 ($size) などを返す。上記の関数でxはデータ、centersはクラスターの数、または クラスターの中心で、クラスタの数であれば、 クラスターの中心はランダムに与えられる。iter.maxは処理の繰り返し数の最大。nstartはランダムに初期値を設定する時のパラメータ。algorithmは計算アルゴリズムで (“Hartigan-Wong“, “Lloyd“, “Forgy“, “MacQueen“) . デフォルトは “Hartigan-Wong“となる。irisのデータを用いてkmeanを実行し、関数 kmeans の実行後、km$cluster にクラスターの分類結果が記録されるので確認する。

> data <- iris[,1:4]
> km <- kmeans(data,3)
> result <- km$cluster
> result
  [1] 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
 [36] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [71] 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1
[106] 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1
[141] 1 1 2 1 1 1 2 1 1 2

データが 1,2,3 の3つのクラスターに振り分けられていることがわかる。clusterパッケージを読み込み、 クラスタリング結果をプロットする。

> install.packages("cluster")
> library(cluster)
> clusplot(data, km$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)

irisデータの5列目 Species のデータを 変数 answer に代入し、品種とクラスタリング結果のクロス表を作成し、分類精度を確認する。

> answer <- iris[,5]  
> table <- table(answer, result)
> table
            result
answer        1  2  3
  setosa      0  0 50
  versicolor  2 48  0
  virginica  36 14  0

クロス表から、150サンプル中 (50+48+36=)134サンプルを正確に分類できたことが分かる。

上記の例ではirisでの処理を紹介したが、自然言語処理のところで紹介した形態素解析のツールを使って、文章の中の単語を抽出し、それぞれの単語に番号を振ったデータをCSVとして入力してクラスタリングをする等、同様の手法で、現実世界の課題からデータを生成して処理することもできる。

今回は、教師なし学習であるk-meansを用いた分類を述べてみた。分類のタスクとしては、これら以外にも教師あり学習を用いた分類もよく使われる。

なおpythonでのk-meansに関しては”k-meansの概要と応用および実装例について“を参照のこと。

次回はこれら機械学習や自然言語処理に欠かせない前処理ツールであるopenrefineの紹介を行う。

コメント

  1. […] Rによる機械学習(4) […]

  2. […] 一般的に機械学習をしたり統計処理を行う場合、破損していたり、不正確だったり、処理しようとする目的に無関係なデータがあると(いわゆるゴミデータの存在)、結果が不正確になり目的が達成できなくなる。これらを防ぐためにデータを正確かつクリーンに処理する方法がデータクレンジングと呼ばれる手法となる。前回までに行った機械学習の前処理や、自然言語処理したデータの後処理でこれらのデータクレンジング処理が必要になる。 […]

  3. […] 少し前の記事で、k-meansを用いた分類について述べた。今回は、自然言語処理とliblinearを用いた文の系抽出について述べてみたい。 […]

  4. […] Rでのk-meansによるクラスタリング […]

タイトルとURLをコピーしました