【クラスター分析とは(非階層)】
クラスター分析とは、データを互いに類似するもの同士のグループに分類(セグメント化)する分析手法。
データ間の類似度は、データ間の距離で判定する。
距離の計算方法には、代表的なユークリッド距離の計算方法がある。
AとBの距離 = √(距離)の2乗+(距離)の2乗+・・・・
<非階層的クラスター分析>
非階層的クラスター分析の代表的な分析手法に、k-means法 がある。
k-means法では次のようにデータをクラスター化していく。
- データをk個の初期クラスターに分類
- クラスターの中心を計算
- すべてのデータとクラスターの中心との距離を求め、最も近いクラスターに分類
- クラスターの中心を再計算(新しい中心を決定)
- クラスターの中心が変化しなければ計算終了、それ以外は3に戻る
※無限ループする場合がまれにあるので、10回をMAX値に設定することが多い。
【Rを使ってクラスター分析をしてみる】
非階層のクラスター分析を用いて地震のデータの分類を行う。
ここでは、R言語に付属しているフィジーの地震データ(quakes)を使う。このデータはすでに利用できる状態にある。
> quakes
> class(quakes)
[1] "data.frame"
> nrow(quakes)
[1] 1000
> colnames(quakes)
[1] "lat" "long" "depth" "mag" "stations"
> 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)
> 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の中心の緯度経度
[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(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)
> 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 件のコメント:
コメントを投稿