これまでこのブログで、回帰直線\(y=ax+b\)を算出するクラスに入力データをあてはめ、\(a\),\(b\)の値を算出するモデルを作成してきたが、このモデルは、ファイルに保存し取り出すことで、再利用することができる。
今回は、入力データの標準化を行い回帰直線を算出するクラスのモデルを保存し取り出してみたので、そのサンプルプログラムを共有する。
前提条件
以下の記事の、入力データを標準化して回帰直線を算出するクラス(OrigRegressionLineStd)の作成が完了していること。
回帰直線を算出するクラスで抽象メソッドを利用してみたPythonにはJavaと同じ「オブジェクト指向」という概念があり、データと処理をまとめた「クラス」を定義し、その「クラス」から「インス...
また、下記記事のAnacondaをインストールしJupyter Notebookを利用できること。
Python開発用のAnacondaをインストールしJupyter Notebookを利用してみた今回は、Pythonを勉強してみたいと思い、Python開発環境を構築してみたので、その手順を共有する。 Python開発用として...
モデルの保存
入力データの標準化を行い回帰直線を算出するクラスのモデルを保存するのは、joblibのdumpメソッドで行える。そのソースコードは、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import numpy as np from sklearn.model_selection import train_test_split import joblib # 入力データの読み込み input_data = np.array([[33,352], [33,324], [34,338], [34,317], [35,341], [35,360], [34,339], [32,329], [28,283], [35,372], [33,342], [28,262], [32,328], [33,326], [35,354], [30,294], [29,275], [32,336], [34,354], [35,368]]) # 入力データのx座標、y座標の抜き出し input_data_x = input_data[:, 0] input_data_y = input_data[:, 1] # 入力データを訓練用とテスト用で分割 # test_sizeには、テストデータの割合を指定する # random_stateを指定することで、分割方法を固定できる train_data_x, test_data_x, train_data_y, test_data_y \ = train_test_split(input_data_x, input_data_y, test_size=0.2, random_state=0) # OrigRegressionLineStdクラスを利用するため、抜き出したtrain_data,test_dataの # x座標・y座標を、2次元1列の配列とする縦ベクトルに変更 train_data_x = train_data_x.reshape(-1, 1) train_data_y = train_data_y.reshape(-1, 1) test_data_x = test_data_x.reshape(-1, 1) test_data_y = test_data_y.reshape(-1, 1) # OrigRegressionLineStdクラスの回帰直線のa,bの値を算出 orls = OrigRegressionLineStd() orls.fit(train_data_x, train_data_y) print("*** a,bの値 ***") print("a = " + str(orls.a) + ", b = " + str(orls.b)) print() # OrigRegressionLineStdクラスのモデルを保存 joblib.dump(orls, 'origRegressionLineStd.pkl') |
また、Jupyter Notebook上で、モデルを保存したファイル「origRegressionLineStd.pkl」が作成されたことが確認できる。
保存したモデルの取り出し
保存したモデルの取り出しは、joblibのloadメソッドで行える。そのソースコードは以下の通りで、保存した回帰直線の\(a\),\(b\)の値が復元できていることが確認できる。
1 2 3 4 5 6 7 8 9 | import joblib # OrigRegressionLineStdクラスのモデルを取り出し orls_new = joblib.load("origRegressionLineStd.pkl") # a,bの値を出力 print("*** a,bの値 ***") print("a = " + str(orls_new.a) + ", b = " + str(orls_new.b)) print() |
要点まとめ
- モデル(例えば、回帰直線\(y=ax+b\)を算出するクラスに入力データをあてはめ、\(a\),\(b\)の値を算出するモデル)は、ファイルに保存し取り出して再利用することができる。
- モデルの保存はjoblibのdumpメソッドで、保存したモデルの取り出しはjoblibのloadメソッドで、それぞれ行える。