クラスタリング
本ページでは、Tunny Dashboard のクラスタリングウィジェット(Cluster Scatter 2D / 3D ウィジェット)で使用する手法を紹介します。
ここでは手法の役割と使い分けだけを扱うため、数式を含む詳細な理論は各手法の個別ドキュメントを参照してください。
クラスタリングを実行するにあたっては、次の 3 点を決めることになります。
- k-means の初期重心をどう選ぶか(Init 戦略)
- いくつのクラスタに分割するか(k の決め方)
- どの空間を入力に使うか(入力空間)
以下ではこの順に説明します。
クラスタリング手法
| 手法 | 役割 | 強み | 注意点 | 詳細 |
|---|---|---|---|---|
| k-means(Lloyd's アルゴリズム) | データを 個のクラスタに分割 | 高速、直感的、WCSS で品質評価可能 | 球形クラスタを仮定、局所最適解のリスク | kmeans.md |
k-means は各点を最近傍の重心に割り当てるだけの単純な手法なので高速ですが、クラスタが球形にまとまっていることを前提とします。
そのため三日月形のように球でとらえられない構造では、意図した分かれ方にならない場合もあります。
k-means の初期化戦略(Init)
k-means の初期重心の選び方です。
どちらもクラスタリング手法ではなく k-means の内部設定であり、Lloyd's アルゴリズム本体(割り当て、更新、収束)は共通です。
Lloyd's アルゴリズムは初期重心の選び方によって行き着く解が変わるため、この部分だけを設定として切り出しています。
| 初期化戦略 | 説明 | 適した場面 |
|---|---|---|
| k-means++ | D² 比例確率でサンプリング(Xoshiro256Plus、n・k から導出した固定シード) | 局所最適を避けたい、品質優先 |
| Deterministic | k-means++ と同じ D² 比例確率サンプリング(linfa 委譲)。シードを 42 に固定 | 完全な決定論的再現性が必要 |
両者はサンプリングの方法自体が同じで、違うのはシードの決め方だけです。
常に同一の結果が必要という要件がなければ、デフォルトの k-means++ のままで問題ありません。
分割数(k)の決め方
エルボー法は k-means を補助する手法であり、クラスタリング手法そのものではありません。
k-means を実行する前に、いくつのクラスタに分割するかを決めるために使います。
| 手法 | 役割 | 強み | 注意点 | 詳細 |
|---|---|---|---|---|
| エルボー法 | クラスタ内二乗和(WCSS)の変化率から最適な を自動推定 | ユーザーが を指定不要 | WCSS が滑らかだと推定精度が下がる | elbow.md |
エルボー法は から Max k までの k-means をすべて実行して WCSS を比べるため、Max k を大きくすると実行時間もそのぶん延びます。
また、クラスタ数に唯一の正解があるわけではないので、推定された が納得のいくものでなければ、Manual モードで直接指定することもできます。
ワークフロー
以上の設定を踏まえると、実行時の流れは次のようになります。
flowchart TD
start["クラスタリング実行"] --> sel{"k 選択モード"}
sel -- "Elbow (Auto)" --> elbowStep["エルボー法で k=2〜max_k を総当たりし<br/>最適 k を自動推定"]
elbowStep --> runElbow["推定した k で k-means を実行<br/>(Init 戦略を適用)"]
sel -- "Manual" --> runManual["ユーザ指定の k で k-means を直接実行<br/>(Init 戦略を適用)"]
init{"Init 戦略<br/>(k-means の初期化のみ異なる)"}
init -- "k-means++" --> initA["D² 比例確率サンプリング<br/>(シードは n・k から導出)"]
init -- "Deterministic" --> initB["同じ D² 比例確率サンプリング、<br/>シードを 42 に固定"]
入力空間の選び方
| 設定 | 使うフィーチャー | 向いている分析 |
|---|---|---|
| Objective Space | 目的関数値のみ | 性能が似たトライアルを見つけたい |
| Variable Space | パラメータ値のみ | 設計変数のパターンを把握したい |
| Combined | 目的関数 + パラメータ | 両空間の関係を統合的に見たい |
たとえば Objective Space では目的関数値だけを使うため、設計変数がまったく異なるトライアルであっても、性能が近ければ同じクラスタにまとまります。
逆に Variable Space では設計変数だけを使うので、似た設計どうしがまとまり、そこから性能が分かれているかどうかを読み取れます。
関連手法
同じ目的(構造の把握)を持つ別のウィジェットとして、次のものも利用できます。
- Dendrogram:階層クラスタリングにより、事前に を決め打ちせず完全な併合木を構築します
- PCA Biplot:trial と変数を標準化済みの 2D 主成分平面に投影します
- SOM Map:自己組織化マップにより、固定 分割を補完するトポロジー保存の 2D マップを描きます
k-means は を決め打ちする手法です。
そもそもいくつのまとまりがあるのか見当がつかない場合は、$k$ を決めずに済む Dendrogram の併合木を先に眺めておくことで、$k$ の見当をつけやすくなります。