Как выбрать алгоритм машинного обучения: практический гид

Большинство новичков в машинном обучении тратят недели на изучение математики, прежде чем задать главный вопрос: а какой алгоритм мне actually нужен?

Tim Бергхольд, дата-сайентист с 10-летним опытом, за 17 минут объясняет всё, что нужно знать о ключевых ML-алгоритмах. Этот пост — конспект с практическим уклоном. Без уравнений. Только интуиция и выбор правильного инструмента под задачу.

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

Wikipedia даёт сухое определение: Machine Learning — подобласть AI, которая разрабатывает статистические алгоритмы, обучающиеся на данных и обобщающие результат на новые данные без явных инструкций. Если перевести на человеческий: вы показываете машине примеры, она находит паттерны и применяет их к новым ситуациям.

Всё современное развитие AI — от ChatGPT до систем распознавания лиц — построено на этом принципе. И почти все эти системы в своей основе сводятся к небольшому набору алгоритмов, о которых пойдёт речь.

Две ветви: учитель и без учителя

Прежде чем выбирать алгоритм, нужно ответить на один вопрос: есть ли у вас правильные ответы для обучения?

Supervised learning (обучение с учителем) — когда у вас есть датасет, где для каждого примера известен правильный ответ (таргет). Вы показываете модели картинки котов и собак с метками — она учится отличать одних от других. Примеры задач: предсказать цену дома по площади и локации, определить спам по тексту письма, классифицировать изображение как цифру от 0 до 9.

Unsupervised learning (обучение без учителя) — когда правильных ответов нет. Вы просто даёте машине кучу данных и просите найти структуру. Пример: отсортировать все ваши email в три категории, которые алгоритм определит сам. Никто заранее не говорит, что это будут за категории.

Регрессия: предсказываем числа

Когда нужно предсказать конкретное число — цену, вес, температуру — используется регрессия.

Линейная регрессия

Самый базовый алгоритм в ML. Вы находите линейную зависимость между входными переменными и числовым результатом. Модель минимизирует сумму квадратов расстояний от точек данных до линии регрессии — иными словами, проводит прямую так, чтобы она была максимально близка ко всем точкам одновременно.

Простой пример: связь между размером обуви человека и его ростом. Регрессия может показать, что каждые +1 размер обуви в среднем соответствуют +2 дюймам роста. Можно усложнить модель и добавить другие факторы — пол, возраст, этническую принадлежность — чтобы предсказание стало точнее.

Ключевая интуиция: почти все сложные ML-алгоритмы, включая нейросети, — это extensions того же самого принципа. Разница лишь в сложности функции, которую мы подгоняем под данные.

Классификация: относим к категориям

Когда нужно отнести объект к одной из нескольких категорий — это задача классификации.

Логистическая регрессия

Не путайте с регрессией — название историческое. Вместо линии здесь сигмоидная функция, которая предсказывает вероятность принадлежности к классу. Результат: не просто «это спам», а «с вероятностью 80% это спам».

K ближайших соседей (KNN)

Интуитивный до предела: чтобы предсказать класс новой точки, посмотрите на K ближайших к ней соседей и возьмите большинство. Для регрессии — среднее значение соседей. Выбираете 5 ближайших по весу и росту — и предсказываете пол. Звучит просто, но работает удивительно хорошо для сложных нелинейных зависимостей.

K — это гиперпараметр, и его выбор — искусство. Слишком маленький K ведёт к переобучению (модель идеально запоминает данные, но плохо обобщает), слишком большой — к недообучению (модель слишком грубая).

Метод опорных векторов (SVM)

SVM рисует разделяющую линию (или гиперплоскость в многомерном пространстве) между классами так, чтобы зазор между ними был максимальным. Те самые support vectors — точки, лежащие на границе зазора; знание только о них достаточно для классификации новых данных, что делает алгоритм экономичным по памяти.

Главная суперсила SVM — kernel functions. Явная数学ка, но суть: вы можете превращать простые признаки в сложные нелинейные комбинации (например, вес, делённый на рост в квадрате) и строить очень сложные границы решений без реального создания новых признаков. Это называют kernel trick, и это тот же принцип, который лежит в основе современных нейросетей.

Наивный Байес

Получил название благодаря теореме Байеса. Чаще всего используется для фильтрации спама. Алгоритм считает вероятности появления разных слов в спамных и не-спамных письмах, перемножает их — и выдаёт verdict. Наивное допущение: вероятности слов независимы друг от друга (в реальности это не так, но для фильтрации спама приближение работает отлично). Быстро, дёшево, часто достаточно.

Деревья решений

Серия вопросов «да/нет», которые разбивают данные на группы. Создатель алгоритма пытается сделать так, чтобы в каждом листе дерева оказались максимально чистые группы — с минимумом ошибок классификации. Само по себе дерево решений — слабый инструмент, но оно становится мощным в ансамблях.

Ансамбли: слабые вместе

Комбинирование множества простых моделей даёт одну сильную. Это и есть идея ensemble learning.

Случайный лес (Random Forest)

