2018年6月21日木曜日

Scikit-learnの基本的な使用方法

Scikit-learn は Python の機械学習のライブラリ.使い方は非常に簡単で,共通のコマンド一発で様々な手法を用いて機械学習をすることができる.ドキュメントが豊富で,最適化すべきパラメーターの情報に簡単にアクセスすることができる.アドホックな凝った計算は難しいが普通の機械学習なら大体これで済む.

インストール
Scikit-learn は Python のライブラリのひとつなのでインストールするためにはターミナル上で以下のようなコマンドを打つ.

$ pip3 install scikit-learn

バージョン確認
ターミナルからバージョンを確認するには以下のように打つ.

$ python3 -c "import sklearn;print(sklearn.__version__);"

バージョンの更新
バージョンをアップグレードするには以下のコマンドを打つ.その時点での最新版がインストールされる.

$ pip3 install --upgrade scikit-learn

学習
インプットベクトルデータ xtrain とターゲットベクトルデータ ttrain に対して学習を行うには以下のように書く.
main() の中において,最初の行で予測器を生成し,次の行で学習を行う.
最初の行の DecisionTreeClassifier() を別の関数に書き換えるとその関数が指し示す手法での予測器を構築することができる.
以下の場合,決定木を用いた分類器となる.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sklearn
from sklearn.tree import DecisionTreeClassifier

def main():
predictor=DecisionTreeClassifier(criterion="gini",max_depth=4)
predictor.fit(xtrain,ttrain)

if __name__ == '__main__':
main()

グリッドサーチ
学習においては,特別な理由がない限りクロスバリデーションを用いたグリッドサーチを行うことで最適なパラメーターを探索する.
グリッドサーチは以下のようなライブラリを読み込み,以下のように書くことで実現できる.
main() の最初の行で探索するパラメーターを設定する.以下の場合,決定木の最適パラメーターの探索なので決定木用のパラメーターを指定する.
次の行では学習器 DecisionTreeClassifier() を上で設定したパラメーターのリストを読み込む.
このとき,cv= でクロスバリデーションのデータの分割数を,n_jonb= で計算に使用するスレッド数を指定できる.
次の .fit() で学習し,次の行の .best_estimator_ で最も性能が良い予測器を最終的な予測器とする.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sklearn
from sklearn.tree import DecisionTreeClassifier
from sklearn.grid_search import GridSearchCV

def main():
liparameter=[{"criterion":["gini","entropy"],"max_depth":[i for i in range(1,6,1)],"random_state":[123],}]
licv=GridSearchCV(DecisionTreeClassifier(),liparameter,cv=5,n_jobs=5)
licv.fit(xtrain,ttrain)
predictor=licv.best_estimator_

if __name__ == '__main__':
main()

モデルの保存
学習済みのモデルは以下のようなライブラリおよび文法を用いて保存する.これによってファイル predictor_dt.pkl が生成される.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sklearn

def main():
sklearn.externals.joblib.dump(predictor,"predictor_dt.pkl",compress=True)

if __name__ == '__main__':
main()

保存したモデルの呼び出し
保存したモデルを読み込むには以下のようなライブラリをインクルードして,以下のように書く.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sklearn

def main():
sklearn.externals.joblib.load("predictor_dt.pkl")

if __name__ == '__main__':
main()

予測器による予測
構築した予測器 predictor を用いてインプットベクトルデータ xtest に対して予測を行うには以下のように書く.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sklearn
from sklearn.tree import DecisionTreeClassifier

def main():
print(predictor.predict(xtest))

if __name__ == '__main__':
main()

0 件のコメント:

コメントを投稿