【機械学習】SOM（自己組織化マップ）を理解するための周辺知識を書き散らかしていく。


周辺知識を書き散らかしているので、SOM自体については別の記事にします。
ついでに各手法のメリット、デメリットも。画像はいつか作ります。。。

#クラスタリングとは

- 教師なし学習手法  
- 変数がたくさんある（多変量）サンプルデータが大量にあり、ぱっと見ではデータにどのような特徴があるかわからない時に、クラスタリングするとなんとなく分類することができる。
- 手法によって異なるが、クラスタリングはなんらかの主観や視点に基づいているため、客観的な証拠にはなり得ないことが多い。=>データの要約、可視化などに使える。

とりあえず主成分分析してみることが多い。（後述）


##次元圧縮法


- 次元削減とは、多次元からなる情報を、その意味を保ったまま、それより少ない次元の情報に落とし込むこと。
- あまりに次元の数が多くなってくると、人間の直感では把握しきれない（というか現実世界は三次元）。そこで問題になるのが、 __多次元空間では距離の差がつきにくくなるという性質。__
- この問題を解決するためには、とても大きい次元だった情報を、より少ない次元の情報に集約する手法が用いられる。__主成分分析(Principal Component Analysis; PCA)__ を使えば、大量の軸の情報を合成して、なるべく多くの情報を維持したまま10個や20個の指定した軸に再編することができる。このプロセスを __次元削減(dimension reduction)__ と呼ぶ。


データを可視化するなら、人間にも見えるように二次元or三次元まで次元削減を実行する。
データを圧縮するなら、削減数のチェックを踏まえつつ、次元削減を行う。



###主成分分析 （共分散行列）(PCA:Principal Component Analysis)

- ある次元にマッピングされているデータを、落としたい次元へ射影し、その射影（距離）の誤差を保持しながら次元削減すること。
- 射影誤差を情報損失量ともいう。誤差・損失量が小さいほど、それぞれのデータをよく保持している
- PCAにおいて射影先の直線は、「データのばらつきの大きい方向」を求めることで得ることができる。
- この「ばらつき」は「 __分散__ 」と言い換えることもでき、PCAは、最も分散の大きい方向を指すベクトルを得ることを目指す。

<dl>
  <dt>【メリット】</dt>
  <dd>２次元か３次元に落とし込めば、視覚的にわかりやすく情報を提示することができる</dd>
  <dd>計算で全てをこなすので、主観が少なく普遍性が強い。</dd>
  <dt>【デメリット】</dt>
  <dd>2次元に落とすと情報が削減されすぎてやばい（要出典or検証）</dd>
  <dd>斜めに分散しているデータに弱い。星座で考えるとわかりやすいが、人間の目では隣り合って見えても、やばいぐらい奥行きが違う星なんていくらでもある。</dd>
</dl>

=> あくまで「そういった傾向がある」程度の精度に落ちてしまうため、厳密な情報とは言えなくなる

https://qiita.com/NoriakiOshita/items/460247bb57c22973a5f0
https://logics-of-blue.com/principal-components-analysis/
https://qiita.com/aya_taka/items/4d3996b3f15aa712a54f
（ペイズ的主成分分析）https://qiita.com/ctgk/items/89c11192affe7f236852
http://home.a02.itscom.net/coffee/tako04Annex01.html



###k-means法
- 座標上にバラバラに散らばった点を、近い者同士でまとめる方法
- とりあえず適当にグループ分け（クラスタ決め）=>そのグループの中心を求める=>さっきのグループ分けは適当だっ他ので、一番近いグループの中心に基づいて再度グループし直し=>グループが固定されるまで繰り返し
- クラスタリングして、それをクラスタリングに用いる。その座標位置で次元圧縮することができるので、直接は関係ないが次元圧縮法。
- k-means++というのもあって、(k-meansだとランダムに重心を決めていたのに対し)こちらはデータ点からランダムに一つ重心を決める手法。k-meansは初期の重心を完全にランダムに設定しているため、重心同士が近かった場合にうまくクラスタリングすることができない。++の方は重み付き確率分布を用いることにより、重心の初期値依存を解決している。

<dl>
  <dt>【メリット】</dt>
  <dd>アルゴリズムがシンプルなので、何をやっているのかわかりやすい。</dd>
  <dt>【デメリット】</dt>
  <dd>クラスターの個数(分割数)を指定しなければならない</dd>
  <dd>重心との二乗距離を評価しているので、仮にデータに外れ値が混ざりこんでいた場合、そのデータの損失を低くするために重心が極端な値をとってしまう。</dd>
<dd>重心の初期値がランダムだったり、クラスタの個数を人が決めるので、偏りが出る。再現性がない。</dd>
</dl>

http://s0sem0y.hatenablog.com/entry/2017/07/01/091431
https://qiita.com/kurehajime/items/774883eb6c967ff073bb
http://tech.nitoyon.com/ja/blog/2009/04/09/kmeans-visualise/
k-means++
https://qiita.com/NoriakiOshita/items/cbd46d907d196efe64a3



###多次元尺度法 (MDS: multi-dimensional scaling) 
- 個体間の親近性データを、2次元あるいは3次元空間に類似したものを近く、そうでないものを遠くに配置する方法で、データの構造を考察する方法。
-  __計量多次元尺度法__ と __非計量多次元尺度法__ に大別され

<dl>
  <dt>計量多次元尺度法</dt>
  <dd>距離データそのものを低次元に配置する方法</dd>
  <dt>非計量多次元尺度法</dt>
  <dd>順序尺度のデータの類似度、あるいは距離に変換可能な親近性データを低次元に配置する方法。要するに<strong>なんらかの比率が保たれているデータ同士を距離に変換して考える</strong>方法？</dd>
</dl>

<dl>
- 目的としては、なんらかの表データから距離に換算できそうなデータ同士を、距離を表したマップに表すこと。
- 例えば、各都道府県の県庁所在地の座標と、各県庁ごとの距離のデータがあるときに、元々の日本地図を再現する、といったもの。

  <dt>【メリット】</dt>
  <dd>距離という身近なものに置き換え、可視化しているので、各データの相対関係がわかりやすい？</dd>
  <dt>【デメリット】</dt>
  <dd>距離に変換可能、というのが主観？</dd>
</dl>
ここ、はてなばっかですいません。調べ直します。
https://www1.doshisha.ac.jp/~mjin/R/Chap_27/27.html

次はSOMについても書きます