前回に引き続きRの勉強を進めていました。
今回は教師なし学習の「クラスタリング」について取り扱いました。クラスタリングとは、与えられたデータを特定のルールに基づいてグループ化していくことです。 使用したデータはこちら。
階層化クラスタリング
階層化クラスタリングはざっくりいうと、 各データ(要素)を類似度をもとにかたまり(クラスタ)にしていき、最後に1つのクラスタに集める分類手法 です。
R言語を使えば、コマンド2、3個叩くだけでクラスタリングができるのですが、その裏でやっている処理はこんな感じです。
- 各要素-要素間のユークリッド距離を求める
- ユークリッド距離が最小のものを類似度が最大と判断して、クラスタにする
- 生成したクラスタを含む要素群に対し、全ての要素が一つのクラスタに集まるまで1. 2.を繰り返す
ユークリッド距離
各要素-要素間の類似度を求めるのに、本書ではユークリッド距離を使用しており、ユークリッド距離が最小のペアを類似度が最大と決めているようでした。
ユークリッド距離とは、下図のような要素間の距離です。
nが3以下のときは、高校数学レベルで出てくる二点間の距離をご想像いただければ問題無いかと思います。実際にはnが4以上の時も、イメージしにくいですが、上の式に当てはめるだけで値を算出できます。
少し調べてみると類似度を測るためにはユークリッド距離以外にもシティブロック距離や、ミンコフスキー距離があるそうです。どの距離を使うかはケースバイケースですが、ユークリッド距離が最もメジャーに使用されているようでした。
手順の2でクラスタを形成します。そのため、2周目以降のユークリッド距離の算出には、クラスタ-要素、クラスタ-クラスタのユークリッド距離を考慮する必要があります。
クラスタ距離の計算方法として、以下の6種類が紹介されていました。
手法 | |
---|---|
1 | 単連結法 |
2 | 完全連結法 |
3 | 群平均法 |
4 | ウォード法 |
5 | 重心法 |
6 | メディアン法 |
どの手法も一長一短なので、用途に応じて使い分ける必要があるようです。
試しにやってみた結果
試しに上で紹介したサンプルデータを使用して、階層化クラスタリングを実際にやってみました。 距離はユークリッド距離を使用して、各クラスタ距離に対して求めています。
図の出力方法がいまいちなのは置いておいて、それっぽい傾向は見えてきますね。拾ってきたサンプルデータなので、わかりやすいように加工されていますが、国産車と輸入車がそれぞれグループ化されているように見えます。
非階層化クラスタリング
階層化クラスタリングとは別に、非階層化クラスタリングという分類手法もあります。一つずつ要素をクラスタに集めずに分類する方法になり、代表例としてk平均方(k-means)があります。
- 各要素をグループに分類
- グループ毎に中心点を求める
- 各要素を最も近い中心点に所属するようにグループを変更
- 2.および3. を、中心点の位置が変化しなくなるまで繰り返す
k-meansの注意点としては、外れ値に弱いという点だそうです。 要は中心点が外れ値によってずれていってしまうため、分類に影響を与えてしまうとのことでした。
おまけ
ソースコードはこちら: