*SJE2015 ex08 [#sf604516] **課題A [#h6665926] [[SJE/2015/ex05]] 課題A のプログラムをより汎用に使えるようにするために,次のことをやろう. ***step1 [#h423a90c] + 以下のプログラムの fnCat と fnFace の所を自分の環境に合わせて書き換えて,プログラムが動くようにする. + そのプログラムの動作を眺めて(ipythonで動かして,いろいろな変数の中身を表示させたらよい),何をやっているかを理解する ++ まずは,getData の戻り値 X と label が何を表しているのかを理解しよう ++ main の側では,getData の戻り値から,X と lab を学習用(L)とテスト用(T)に分ける作業を行っている.この部分がやってることを理解しよう #pre{{ import numpy as np import cv2 def getData(): fnCat = '../cat/cat%03d.png' fnFace = '../face100/hoge%03d.png' X = np.empty( ( 131 + 100, 64 * 64 ) ) label = np.empty( 131 + 100, dtype = int ) for i in range( 131 ): img = cv2.imread( fnCat % i, cv2.IMREAD_GRAYSCALE ) X[i, :] = img.reshape( -1 ) label[i] = 0 for i in range( 100 ): img = cv2.imread( fnFace % i, cv2.IMREAD_GRAYSCALE ) X[i + 131, :] = img.reshape( -1 ) if i < 50: label[i + 131] = 1 else: label[i + 131] = 2 return X, label if __name__ == '__main__': X, lab = getData() print X.shape, lab.shape idxL = np.arange( X.shape[0], dtype = int ) % 2 == 0 print idxL XL, labL = X[idxL], lab[idxL] ndatL = XL.shape[0] XT, labT = X[-idxL], lab[-idxL] ndatT = XT.shape[0] print ndatL, ndatT }} **step2 [#w2bcbf82] 上記のプログラムを利用して,[[SJE/2015/ex05]] の最短距離法のプログラムを作りなおそう. ヒント: #pre{{ labL == 0 In [26]: labL == 0 Out[26]: array([ True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], dtype=bool) In [27]: hoge = XL[labL == 0, :] In [28]: hoge.shape Out[28]: (66, 4096) In [29]: np.mean(hoge, axis = 0) }}