機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

K-means法

導入

D次元のデータ集合\{{\bf x}_1,\ldots,{\bf x}_N\}K個のクラスターに分割することを考えます。

プロトタイプと呼ばれるK個のD次元ベクトル{\boldsymbol\mu}_kを導入します。
各データに対し、対応する2値指示変数r_{nk}\in\{0,1\}を定めます。

r_{nk},{\boldsymbol\mu}_kのイメージは下図です。(K=3の場合)

f:id:olj611:20210502005139p:plain:w600

目的関数

目的関数Jを以下のように定めます。

\begin{eqnarray}
J=\sum_{n=1}^N\sum_{k=1}^Kr_{nk}||{\bf x}_n-{\boldsymbol\mu}_k||^2\tag{1}
\end{eqnarray}

目的関数Jは各データ点からそれらが割り当てられているベクトル{\boldsymbol\mu}_kまでの
二乗距離の総和を表しています。

この目的関数を以下の方法で最小化します。
1: {\boldsymbol\mu}_kの初期値を選ぶ。(適当に決める)
2: {\boldsymbol\mu}_kを固定しつつr_{nk}についてJを最小化する。
3: r_{nk}を固定しつつ {\boldsymbol\mu}_kについてJを最小化する。
4: Jが収束していれば、終了する。そうでなければ2へ戻る。

2: {\boldsymbol\mu}_kを固定しつつr_{nk}についてJを最小化する

n番目のデータ点を中心にそれに最も近いクラスター中心に割り当てます。

\newcommand{\argmin}{\mathop{\rm arg~min}\limits}\begin{eqnarray}
r_{nk}=
\left\{
    \begin{array}{l}
      1\hspace{20px}k=\argmin_j||{\bf x}_n-{\boldsymbol\mu}_j||^2\\
     0\hspace{20px}それ以外
    \end{array}\tag{2}
  \right.
\end{eqnarray}

3: r_{nk}を固定しつつ {\boldsymbol\mu}_kについてJを最小化する

J{\boldsymbol\mu}_k微分して、={\bf 0}とおきます。

\begin{eqnarray}
&&\frac{\partial}{\partial{\boldsymbol\mu}_k}J={\bf 0}\\
&&\Leftrightarrow\frac{\partial}{\partial{\boldsymbol\mu}_k}\sum_{n=1}^N\sum_{j=1}^Kr_{nj}||{\bf x}_n-{\boldsymbol\mu}_j||^2={\bf 0}\\
&&\Leftrightarrow\frac{\partial}{\partial{\boldsymbol\mu}_k}\sum_{n=1}^N\sum_{j=1}^Kr_{nj}({\bf x}_n^\top{\bf x}_n-2{\boldsymbol\mu}_j^\top{\bf x}_n+{\boldsymbol\mu}_j^\top{\boldsymbol\mu}_j)={\bf 0}\\
&&\Leftrightarrow\sum_{n=1}^N\sum_{j=1}^Kr_{nj}\left(-2\frac{\partial}{\partial{\boldsymbol\mu}_k}^\top{\boldsymbol\mu}_j{\bf x}_n+\frac{\partial}{\partial{\boldsymbol\mu}_k}\right)={\bf 0}\\
&&\Leftrightarrow\sum_{n=1}^Nr_{nk}(-2{\bf x}_n+2{\boldsymbol\mu}_k)={\bf 0}\\
&&\Leftrightarrow{\boldsymbol\mu}_k\sum_{n=1}^Nr_{nk}=\sum_{n=1}^Nr_{nk}{\bf x}_n\\
&&\Leftrightarrow{\boldsymbol\mu}_k=\frac{\sum_{n=1}^Nr_{nk}{\bf x}_n}{\sum_{n=1}^Nr_{nk}}\tag{3}
\end{eqnarray}

(3)の2行目でJの2つ目の\sumのインデックスをkと被らないようにjにしています。

K-meansアルゴリズムをグラフで見る

K=2の場合の処理を下図に示しました。

(a)では、{\boldsymbol\mu}_kの初期値を決めています。
(b)では、r_{nk}を更新しています。
(c)では、{\boldsymbol\mu}_kを更新しています。
以降は繰り返しです。

f:id:olj611:20210502010425p:plain

偉人の名言

f:id:olj611:20210502121614p:plain:w300
1つの目標を定めて
毎日積み重ねることが大事である。
谷川浩司

参考文献

パターン認識機械学習 下巻

動画

目次へ戻る