Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

エルボー法

概要

エルボー法は、k-means クラスタリングの最適なクラスタ数 kk を自動推定する手法です。 kk を変化させたときの WCSS(クラスタ内二乗和)の変化率が急激に鈍化する「肘(elbow)」の点を最適 kk とみなします。

Tunny Dashboard では「Elbow (Auto)」モードで自動推定を行い、ユーザが手動指定しなくても適切な kk を選択できます。


理論背景

WCSS の挙動

kk を増やすにつれて WCSS は必ず単調減少します。 k=Nk = N(点と同数)にすれば WCSS は 0 になりますが、それでは意味がありません。

k=1WCSS 最大kk=NWCSS=0k = 1 \Rightarrow \text{WCSS 最大} \quad \xrightarrow{k\uparrow} \quad k = N \Rightarrow \text{WCSS} = 0

「十分な分割効果」が得られる点を超えると、WCSS の減少量は急速に小さくなります。 この屈曲点がエルボーであり、過剰分割(過学習的クラスタリング)を避けた適切な kk とみなされます。


アルゴリズム

ステップ 1:WCSS の収集

k=2,3,,kmaxk = 2, 3, \ldots, k_{\max} のそれぞれで k-means を実行し、WCSS を記録します:

Wk=WCSS(k)(k=2,,kmax)W_k = \text{WCSS}(k) \quad (k = 2, \ldots, k_{\max}) kmax=min(N,  Max k 設定値)k_{\max} = \min(N,; \text{Max k 設定値}) です。 上限のデフォルトは 10 で、k 選択が Elbow (Auto) のとき、クラスタウィジェットの「Max k」(範囲 2〜50)で変更できます($N$ はトライアル数)。 WkW_k の実体について補足します。 ここで収集される各 WkW_k の実体は、最近傍重心への二乗距離の標本平均(WCSS / N)であって、WCSS の総和ではありません(kmeans.md の該当注記を参照)。 NN はどの kk を試しても共通なので、これは各 WkW_k を共通の定数 1/N1/N 倍するだけであり、後述する二次差分の最大位置には影響しません。

ステップ 2:二次差分の計算

WCSS 列の二次有限差分を計算します:

Δ2Wi=Wi2Wi+1+Wi+2(i=0,1,)\Delta^2 W_i = W_i - 2W_{i+1} + W_{i+2} \quad (i = 0, 1, \ldots)

インデックス iiΔ2Wi\Delta^2 W_i は、位置 k=i+3k = i + 3 における曲線の「曲がり具合(凹性)」を表します。 直線では Δ2W=0\Delta^2 W = 0 となり、エルボー点では Δ2W\Delta^2 W が最大となります。

ステップ 3:推奨 kk の決定

k^=arg maxi  Δ2Wi  +  3\hat{k} = \operatorname*{arg,max}_{i}; \Delta^2 W_i ;+; 3 +3+3 のオフセットは、$k = 2$ から始まる WCSS インデックスと二次差分インデックスのずれによります。

変数 kk との対応
W0W_0 k=2k = 2
Δ2W0\Delta^2 W_0 k=2,3,4k = 2, 3, 4 の 3 点を使用 → 肘は k=3k = 3=0+3= 0 + 3
Δ2Wi\Delta^2 W_i 肘は k=i+3k = i + 3

推定 kk[2,  kmax][2,; k_{\max}] の範囲にクランプされます。


具体例

k=2,3,4,5k = 2, 3, 4, 5 での WCSS が以下のとき:

kk WCSS
2 1000
3 400
4 350
5 340

二次差分:

Δ2W0=10002×400+350=150(肘候補: k=3)\Delta^2 W_0 = 1000 - 2 \times 400 + 350 = 150 \quad \text{(肘候補: } k=3\text{)}

Δ2W1=4002×350+340=40\Delta^2 W_1 = 400 - 2 \times 350 + 340 = 40 Δ2W0\Delta^2 W_0 が最大のため、推奨 k=0+3=3k = 0 + 3 = 3 です。


特殊ケース

ケース 動作
kmax<2k_{\max} < 2 WCSS を計算せず、 k^=2\hat{k} = 2 を返す
試行数が 2 以下(差分列が短い) 二次差分を計算せず、 k^=試行数+1\hat{k} = \text{試行数} + 1 を返す
全点が 1 点に重なる(距離 0\approx 0 重複回避フォールバックで後続の点を重心として使用

強みと限界

強み

  • ユーザが kk を指定しなくてよい
  • 計算コストが低い( kmaxk_{\max} 回の k-means 実行で完了)
  • 二次差分は線形トレンドをキャンセルし、曲率だけを評価するため頑健

限界

  • WCSS が滑らかに減少しエルボーが不明瞭なデータでは、推定精度が下がります
  • クラスタが自然に存在しないデータ(一様分布など)では、過剰な kk を推奨する場合があります
  • kmaxk_{\max} のデフォルトは 10 です。より多くのクラスタ数が必要なデータでは、「Max k」設定(最大 50)を引き上げれば真のエルボーを探索範囲に含められます(k-means の実行回数は増えます)

推定結果が不自然なとき

エルボー法の推定が直感と合わない場合は、「Manual」モードに切り替えて kk を直接指定します。 その際は、WCSS が急激に下がる kk の直後を選び、解釈性を重視する場合は小さい kk を優先するとよいです。


参考文献