空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

機械学習のお勉強(性能評価)

全体の考え方

機械学習における学習方法と性能評価の基礎知識 - Build Insider

交差検定(クロスバリデーション)など機械学習の評価方法まとめ : 新規事業のつくり方

検証

ホールドアウト法

学習データとテストデータを単純に分割

参考:

機械学習の性能を正しく評価するための検証手法 - Qiita

k分割交差検証

ランダムにk個に分割し、k-1個をテストに使用し、これをk回繰り返す

参考:

機械学習における交差検証法の実装(備忘録) - Qiita 

「そのモデルの精度、高過ぎませんか?」過学習・汎化性能・交差検証のはなし - 六本木で働くデータサイエンティストのブログ

http://musashi.osdn.jp/tutorial/mining/xtclassify/accuracy.html

入れ子式の交差検証

さまざまな機械学習アルゴリズムからどれかを選択したい時に使用

クロスバリデーションでは予測性能を評価できない!ダブルクロスバリデーション(クロスモデルバリデーション)のススメ : 大学教授のブログ (データ分析相談所)

性能評価

正解率以外にも評価する指標が存在する

混同行列

真陽陰性(TP,TN)、偽陽陰性(FP,FN)を表現する行列

sklearn -> confusion_matrix(y_true=,y_pred=)

で作成できる

 適合率

PRE = TP / (TP + FP)

再現率

REC = TP / (FN + TP)

F1

よく使用される評価指標らしい

F1 = 2 * (PRE * REC) / (PRE + REC)

画像の読み込み方法

  1. chainer
    1. argparseで設定
      1. face_prediction/facePredictionTraining.py at master · tommyfms2/face_prediction · GitHub
      2. face_prediction/image2TrainAndTest.py at master · tommyfms2/face_prediction · GitHub
    2. path ベタ書き
      1. cnn-animeface-keras/animeface.py at master · satopirka/cnn-animeface-keras · GitHub
  2. OpenCV
    1. listdirで読み込み
      1. フォルダ内の全画像ファイルに対して一括処理を行う(python) - 技術メモ集
画像読み込みサンプル(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: ベイズ的最適化、グリッドサーチ、ランダムサーチも可能

Pythonでベイズ最適化を使ってハイパーパラメータを探索するライブラリ実装のメモ - Qiita

ハイパーパラメータの最適化と結果の見方【Pythonとscikit-learnで機械学習:第8回】