存储和查询机器学习结果
在关系数据库中持久化模型预测结果、实验日志和特征数据
存储和查询机器学习结果 是 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 反馈 — 无需本地设置。