機械学習のHello World的なMNISTにて、学習モデルを保存し、実行する際のメモ。
用意するもの
PC
コマンドプロンプト
インストール(python、sklearn、numpy)
学習時のコード
from sklearn import datasets from sklearn import metrics from sklearn import svm from sklearn.model_selection import train_test_split import numpy as np from sklearn.externals import joblib # データセットロード dataset = datasets.load_digits() #全データの最大値、全データ数確認 #print(np.amax(dataset.data)) # 最大値16 #print(dataset.data.shape[0]) # 全データ数 # 設定用 x = dataset.data / 16 # 最大値を1にする y = dataset.target # 訓練データ/テストデータの分割 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1) # モデル作成 model = svm.LinearSVC() # SVC # 学習 model.fit(x_train, y_train) # 推定 y_pred = model.predict(x_test) # 評価 score = metrics.accuracy_score(y_test, y_pred) print("SVC Score : {0:.4f}" . format(score)) # 間違い探し co_mat = metrics.confusion_matrix(y_test, y_pred) print(co_mat) # 学習済みモデルの作成 joblib.dump(model, "test.pkl", compress=True)
呼び出し時のコード
from sklearn.externals import joblib def predict(parameters): model = joblib.load('./test.pkl') params = parameters.reshape(1,-1) pred = model.predict(params) return pred pred = predict(x) # xは入力値、未設定のためエラー出ます(28x28) print(pred) # 結果出力
他のモデルを使う場合
「学習時のコード」の3行目と22行目を変更してください。
from sklearn import svm model = svm.LinearSVC() # SVC
これをSVC以外の・・・分類に突っ込んであげましょう。
ロジスティック などですね。
k-meansは教師なしなので使い方が違います。
回帰(数値分類)ではできないので注意してください。
まとめ
意外と簡単に学習→モデル保存→出力できました。
慣れてない人は、コードに慣れてくるまでは写経ですね。
・・・とはいえ私も、「学習時のコード」のdatasetの最大値を出すだけで15分かかりました…。