機械学習の結果を保存・検索する
モデルの予測、実験ログ、特徴量データをリレーショナルデータベースに永続化します。
「機械学習の結果を保存・検索する」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
機械学習実験の追跡
モデルをトレーニングすると、設定やスコアの異なる数十件の実行結果が生まれます。追跡しなければ、どの設定が最もよく機能したのか分からなくなります。
小規模な実験データベースにすべての実行結果を記録すれば、優れた結果をクエリし、比較し、再現できます。
実験テーブルの設計
適切なスキーマには、実行の識別情報、モデル、主要なハイパーパラメーター、評価指標、タイムスタンプを記録します。柔軟なハイパーパラメーターは、JSONテキスト列として保存します。
import sqlite3
conn = sqlite3.connect("experiments.db")
conn.execute("""
CREATE TABLE IF NOT EXISTS runs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
model TEXT NOT NULL,
params TEXT,
accuracy REAL,
f1 REAL,
created_at TEXT DEFAULT (datetime("now"))
)
""")
conn.commit()タイムスタンプとIDが必要な理由
自動インクリメントされる id によって各実行に安定した識別子が付き、created_at によって実行を時系列で並べたり、最新の実行を見つけたりできます。
DEFAULT (datetime("now")) によって、挿入時にタイムスタンプが自動的に設定されます。
実行結果の記録
トレーニング後に結果を挿入します。スキーマをモデル間で柔軟に保てるよう、ハイパーパラメーターの辞書をJSONにシリアライズします。
import json, sqlite3
params = {"n_estimators": 200, "max_depth": 8}
conn.execute(
"INSERT INTO runs (model, params, accuracy, f1) VALUES (?, ?, ?, ?)",
("random_forest", json.dumps(params), 0.913, 0.902),
)
conn.commit()再利用可能なlog_runヘルパー
挿入処理を、すべてのトレーニングスクリプトの最後で呼び出す関数にまとめます。一貫した記録があるからこそ、後から比較できるようになります。
def log_run(conn, model, params, accuracy, f1):
conn.execute(
"INSERT INTO runs (model, params, accuracy, f1) VALUES (?, ?, ?, ?)",
(model, json.dumps(params), accuracy, f1),
)
conn.commit()最良の実行結果を選ぶ
評価指標で並べ替えて、最も優れたモデルを見つけます。ORDER BY accuracy DESC と LIMIT を使うと、上位の結果が返されます。
cur = conn.execute(
"SELECT model, accuracy, f1 FROM runs ORDER BY accuracy DESC LIMIT 5"
)
for row in cur.fetchall():
print(row)モデルまたはしきい値による絞り込み
WHERE で比較対象を絞り込みます。特定のモデル系列だけに限定したり、目標スコアを上回る実行結果だけに限定したりできます。
cur = conn.execute(
"SELECT model, accuracy FROM runs WHERE model = ? AND accuracy > ? ORDER BY accuracy DESC",
("random_forest", 0.90),
)
print(cur.fetchall())実行結果全体の集計
SQLの集計を使うと、多数の実行結果を一度に要約できます。GROUP BY により、モデルごとの最高値、平均値、件数を求められます。
cur = conn.execute("""
SELECT model,
COUNT(*) AS n,
MAX(accuracy) AS best,
AVG(accuracy) AS mean
FROM runs
GROUP BY model
ORDER BY best DESC
""")
print(cur.fetchall())結果のpandasへの読み込み
より詳しく比較するには、テーブルをDataFrameに読み込み、pandasで分析します。並べ替え、ピボット、グラフ化などが可能です。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("sqlite:///experiments.db")
df = pd.read_sql("SELECT * FROM runs", engine)
print(df.sort_values("accuracy", ascending=False).head())pandasで実験結果を比較する
JSON形式のパラメーターを列に展開して、ハイパーパラメーターと評価指標の相関を調べます。これは、次の実験方針を決めるためにまさに役立つ分析です。
import json, pandas as pd
params_df = df["params"].apply(json.loads).apply(pd.Series)
full = pd.concat([df, params_df], axis=1)
print(full.groupby("max_depth")["accuracy"].mean())最良のモデルを再現する
各実行結果にハイパーパラメーターが保存されているため、最良のモデルの行を読み込み、そのパラメーターで再インスタンス化するだけで再現できます。
best = df.sort_values("accuracy", ascending=False).iloc[0]
import json
best_params = json.loads(best["params"])
print("Reproduce", best["model"], "with", best_params)クイックチェック:最も成績の良い実行
表から、正解率が最も高い5件の実行を取得したいとします。
振り返り:機械学習結果の保存と検索
実験を追跡するワークフローを構築しました。
- モデル、JSON形式のパラメーター、メトリクス、タイムスタンプを格納する
runsテーブル - すべての学習実行を記録する
log_runヘルパー - 最も成績の良い実行を見つける
ORDER BY ... DESC LIMITと、絞り込みに使うWHERE GROUP BYによる集計と、より詳しい比較のための pandas- パラメーターを保存しておくことで、最も良い結果を再現可能
次は、埋め込み検索のためのベクトルデータベースです。
よくある質問
「機械学習の結果を保存・検索する」レッスンは無料ですか?
はい。「機械学習の結果を保存・検索する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「機械学習の結果を保存・検索する」で何を学びますか?
モデルの予測、実験ログ、特徴量データをリレーショナルデータベースに永続化します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「機械学習の結果を保存・検索する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。