In [8]:
# enable showing matplotlib image inline
%matplotlib inline
# autoreload module
%load_ext autoreload
%autoreload 2
# load local package
import sys
import os
sys.path.append(os.path.join(os.getcwd(), "../../../")) # load project root
会議の画像をGoogle等から収集し、images
フォルダに格納します。なお、画像の拡張子はPNG
に統一しています。
収集した画像をRekognitionを利用し、特徴量に変換します。この役割を担うのがmake_training_data.py
です。
変換されたデータは、training_data.csv
として保存されます。
training_data.csv
を作成します。training_data.csv
に追記します。ファイルが作成されたら、良い会議なのか悪い会議なのか、ラベル付を行います(良い:1、悪い:0)。ラベルは、ファイルの一番左端に設定します。
このファイルを、training_data_with_label.csv
として保存してください。
In [9]:
from sklearn import preprocessing
import make_model as maker
dataset = maker.load_data()
header = dataset["header"][1:] # exclude label column
y = dataset["y"]
X = dataset["X"]
scaler = preprocessing.StandardScaler().fit(X) # regularization
X_R = scaler.transform(X)
print(y.shape)
print(X_R.shape)
print(header)
会議を分類するモデルにはSVMを使用します。これで、有効な特徴量を探していきます。
In [21]:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
get_headers = lambda s: [i_h[1] for i_h in enumerate(header) if s[i_h[0]]]
selector = SelectKBest(f_classif, k=10).fit(X_R, y)
selected = selector.get_support()
kbests = sorted(zip(get_headers(selected), selector.scores_[selected]), key=lambda h_s: h_s[1], reverse=True)
print(kbests)
ここからいくつか特徴量を選択し、モデルを作成します。今回はデータが少ないこともあり、なるべくシンプルなモデルとし特徴量を2つに絞りたいと思います。smile系の特徴量は1つに限定しました。あと一つですが、以下検討の結果pose>pitch minを使用することにしました。
選択した特徴量を元にモデルを作成し、学習させます。モデルは今回SVMを使用しますが、そのパラメーターについてはGrid Searchで最適化します。
モデルが作成できたら、model/conf_predict.pkl
に保存します。
In [54]:
import make_model as maker
header_index = lambda hs: [i_h[0] for i_h in enumerate(header) if i_h[1] in hs]
columns = header_index(["smile avg", "pose>pitch min"])
model = maker.make_model(y, X, columns, save_model=True)
print(model)
In [ ]: