非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】機械学習モデルを保存して予測時に再利用する方法

   

機械学習モデルを作成した際、後で再利用するために保存しておくことがよくあります。そのために使える便利なライブラリの一つが joblib です。この記事では、joblib を使ってモデルを保存・読み込む方法をプログラム例とともに解説します。

joblib とは?

joblib は Python のシリアライゼーション(データの直列化)ライブラリで、大量のデータを効率よく保存・読み込むのに適しています。特に、機械学習モデルのように複雑なオブジェクトを扱う場面でよく使われます。

プログラム例: モデルの保存と読み込み

ここでは、scikit-learn を使った単純な線形回帰モデルを例に解説します。

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import joblib

# ダミーデータの作成
np.random.seed(42)
X = np.random.rand(100, 1) * 10  # 説明変数
y = 3 * X + np.random.randn(100, 1) * 2  # 目的変数(ノイズを追加)

# データを学習用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルの作成と学習
model = LinearRegression()
model.fit(X_train, y_train)

# モデルの性能を評価
predictions = model.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print(f"Mean Squared Error: {mse:.2f}")

# モデルを保存
joblib.dump(model, 'linear_model.joblib')
print("モデルを 'linear_model.joblib' に保存しました。")

# 保存したモデルを読み込む
loaded_model = joblib.load('linear_model.joblib')
print("保存したモデルを読み込みました。")

# 読み込んだモデルで予測
loaded_predictions = loaded_model.predict(X_test)
loaded_mse = mean_squared_error(y_test, loaded_predictions)
print(f"Loaded Model MSE: {loaded_mse:.2f}")
 

 

 

解説

モデルの保存: joblib.dump()
  • モデルを保存する際は、joblib.dump() を使用します。
  • 第一引数に保存したいモデル、第二引数に保存先のファイル名を指定します。
  • 上記の例では、linear_model.joblib という名前で保存しています。
モデルの読み込み: joblib.load()
  • 保存したモデルを再利用する際は、joblib.load() を使います。
  • 引数には保存したファイル名を指定します。
  • 読み込んだモデルは、保存前と同じように使用できます。
メリット
  • シンプルな使い方: dump と load の2つの関数だけで保存と読み込みが完結。
  • 高速: 大量データや複雑なモデルの保存・読み込みが効率的。
  • 互換性: joblib は多くの scikit-learn モデルで問題なく動作します。
注意点
  • joblib で保存したモデルは、Python のバージョンやライブラリのバージョンが異なる環境では動作しない場合があります。
  • 長期的な保存が必要な場合は、環境のバージョン情報を記録しておくことをおすすめします。

保存したモデルを使って新しいデータを予測する場合

保存したモデルを使って新しいデータを予測する場合は以下のようにします。

import joblib
import numpy as np

# 新しいデータ
new_data = np.array([[5.5], [7.8], [10.0]])

# 保存したモデルを読み込む
loaded_model = joblib.load('linear_model.joblib')

# モデルで予測
predicted_values = loaded_model.predict(new_data)
print("新しいデータの予測結果:", predicted_values)
 

 

まとめ

joblib を使うと、簡単に機械学習モデルを保存・読み込みできます。一度保存したモデルを再利用することで学習にかかる時間を大幅に短縮できます。

 

スポンサーリンク

 - Python