Вы обучаете много деревьев решений на разных подвыборках данных и разных наборах признаков, а затем голосуете. Случайность предохраняет от переобучения и убирает корреляцию между деревьями. Random Forest — один из самых надёжных алгоритмов для начала: он редко бывает худшим выбором и часто приближается к лучшему.

Градиентный бустинг (Boosting)

Вместо параллельного обучения деревьев вы обучаете их последовательно: каждое следующее исправляет ошибки предыдущего. Это даёт более высокие accuracy, но медленнее и рискует переобучиться. Известные представители: AdaBoost, Gradient Boosting, XGBoost. XGBoost стал стандартом в соревнованиях по анализу данных и часто выигрывает у нейросетей на табличных данных.

Нейросети: когда признаки неизвестны

Все предыдущие алгоритмы объединяет одно: вы явно сообщаете модели, на какие признаки смотреть. Но что, если сами признаки неизвестны?

Классический пример — распознавание рукописных цифр. Написать «ноль» можно тысячью способами: разные почерки, наклоны, размеры. Явное описание всех вариантов невозможно. Но нейросеть может автоматически найти скрытые признаки — горизонтальные линии, отсутствие круговых форм — без того, чтобы кто-то их заранее описывал.

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

Кластеризация: ищем структуру

Когда нет меток и нужно найти группы самостоятельно — поможет кластеризация. K-means — самый известный метод. Вы задаёте K (число кластеров), алгоритм случайно ставит центры и итеративно перемещает их так, чтобы каждая точка данных принадлежала ближайшему кластеру. Процесс повторяется до стабилизации.

Важный нюанс: вы сами решаете, сколько кластеров искать. Иногда данные очевидно разбиваются на три группы, иногда — нет. В отличие от классификации, здесь нет правильного ответа — только ваше понимание предметной области.

Понижение размерности: сжать не теряя

Когда признаков слишком много или они избыточны, используется dimensionality reduction. Главный инструмент — PCA (метод главных компонент). Идея: найти направления максимальной дисперсии в данных и проецировать на них. Если высота и длина тела рыбы сильно коррелируют, можно заменить их одним признаком «размер» — и потерять мало информации, но резко упростить модель.

Это не только про визуализацию (3D → 2D). Понижение размерности — стандартный preprocessing step для ускорения обучения и снижения шума.

Как выбрать правильный алгоритм

Вот простая стратегия от Tim:

У вас есть таргет (правильные ответы)? Да → supervised, Нет → unsupervised.

Таргет — число? Регрессия (линейная регрессия). Таргет — категория? Классификация.

Для классификации: если данные хорошо разделяются линией — попробуйте SVM. Если нужно быстро и данные текстовые — Naive Bayes. Если признаки неизвестны и задача сложная — нейросеть. Если хотите надёжный baseline — Random Forest.

Для кластеризации: знаете число кластеров — K-means. Не знаете — DBSCAN или иерархическая кластеризация.

FAQ

Когда использовать нейросеть, а когда классические алгоритмы? Классические алгоритмы (деревья, бустинг) обычно побеждают на табличных данных с чёткими признаками. Нейросети выигрывают там, где признаки сложно или невозможно описать вручную: изображения, звук, текст. Для задачи предсказания цены акций или оценки кредитного риска — почти наверняка случайный лес или градиентный бустинг. Для распознавания лиц или перевода текста — нейросеть.

Почему XGBoost так популярен? Потому что он последовательно исправляет ошибки предыдущих моделей и при этом устойчив к переобучению. На табличных данных с числовыми признаками он часто достигает уровня нейросетей при значительно меньших вычислительных затратах. Плюс — хорошо работает «из коробки» с дефолтными гиперпараметрами.

Что такое переобучение и как его избежать? Переобучение — модель идеально запоминает обучающую выборку, но проваливает новые данные. Классический пример: KNN с K=1 находит ближайшего соседа — то есть саму себя — и даёт 100% accuracy на обучении, но ноль на тесте. Способы борьбы: увеличить K, использовать кросс-валидацию, добавить регуляризацию, в ансамблях — ограничить глубину деревьев и их количество.

Когда без нейросетей не обойтись? Когда признаки заранее неизвестны и слишком сложны для ручного описания. Распознавание объектов на фотографиях, генерация текста, игра в го — всё это задачи, где миллионы абстрактных признаков и ни один человек не способен их перечислить. Именно здесь глубина нейросетей раскрывается полностью.

Итог

Алгоритмы ML — не магия и не математическая теория, оторванная от практики. Это инструменты, каждый из которых решает определённый тип задач. Линейная регрессия — для предсказания чисел. Деревья и бустинг — для табличных данных с чёткими признаками. Нейросети — когда признаки слишком сложны для описания. K-means — когда нужно найти структуру без готовых ответов.

Поняв эту карту, вы перестанете гуглить «какой алгоритм выбрать» и начнёте принимать решения осознанно. Как говорит Tim: «в机器學習 есть простая стратегия для выбора правильного алгоритма — и теперь она вам знакома».


Источник: видео «All Machine Learning algorithms explained in 17 min» (Tim Berghold, 10+ лет опыта в data science)

← Все записи