2015年2月12日木曜日

Rでクラスター分析(非階層)してみる


【クラスター分析とは(非階層)】


クラスター分析とは、データを互いに類似するもの同士のグループに分類(セグメント化)する分析手法。
データ間の類似度は、データ間の距離で判定する。
距離の計算方法には、代表的なユークリッド距離の計算方法がある。

  AとBの距離 = √(距離)の2乗+(距離)の2乗+・・・・

<非階層的クラスター分析>
非階層的クラスター分析の代表的な分析手法に、k-means法 がある。
k-means法では次のようにデータをクラスター化していく。

  1. データをk個の初期クラスターに分類
  2. クラスターの中心を計算
  3. すべてのデータとクラスターの中心との距離を求め、最も近いクラスターに分類
  4. クラスターの中心を再計算(新しい中心を決定)
  5. クラスターの中心が変化しなければ計算終了、それ以外は3に戻る

    ※無限ループする場合がまれにあるので、10回をMAX値に設定することが多い。

【Rを使ってクラスター分析をしてみる】


非階層のクラスター分析を用いて地震のデータの分類を行う。
ここでは、R言語に付属しているフィジーの地震データ(quakes)を使う。このデータはすでに利用できる状態にある。

> quakes
> class(quakes)
[1] "data.frame"
> nrow(quakes)
[1] 1000
> colnames(quakes)
[1] "lat" "long" "depth" "mag" "stations"

cf) 緯度(lat)、経度(long)、深度 km(depth)、マグニチュード(mag)、報告数(stations)

quakesから緯度と経度を取り出したデータフレームを作成する。
変数 x を、plot() 関数を使ってプロットすると、地理的な地震の発生情報がグラフで確認できる。

> x <-data.frame(lat=quakes$lat, long=quakes$long)
> plot(x)



クラスター分析(k-means法)を使って、データを2つのクラスターに分類する。
(初期クラスターは2)

> c1 <- kmeans(x, center=2)

所属クラスターの確認、中心の確認をする。

> c1$cluster
[1] 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2  
          ←1~6件目がクラスタ1、7件目はクラスタ2であることが分かる
> c1$centers
     lat       long
1  -21.87143   182.3506     ←ラスタ1の中心の緯度経度
2  -15.87785   168.2598   ←ラスタ2の中心の緯度経度

この結果をプロットしてみる。
クラスターはcol で色指定することができ、クラスターの中心はpoints() でデータに点を表示する。

> plot(x, col=c1$cluster)
> points(c1$center, col=3:4,pch=8,cex=2)

points()関数: データに点を表示
    colオプション:色を指定(1:黒、2:赤、3:緑、4:青)
    pchオプション:点の種類 1~25までの種類を選択可能
    cexオプション:点の大きさを指定



今度はすべての属性を用いて同様にクラスター分析を行う。
ここではクラスター数を4にする。

> c2 <- kmeans(quakes, centers=4)
> c2$clouster
> c2$centers
> plot(quakes$lat, quakes$long, col=c2$cluster)
> points(c2$center, col=1:4,pch=8,cex=2)



属性は5つあるため、2次元のグラフは正確なグラフではないが、先ほどとは異なる結果となる。
たくさんの要素が入ることにより、データの距離が、特定のデータに引っ張られている。

0 件のコメント:

コメントを投稿