こんにちは。

本日は実装です。カーネルk平均法を実装します。言語はいつも通りPythonです。

Kernel K-meansとは?

非線形データのクラスタリング手法のです。前回紹介したカーネルトリックを用いてデータを高次元空間へと写し、k-meansを行います。このトリックを用いて非線形データを分離するのですが初期値に非常に依存し、時にうまく分離することができません。なので実際に使われているところは見たことないですね、、

アルゴリズム

K-meansとほとんど同じです。
  1. ランダムにcentroidをクラスタ数決める。
  2. 特徴空間において各データと各centroidからの距離を測る(総和D)
  3. 各データを最小の距離をもつクラスタに割り当てる
  4. STEP-2から繰り返す
収束条件としてはcentroidの移動距離などが使われることもありますが今回はiterationで固定です。
上記の画像はステップ-2で述べた距離Dについてです。一般のK-meansでは微分してcentroidを求めますがそれと比較するとこっちは少し複雑ですね。

  • \phiはカーネル
  • m_cは特徴空間での各クラスタの中心
  • \pi_cは各クラスタ
  • |\pi_c|は各クラスタの大きさ
m_cを代入すれば上記が得られます。あとはコードを書くだけです。
上述しましたがうまく分離するにはカーネル関数や初期値によります。でわ