読者です 読者をやめる 読者になる 読者になる

IT NoViCe

IT 初心者の勉強備忘録ブログ

クラスタ分析

手に入れたデータを分類するには様々な手法があります。

今日はその中の一つ、クラスタ分析 について書いていきます。

 

 

教師あり学習

データ分類には教師の有無によって教師あり分類教師なし分類に分かれます。

ここでいう教師ありとは「出力するべきものが決まっている」くらいの意味合いです。

各データをどのように分類したら正解というのが

定められたデータがあるものを教師あり学習と呼んでいます。

有名なものでは画像認識などですね。

 

教師あり学習には以下のようなものがあります。

  1. パーセプトロン
  2. ロジスティック回帰
  3. サポートベクターマシン(SVM)
  4. ランダムフォレスト

種類は上記以外にも数多くありますが、

今の私がぱっと思いつくのはこれくらいでした。

 

書いていて思いましたが、教師あり学習も教師なし学習も

機械学習の手法を分類するときの言い方ですね。

上記の手法も機械学習の書籍で出てきた手法ばかりでした。

これらについては機械学習について書くときに詳しく書いていきます。

 

教師なし学習

出力の正解のない教師なし学習には以下のようなものがあります。

  1. クラスタ分析
  2. 主成分分析
  3. 自己組織化写像(SOM)

個人的には主成分分析とSOMは次元削減というイメージが強いです。

クラスタ分析は各データをクラスタに分類する手法の総称になります。

クラスター分析と書かれていることも多いですが、

 個人的にはクラスタ分析という書き方が好みです。)

 

クラスタ分析

今回はクラスタ分析の手法の中から非階層型のk-means法について書いていきます。

 

k-means法のアルゴリズム

  1. クラスタの重心をランダムに設定する。
  2. すべてのデータを最も近い重心のクラスタに再設定する。
  3. クラスタごとに重心をを計算しなおす。
  4. 2~3をクラスタの重心が変化がなくなるまで繰り返す。

アルゴリズムはすごいシンプルですね。

ただk-means法には、

という問題があります。

 

初期値依存性

最初に各クラスタの重心の初期値をランダムに設定するため、

試行のたびにクラスタが変化する可能性があります。

距離の離れているデータを初期値にする方法(KKZ法、k-means++法)がありますが、

それぞれ 外れ値に弱い、程度は少ないが初期値に依存するなどの問題があるそうです。

 

最適クラスタ

k-means法ではクラスタ数は人が決める必要があるため、

最適なクラスタ数が分かりません。

こちらの対策にはエルボー法やシルエット法*1や、x-means法*2などがあります。

 

Pythonによる実装

実際にk-means法を使いたければscikit-learnというライブラリから使用できます。

今回はより理解するために自分で組んでみました。

 

クラスタ分析

 

最近やっと覚えたGistを使ってみました。

それについても前回書いたのでよかったら見てください。

 

yatsuca.hatenablog.com

 

簡単なアルゴリズムでも自分で組むと苦労しました(笑)

でも、アルゴリズムを覚えるのには良いですね。

 

上記の初期値依存性とか最適クラスタ数の問題もいずれ取り組めたら、

なんて考えていますが今回はここまで。