想定読者
機械学習の知識が何もない方向けに作成しています。少し理解のある方は、必要な知識の節は飛ばしてもらって構いません。
必要な知識
必要な知識をなるべく難しい言葉を使わずに解説します。いや読むのだるいなという方は読み飛ばしてください。
教師有り学習、教師なし学習
教師有り学習とは、正解ラベルが与えられているデータから学習を行うもの、教師なし学習は、正解ラベルが無いものです。え?わかりにくい?
すごく分かりやすく言うと、私たち(使う側)が、正解を与える、与えないで分類します。
###教師有り学習の例
明日の天気を予想したいがために、今までの天気のデータを使用したいとします。当然、今までの天気はもう正解が分かります。そしてこれは、昨日の天気は雨。おとといの天気は晴れ、と私たちがコンピュータに正解を与えているため、教師有り学習に含まれます。
###教師なし学習の例
迷惑メールの分別をしたいとします。この時、そのメールが本当に迷惑メールかどうかということは、教えないこととします。コンピュータは、メールの中身を見て、それらををふたつのグループに分けます。これが教師なし学習です。この例では、最後人間が見てどちらがより迷惑メールか?を考えなければいけません。
##クラスタリングアルゴリズム
クラスタリングアルゴリズムアルゴリズムとは、ある規則に基づいて、与えられた要素を似た者同士でグループ分けするものです。
##階層的クラスタリング
階層的クラスタリングとは、その名の通り階層的にクラスタリングを行うものです。初めはそれぞれが一つのグループに属しています。その後、段々似たもの同士のグループをくっつけていき、最終的には全員が属するひとつのグループになります。トーナメント表を思い浮かべてください。
最初は4人だったものが、2人と減っていき、最後は1人になりますね。階層的クラスタリングでは。最初は1グループに1人しか属していません。つまり、4グループになります。試合をすると、昨日の敵は今日の友ということで、グループが合併されると思ってください。
試合が進行していくにつれ、グループ数が減っていきます(1グループに属する人数は増える)。最終的には、1つのグループになる事、任意の場所でトーナメント戦をを中止にすれば、好きなグループ数で止めれることも重要な強みです。非階層的クラスタリングが、そうなっていないものです(ひどい)。おそらく階層的クラスタリングのほうが理解が難しいため、今回はこちらを解説しました。
K-平均法について
k-means法は、教師なし学習、非階層的クラスタリングの部類に属するクラスタリングアルゴリズムです。
アルゴリズムを解説していきます。色々なパターンに対応できるよう、抽象度を上げて解説します。
初めのセントロイドを決める
おい、まーた知らない単語出てきたよという声が聞こえます。大丈夫です。セントロイドとは、そのグループのリーダーだと思ってください。K-平均法の「K」は、最終的にK個のグループに分けるという意味のKなので、たくさんいるデータの中から、K人リーダーを決めてあげましょう。
データをK個のクラスタに分割する
セントロイドをきめたら、すべてのデータがどのグループに属するか決めます。ここでの指標は様々あるため、必要に応じて使い分けなければいけませんが、K個あるセントロイドの中で、自分が一番似ているセントロイドが属するグループに属します。わかりにくければ、リーダーの中で自分と一番似ているのが太郎君だった場合、太郎君と同じグループに入ると読み替えてください。
重心を決める
全てのデータをどこかのグループに割り振ったら、もう一回似たようなことをします。具体的には、同じグループ内で重心を求め、それをセントロイドとして、一個前の作業に戻ります。重心を求めるのがいまいちピンとこない方は、同じグループ内で話し合いをして、それぞれの意見をまとめます。そのあとでほかのグループの意見を聞き、もう一度、自分が一番賛同できる意見のグループに属し...を繰り返すというイメージです。
終了条件
一個前のグループと、今回のグループ構成が全く変わらなかったら終了です。それ以降、グループ構成が変わることは無いです。
#まとめ
実際に実装するときは、もう少し難しくなります。何をもって「似ている」とするか?初めのセントロイドの決め方はランダムでいいのか?などの問題があります。一番簡単な例から実装するのであれば、二次元座標上に表現できるデータが好ましいかと思います。実装すると理解が深まるので、ぜひ一回実装してみてください。誤字脱字、内容の修正があればぜひ教えてくださると助かります。