Хранение и запрос результатов машинного обучения
Сохранение прогнозов моделей, журналов экспериментов и данных признаков в реляционных базах данных.
«Хранение и запрос результатов машинного обучения» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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)Быстрая проверка: лучшие запуски
Вам нужны пять запусков с наивысшей точностью из таблицы.
Итоги: хранение результатов ML и выполнение запросов
Вы создали рабочий процесс отслеживания экспериментов:
- Таблица
runsс моделью, параметрами в формате JSON, метриками и временной отметкой - Вспомогательная функция
log_runдля записи каждого запуска обучения ORDER BY ... DESC LIMITдля поиска лучших запусков иWHEREдля фильтрации- Агрегаты
GROUP BYи pandas для более глубокого сравнения - Сохранённые параметры делают победивший результат воспроизводимым
Далее: векторные базы данных для поиска по эмбеддингам.
Часто задаваемые вопросы
Урок «Хранение и запрос результатов машинного обучения» бесплатный?
Да — полный текст урока «Хранение и запрос результатов машинного обучения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Хранение и запрос результатов машинного обучения»?
Сохранение прогнозов моделей, журналов экспериментов и данных признаков в реляционных базах данных. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Хранение и запрос результатов машинного обучения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- SQLite с модулем sqlite3 Python
- Интеграция Pandas и SQL
- Хранение и запрос результатов машинного обучения
- Введение в векторные базы данных