Что такое машинное обучение
Основы машинного обучения · Урок 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 оправдан, когда ответ проверяем, а алгоритм неформализуем.
- Качество модели упирается в качество данных, а не в выбор алгоритма.
- Фиксируйте random_state, иначе эксперименты несравнимы.