0Pricing
Learn AI with Python · 课时

存储和查询机器学习结果

在关系数据库中持久化模型预测结果、实验日志和特征数据

存储和查询机器学习结果 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 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)

快速检查:最佳运行记录

您希望从表中找出准确率最高的五次运行记录。

回顾:存储和查询机器学习结果

您构建了一个实验跟踪流程:

  • 一个包含模型、JSON 参数、指标和时间戳的 runs 表
  • 一个用于记录每次训练运行的 log_run 辅助函数
  • 使用 ORDER BY ... DESC LIMIT 查找最佳运行记录,使用 WHERE 进行筛选
  • 使用 GROUP BY 聚合,并借助 pandas 进行更深入的比较
  • 保存的参数让最佳结果可以复现

下一步:用于嵌入搜索的向量数据库。

常见问题解答

「存储和查询机器学习结果」课时是免费的吗?

是的 — 「存储和查询机器学习结果」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「存储和查询机器学习结果」这节课中我会学到什么?

在关系数据库中持久化模型预测结果、实验日志和特征数据 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 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