第07回: k-means クラスタリング
資料のダウンロード
| ファイル | 内容 |
|---|---|
| exercise.py | ハンズオン演習スクリプト |
ヒントの使い方
python exercise.py --hint 1 # 方向性ヒント
python exercise.py --hint 1 --level 2 # より具体的なヒント
python exercise.py --hint 1 --level 3 # コード例
python exercise.py --check # 提出前の自己チェック
演習問題への取り組み方
- 下の講義ノートを読む(事前学習・2時間目安)
exercise.pyを実行してグラフを確認する- 演習問題(5問)に取り組む
python exercise.py --checkで確認するexercise.pyを提出する(締切は授業後1週間)
詰まったとき
解決しない場合は Q&A ページの投稿フォームを使ってください。
講義ノート
1. クラスタリングとは何か
前回までは PCA によって「データのばらつきをどう要約するか」を学んだ。今回からはデータ点同士の類似性に基づいてグループ分けするクラスタリングを扱う。クラスタリングは教師なし学習の一種であり、正解ラベルを使わずにデータ自体の構造を発見する手法である。
都市空間データでクラスタリングを行うと、「高緑化・低騒音・高幸福感の静穏型公園群」「高混雑・高騒音・高ストレスの駅前商業型群」といったグループが自然に浮かび上がる。このように地点を類型化することで、都市計画や環境改善の対象を整理しやすくなる。
2. k-meansアルゴリズムの動作原理
k-means は最もシンプルかつ広く使われるクラスタリング手法である。アルゴリズムは以下の4ステップを繰り返す。
Step 1:初期化
k 個の重心(centroid)をデータ空間にランダムに配置する(または k-means++ 法で分散配置)。重心の初期位置はアルゴリズムの収束速度に影響するため、scikit-learn のデフォルトでは k-means++ を使う(init="k-means++" が既定値)。
Step 2:割当(Assignment)
全データ点に対して、ユークリッド距離が最も近い重心のクラスタを割り当てる。距離の計算は特徴量空間上で行われるため、スケールの差が大きい変数があると結果が歪む。このため StandardScaler による前処理が必須である。
Step 3:更新(Update)
各クラスタに割り当てられたデータ点の平均位置を新しい重心とする。「k-means」という名前はここに由来する(k個のmean)。
Step 4:収束判定
重心の移動量がしきい値(tol)を下回るか、指定したイテレーション数(max_iter)に達したら終了する。Step 2→Step 3 を繰り返すことで、各クラスタ内の分散が減少し続け、局所的な最適解に収束する。
目的関数(慣性)
k-means が最小化しようとする量を慣性(inertia)と呼ぶ。
ここで \(x_i\) はデータ点、\(\mu_k\) はクラスタ \(k\) の重心である。慣性はクラスタ内のデータ点が重心からどれだけ離れているかを示す。慣性が小さいほど、各クラスタがコンパクトにまとまっていることを意味する。
注意事項
- 初期配置が異なると異なる局所解に収束することがある。そのため
n_initに複数回(デフォルト10回)の試行を指定し、最も慣性が小さい結果を採用する。 - k-means は球状クラスタを仮定するため、細長いクラスタや非凸クラスタの検出には向かない。
3. エルボー法:最適 k の選択
クラスタ数 k は事前に決める必要があるが、「正解の k」は一般に存在しない。よく使われる指針の一つがエルボー法である。
読み方
k を 2 から順に増やしながら慣性をプロットすると、最初は急激に減少し、ある k を境に減少が緩やかになる。この折れ曲がり点(肘=elbow)を最適 k の候補とする。
限界
- 肘が不明瞭な場合が多く、判断が主観的になりやすい。
- k を大きくすれば慣性は必ず減少するため、k が大きすぎることを検知しにくい。
- エルボー法単独ではなく、次回学ぶシルエット分析や解釈可能性と組み合わせて判断することが望ましい。
4. PCAによるクラスタリング結果の可視化
高次元(今回は8次元)のクラスタリング結果をそのまま表示することはできない。そこで第05回で学んだ PCA を使い、2次元に圧縮してから色分けした散布図を描く。
ただし注意が必要である。PCA の第1・第2主成分で説明できる分散の割合(説明分散比率)が低い場合、散布図上で重なって見えるクラスタが実際には8次元空間では明確に分離している可能性がある。散布図を解釈するときは説明分散比率を必ず確認し、「2次元に落とした結果」として読むべきである。
5. レーダーチャートによるクラスタプロファイリング
クラスタの意味を理解するためには、各クラスタの重心(特徴量の平均値)を比較する必要がある。レーダーチャートは多変量の比較に適した可視化手法であり、各特徴量を軸として放射状に配置し、重心値を多角形で表示する。
今回のデータでは次のようなクラスタが現れやすい。 - 静穏緑豊かクラスタ(公園・住宅地中心):低騒音・高緑化率・高幸福感・低ストレス - 都市中心商業クラスタ(駅前・商業施設中心):高混雑・高騒音・低緑化率・中程度の幸福感 - オフィス疲弊クラスタ(オフィス街中心):高ストレス・負の感情極性・高PM2.5
レーダーチャートはクラスタへの命名(ラベリング)を助けるツールとして活用する。ラベルを付与することで、クラスタリング結果がステークホルダーにも伝わるコミュニケーション材料になる。
6. 分析フローのまとめ
生データ (6,000行 × 50地点)
↓ groupby + mean(地点ごとの時系列集計)
地点集計表 (50行 × 8特徴量)
↓ StandardScaler
標準化済み行列
↓ k-means (k=5)
クラスタラベル (50地点分)
↓ PCA (→2次元) + 散布図 / レーダーチャート
可視化・解釈
参考・発展
- Hartigan & Wong (1979) "Algorithm AS 136: A K-Means Clustering Algorithm" — k-means の古典的実装。
- MacQueen (1967) の original proposal が k-means の起源。
sklearn.cluster.KMeansドキュメント: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html- エルボー法の限界については次回のシルエット分析(第08回)で補完する。