0Pricing
Learn AI with Python · レッスン

機械学習の結果を保存・検索する

モデルの予測、実験ログ、特徴量データをリレーショナルデータベースに永続化します。

「機械学習の結果を保存・検索する」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Python の sqlite3 モジュールで SQLite を扱う
  2. Pandas と SQL の連携
  3. 機械学習の結果を保存・検索する
  4. ベクトルデータベース入門
← Learn AI with Pythonに戻る