はじめに
前回の記事で、機械学習の簡単なプログラムに触れてみました。
前回の記事のようなとても小規模なデータは実際には使われません。
機械学習は基本的にはデータが多い方が有利なので、通常はとても大規模なデータになってしまいます。
データが多いと、当然学習にも多くの時間を要します。
知らないとびっくりするかもしれませんが、1週間PCを放置して学習させるなどが当たり前にあります。
このような長時間の学習を、プログラム実行毎にしていては実用性も何もありません。
そこで、学習結果をモデルとして保存し、実際のプログラムではそのモデルを使用する形で実行することで、時間を短縮できます。
今回は、「保存プログラム」と「モデルを用いた予測プログラム」を作成していこうと思います。
なにをやっているかわからないと言う人は、前回の記事を参照してください。
環境
python 3.8.5
scikit-learn 0.231
ソースコード(モデルの保存)
コードには前回の記事で使用したものを一部流用しています。
save_model.py
import numpy as np
from sklearn import svm
import pickle
#csvファイルの読み込み
npArray = np.loadtxt("data.csv", delimiter = ",", dtype = "float")
# 説明変数の格納
x = npArray[:, 0:4]
#目的変数の格納
y = npArray[:, 4:5].ravel()
#学習手法にSVMを選択
clf = svm.SVC()
#学習
clf.fit(x,y)
#学習モデルの保存
with open('model.pickle', mode='wb') as f:
pickle.dump(clf,f,protocol=2)
ソースコード(保存したモデルの使用)
open_model.py
import pickle
# モデルのオープン
with open('model.pickle', mode='rb') as f:
clf = pickle.load(f)
# 評価データ
weather = [[9,0,7.9,6.5]]
# モデルを用いた予測
ans = clf.predict(weather)
if ans == 0:
print("晴れです")
if ans == 1:
print("曇りです")
if ans == 2:
print("雨です")
実行結果
$ python3 open_model.py
晴れです
おわりに
お疲れ様でした。
このように学習したモデルを保存することで、実行毎に学習させることなく、データの評価や、予測ができるようになります。