【Python】標準偏差をもとに特徴を正規化する

PRML TALK #2 を開催しました。

ということで毎回の習慣として例題か演習問題で解いた問題を実際にプログラムにしてみてます。


今回は4つの2次元ベクトル(それぞれ2つの特徴をもつ4つのサンプルデータ)に対してパターンの認識の前処理として正規化を行ってそれぞれの特徴を偏りなく使えるようにする感じです。

ソースは以下。

book_speaking-system/normalizer.py at master · totzYuta/book_speaking-system · GitHub

Vectorクラスは3つのメソッドをもっていてそれぞれ

  • show(): そのベクトルを単に表示する
  • normalize(): 正規化したベクトルを返します
  • plot(): もとのベクトルと正規化したベクトルをmatplotlibを使ってプロットします

今回はそれぞれの特徴の標準偏差が1になるように正規化してます。

インタラクティブシェルで実行してみると

▶ python -i normalizer.py
>>> v = Vector([[3, 2], [3, 4], [5, 4], [5, 6]])
>>> v.show()
[[3, 2], [3, 4], [5, 4], [5, 6]]
>>> v.normalize()
normalizing...
[[3.0, 1.414213562373095], [3.0, 2.82842712474619], [5.0, 2.82842712474619], [5.0, 4.242640687119285]]
>>> v.plot()
ploting...
normalizing...

Screenshot 2015-02-28 17.29.35.png

みたいな感じになります。オブジェクト指向で書こうとがんばってるのですがオブジェクト指向多分ちゃんと理解できてない+Pythonちゃんと理解できてないでコードがまずことになってそう。。。笑

見てくれた方アドバイスいただけたら本当に嬉しいです。

第三回はk-NN法など認識部分やる予定!