1週間以上前に「コードは短いが奥が深い」で、pythonを用いた手書き文字の認識を取り上げました。少し間が空いてしまいましたが、その続きです。 手書き文字データは、1文字で8×8=64ピクセルもの情報があり、64次元の空間に描く必要がありますが、3次元の世界では描くこともできません。そこで、主成分析という手法で次元を下げる必要があります。主成分分析については「分散が大きいと情報量は?」「ばらつきが大きい方が主に効く?」で説明しましたので、ご覧ください。 それでは、今回のプログラムコードを説明いたします。
資料はこちら → 機械学習5
p.1 64次元を3次元に減らすモジュールがscikit-learnの中にある「decomposition」です。3行目で読み込んでいます。decompositionの中にあるPCA(Principal Component Analysis:主成分分析)を用いて64次元から3次元に次元を減らします。 固有値の大きい方から3つとってきてx、y、及びz軸の座標にしていると思われます。 人が計算したら膨大になるものを一瞬で計算してくれるわけです。
p.2 Xrに格納された3次元の点を0~9の文字ごとに色別して3次元図にプロットするプログラムです。コードはこちら→ ml0603
p.3 実行結果です。 0と6と9あるいは1と7は近い距離にあることがわかりますが、上手く分離できていそうです。
手書きデータでも上手く色別できそうなことがイメージ図で理解できましたでしょうか?