クラスタリング
階層的クラスタリング
階層的クラスタリング デンドログラムの描画
距離に着目したクラスタリング
デンドログラムを書いて自分でどのようなクラスターにするかを決める時に使う
準備
データセットを用意する
データを正規化する MinMaxScaler
クラスタリングの手法を決定しクラスタリングを行う
linkage 手法:ward,single最短距離法,complete再長距離法,centroid重心法
クラスタ間距離の計算 ward法
計算量は多、分類感度が良い
- クラスタの重心をとる
- (各クラスタの重心からの距離)^2を計算 これが小さく、クラスタ間距離が大きい方がクラスタリングがよくできているといえる。
- クラスタとクラスタの重心を求め、(重心から各点の距離),(結合後の距離)^2を計算
- (結合後の距離)^2 - (各クラスタの重心からの距離)^2をクラスタ間の距離とする
- これを繰り返して近い点から順にまとめていく(ボトムアップアプローチ)
デンドログラムを書く
良いデンドログラム 異なるクラスタ間の距離は長く、同クラスタの点同士の距離は短い
悪いデンドログラム 鎖状になっている
fclusterメソッドを使用して、クラスター間の距離tを指定してデータセットを任意のクラスタ数に分割する
クラスタの詳細な分析
-
seabornのペアプロットで クラスタ化の関係性を調べる
元のデータに ‘cluster’という列を追加する
seabornのペアプロットでデータをクラスタごとにプロットしてさらにクラスタ間の関係を探っていく -
clusterごとのデータの統計量を調べる
Query メソッドで各クラスターのデータを取得し、そこに対してdescribeで統計量を調べる -
エルボー図を使用する横軸にクラスタ数、縦軸に損失関数をプロットして下げ止まるところをクラスタ数として採用する
-
シルエットプロットを行う
凝集度、乖離度から、シルエット係数を算出
可視化
凸状のクラスターを作らない手法に関しては適切な評価が出来ない場合がある
from silhouette import silhouette_visuallizer
非階層的クラスタリング
K-means法
距離に着目したクラスタリング
事前にクラスター数Kを決めておいてクラスタ間の距離の値を最小化するようなクラスタリングをする
アルゴリズム
①クラスタ数Kを決める
②適当にデータにクラスタを設定する
③クラスタごとに重心(平均値)を求める
④データのクラスタを求めた重心に基づいて振りなおす
②~④をイテレーション数繰り返す
DBSCAN
密度に着目したクラスタリング
Core点から到達可能な点を同じクラスタだとみなすクラスタリングの手法
クラスタの詳細な分析
k-dist graph
手法の選択
-
デンドログラム
自分でクラスタ間の距離も見てクラスタを解釈することができる。 -
kmeans
凸のクラスターをクラスタリングする時に使える、例えばmoon データセットには使えない、dbscanを使う -
DBSCAN
凸でないクラスタをクラスタリングする時に使える。
epsとmin_samplesの設定が難しい