Что такое машинное обучение

Основы машинного обучения · Урок 1 / 20

Программа, которая выводит правила из примеров

В обычном программировании правила пишет человек: «если письмо содержит слово X и отправитель не в контактах — это спам». Машинное обучение переворачивает подход: вы даёте программе много примеров (тысячи писем с метками «спам» / «не спам»), а она сама подбирает правила, которые лучше всего разделяют эти примеры. Код перестаёт быть описанием логики и становится описанием процедуры обучения.

Чем это отличается от кода, который вы пишете каждый день

  • Обычная программа. Человек задаёт правила, машина их применяет. Поведение детерминировано и целиком читается в исходнике.
  • ML. Человек задаёт данные и функцию ошибки, модель подбирает параметры. Поведение хранится в весах, а не в коде.
  • Следствие для отладки. Вы чините не строчку кода, а данные, признаки или постановку задачи. Дебаггер тут почти бесполезен, метрики — почти всё.

Когда ML оправдан

ML нужен там, где правил слишком много или они неочевидны: распознавание изображений (попробуйте описать «кошку» условиями), понимание текста, прогноз спроса, рекомендации, антифрод. Признак хорошего кандидата: вы умеете отличить правильный ответ от неправильного, но не умеете объяснить алгоритм его получения. Если правило формулируется тремя if — пишите три if. Это дешевле, быстрее, покрывается тестами и не деградирует само по себе через полгода.

Минимальный рабочий цикл

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)          # обучение: подбор параметров по данным
print(model.score(X_test, y_test))   # доля верных ответов на невиданных данных

Эти четыре строки описывают весь цикл: разделили данные, обучили, замерили на том, чего модель не видела. Всё остальное в курсе — детали этих четырёх строк: как собрать X, как выбрать модель, как измерить честно и что делать, когда число вас не устраивает. Обратите внимание на random_state: без него сплит меняется при каждом запуске и вы не сможете сравнить два эксперимента между собой.

Модель не «понимает» и не «думает»

Модель находит статистические зависимости и применяет их. Отсюда две практические границы. Первая: качество модели ограничено качеством данных — на грязной разметке хорошая модель невозможна в принципе, никакой алгоритм это не компенсирует. Вторая: на данных, непохожих на обучающие, модель ведёт себя непредсказуемо и при этом уверенно — она не умеет сказать «я такого не видела». Именно поэтому в проде рядом с моделью всегда живёт мониторинг входных распределений, а не только логи ошибок.

Инсайт. ML — это перенос сложности из кода в данные. Вы не убираете работу, вы меняете её характер: вместо написания условий вы занимаетесь сбором, чисткой и разметкой. Бюджет проекта уходит туда же.
Частая ошибка. Брать ML для задачи, где ответ вычисляется формулой. Модель воспроизведёт формулу с ошибкой в пару процентов и добавит инфраструктуру обучения и мониторинга — обмен явно невыгодный.
Про-совет. Перед первой моделью напишите на бумаге, какое решение изменится от её предсказания. Если ответ «никакое» — задачи нет, есть желание применить технологию.

Шпаргалка

  • Правила пишет не человек, а оптимизация по данным.
  • ML оправдан, когда ответ проверяем, а алгоритм неформализуем.
  • Качество модели упирается в качество данных, а не в выбор алгоритма.
  • Фиксируйте random_state, иначе эксперименты несравнимы.
1. Чем ML принципиально отличается от обычной программы?
2. Когда ML не стоит применять?
3. Зачем в train_test_split задают random_state?

🔒 Ответьте на вопрос верно, чтобы перейти к следующему уроку.

Что такое машинное обучение — Основы машинного обучения — Skilvy