Top / SJS / 2016 / ex06

SJS2016 ex06 [edit]

これまでの分 [edit]

  • 以前の分を全て報告してokをもらってから,今回分にすすみましょう.

課題A [edit]

最短距離法による顔認識(1)

SJS/2016/ex05 の顔画像を3つのクラス(猫,女性,男性)に分類する識別問題を考え,最短距離法による識別の実験をやってみよう.

  • 最短距離法について,PIP/2016 の講義資料,ウェブや書籍で調べなさい
  • 次の課題Bで考えるように,本当は「学習データ」と「テストデータ」を分けて実験するべきである.しかし,まずは全データを使ってクラス毎の平均を求めて,それをプロトタイプとして全データを分類するプログラムを作ろう.
  • データ毎に「識別されたクラス」,「正解のクラス」を出力するとともに,誤識別率すなわち全データのうち識別を間違えたデータの割合を計算して出力するようにしなさい.

課題B [edit]

最短距離法による顔認識(2)

データを「学習データ」と「テストデータ」に分けて課題Aと同様の実験をしよう.

  • 「学習」とは何か,データを「学習データ」と「テストデータ」に分けるのはなぜか,について PIP/2016 の講義資料,ウェブや書籍で調べなさい.
  • 231枚の画像からランダムに選んだ 131 枚を学習データ,残りをテストデータとする実験プログラムを作ろう.次の例を参考にしたらよい.
    In [11]: X = np.arange(10).reshape((5,2))
    
    In [12]: X
    Out[12]: 
    array([[0, 1],
           [2, 3],
           [4, 5],
           [6, 7],
           [8, 9]])
    
    In [13]: idx = np.random.permutation( X.shape[0] )
    
    In [14]: idx
    Out[14]: array([2, 3, 4, 1, 0])
    
    In [15]: idxL, idxT = idx[:3], idx[3:]
    
    In [16]: idxL
    Out[16]: array([2, 3, 4])
    
    In [17]: idxT
    Out[17]: array([1, 0])
    
    In [18]: XL = X[idxL]
    
    In [19]: XT = X[idxT]
    
    In [20]: XL
    Out[20]: 
    array([[4, 5],
           [6, 7],
           [8, 9]])
    
    In [21]: XT
    Out[21]: 
    array([[2, 3],
           [0, 1]])
    
  • np.random.permutation 等の関数は,特に何もしなければ毎回異なる乱数を生成するので,バグ取りなどの際には都合が悪い.次のように乱数の種を指定すれば,再現性のある実験をできるようになる.
    In [12]: np.random.seed(0)   # 種として 0 を指定
    
    In [13]: np.random.rand(5)
    Out[13]: array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318,  0.4236548 ])
    
    In [14]: np.random.rand(5)
    Out[14]: array([ 0.64589411,  0.43758721,  0.891773  ,  0.96366276,  0.38344152])
    
    In [15]: np.random.seed(0)     # 再び種を 0 に
    
    In [16]: np.random.rand(5)
    Out[16]: array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318,  0.4236548 ])
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-10-27 (木) 22:30:16 (333d)