機械学習のお勉強(性能評価)
全体の考え方
機械学習における学習方法と性能評価の基礎知識 - Build Insider
交差検定(クロスバリデーション)など機械学習の評価方法まとめ : 新規事業のつくり方
検証
ホールドアウト法
学習データとテストデータを単純に分割
参考:
機械学習の性能を正しく評価するための検証手法 - Qiita
k分割交差検証
ランダムにk個に分割し、k-1個をテストに使用し、これをk回繰り返す
参考:
「そのモデルの精度、高過ぎませんか?」過学習・汎化性能・交差検証のはなし - 六本木で働くデータサイエンティストのブログ
http://musashi.osdn.jp/tutorial/mining/xtclassify/accuracy.html
入れ子式の交差検証
さまざまな機械学習のアルゴリズムからどれかを選択したい時に使用
クロスバリデーションでは予測性能を評価できない!ダブルクロスバリデーション(クロスモデルバリデーション)のススメ : 大学教授のブログ (データ分析相談所)
性能評価
正解率以外にも評価する指標が存在する
混同行列
真陽陰性(TP,TN)、偽陽陰性(FP,FN)を表現する行列
sklearn -> confusion_matrix(y_true=
で作成できる
適合率
PRE = TP / (TP + FP)
再現率
REC = TP / (FN + TP)
F1
よく使用される評価指標らしい
F1 = 2 * (PRE * REC) / (PRE + REC)
画像の読み込み方法
- chainer
- OpenCV
- listdirで読み込み
画像読み込みサンプル(OpenCV)
フォルダ分けされた大量の学習画像を一括で読みこむ方法(python) - 技術メモ集
# -*- coding: utf-8 -*- import os import cv2 class Prepro(object): def __init__(self): self.data_dir_path = u"./data/" self.dir = os.listdir(r'./data/') def get_image_and_label(self): dir_list = sorted([x for x in self.dir if os.path.isdir(self.data_dir_path+x)]) label_f = open('list.txt', 'w') image_list = [] label_list = [] dir_label = 0 for dir_name in dir_list: label_f.write(str(dir_name)+","+str(dir_label)+"\n") file_list = os.listdir(self.data_dir_path+dir_name) for file_name in file_list: root, ext = os.path.splitext(file_name) if ext == u'.png' or u'.jpeg' or u'.jpg': abs_name = self.data_dir_path+dir_name+"/"+file_name image = cv2.imread(abs_name) image_list.append(image) label_list.append(dir_label) dir_label +=1 return image_list, label_list if __name__ == '__main__': prepro = Prepro() images, lists = prepro.get_image_and_label()
参考:
face_prediction/facePredictionTraining.py at master · tommyfms2/face_prediction · GitHub ここのwhoiswhoあたり
フォルダ内の全画像ファイルに対して一括処理を行う(python) - 技術メモ集
[Python]フォルダ内のファイルを取得する方法 - Qiita
python:画像処理tips その4 フォルダ内の画像の大きさを揃える - MATHGRAM
cnn-animeface-keras/animeface.py at master · satopirka/cnn-animeface-keras · GitHub
パラメータチューニング
sk-learn: ベイズ的最適化、グリッドサーチ、ランダムサーチも可能