Основы алгоритмов машинного обучения

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

1. Введение в машинное обучение и предварительная обработка данных

Введение в машинное обучение и предварительная обработка данных

Добро пожаловать в курс «Основы алгоритмов машинного обучения». Это первая статья, в которой мы заложим фундамент для понимания того, как работают интеллектуальные системы. Мы разберем, что такое машинное обучение, чем оно отличается от классического программирования, и почему данные — это «новая нефть», которую нужно уметь правильно очищать и перерабатывать.

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

Машинное обучение (Machine Learning, ML) — это подраздел искусственного интеллекта, изучающий методы построения алгоритмов, способных обучаться на данных. В отличие от жестко заданных инструкций, ML-алгоритмы находят закономерности в информации и используют их для принятия решений или прогнозирования.

Чтобы понять суть, сравним два подхода:

  • Классическое программирование: Человек пишет правила (код) и подает данные. Компьютер обрабатывает данные по правилам и выдает ответ.
  • Машинное обучение: Человек подает данные и правильные ответы (в обучении с учителем). Компьютер сам находит правила (модель), которые связывают данные с ответами.
  • !Сравнение потоков данных в классическом программировании и машинном обучении

    Основные типы машинного обучения

    Существует три основных парадигмы обучения, которые мы будем детально разбирать в следующих статьях курса:

    * Обучение с учителем (Supervised Learning). У алгоритма есть «учитель», который дает правильные ответы. Например, мы показываем модели тысячи фотографий кошек и собак с подписями, а она учится их различать. Задачи: классификация и регрессия. * Обучение без учителя (Unsupervised Learning). Правильных ответов нет. Алгоритм ищет структуру в данных самостоятельно. Например, сегментация клиентов банка по поведению. Задачи: кластеризация, понижение размерности. * Обучение с подкреплением (Reinforcement Learning). Агент обучается, взаимодействуя со средой и получая сигналы вознаграждения или наказания. Так учат роботов ходить или программы играть в шахматы.

    Жизненный цикл ML-проекта

    Создание модели — это не просто написание кода. Это процесс, состоящий из нескольких этапов:

  • Сбор данных.
  • Предварительная обработка данных (Preprocessing).
  • Выбор модели и обучение.
  • Оценка качества.
  • Внедрение (Deployment).
  • В этой статье мы сфокусируемся на втором этапе. Часто говорят: «Garbage in, garbage out» (Мусор на входе — мусор на выходе). Если подать в самый мощный алгоритм «грязные» данные, результат будет плачевным.

    Предварительная обработка данных

    Данные в реальном мире редко бывают идеальными. Они содержат пропуски, ошибки, выбросы и представлены в разных форматах. Рассмотрим ключевые шаги предобработки.

    1. Работа с пропущенными значениями

    В таблицах с данными часто встречаются пустые ячейки (NaN — Not a Number). Большинство алгоритмов не умеют работать с пропусками.

    Основные стратегии решения:

    * Удаление. Если строк с пропусками мало (например, менее 5%), их можно просто удалить. * Заполнение (Импутация). Пропуски заменяются на: * Среднее значение (для нормального распределения). * Медиану (если есть выбросы). * Моду (самое частое значение) — для категориальных данных.

    2. Кодирование категориальных признаков

    Компьютеры понимают только числа. Если у вас есть столбец «Цвет» со значениями «Красный», «Зеленый», «Синий», модель не сможет их обработать напрямую. Их нужно перевести в цифровой вид.

    #### Label Encoding Каждой категории присваивается уникальное число. Например: * Красный 0 * Зеленый 1 * Синий 2

    Проблема: Алгоритм может решить, что Синий (2) «больше» или «важнее», чем Красный (0), хотя цвета равнозначны.

    #### One-Hot Encoding Создаются новые бинарные столбцы для каждой категории. Строка получает 1 в столбце своего цвета и 0 в остальных.

    | Цвет | Цвет_Красный | Цвет_Зеленый | Цвет_Синий | | :--- | :---: | :---: | :---: | | Красный | 1 | 0 | 0 | | Зеленый | 0 | 1 | 0 | | Синий | 0 | 0 | 1 |

    Этот метод предпочтительнее для номинальных признаков, где нет порядка.

    3. Масштабирование признаков (Feature Scaling)

    Представьте, что у нас есть два признака:

  • Возраст (от 0 до 100).
  • Зарплата (от 20 000 до 500 000).
  • Диапазон зарплаты значительно больше. Многие алгоритмы (например, метод ближайших соседей или градиентный спуск) будут считать зарплату более важным признаком только из-за больших чисел. Чтобы этого избежать, данные нужно привести к одному масштабу.

    #### Нормализация (Min-Max Scaling) Приводит все значения к диапазону от 0 до 1. Формула выглядит так:

    Где: * — новое нормализованное значение. * — исходное значение. * — минимальное значение в столбце. * — максимальное значение в столбце.

    #### Стандартизация (Z-score Normalization) Преобразует данные так, чтобы среднее значение стало равным 0, а стандартное отклонение — 1. Это полезно, если данные имеют нормальное распределение.

    Где: * — стандартизированное значение (z-оценка). * — исходное значение. * — среднее арифметическое выборки. * — стандартное отклонение выборки.

    !Визуализация влияния масштабирования на распределение данных

    4. Разделение выборки

    Финальный этап перед обучением — разделение данных на две (иногда три) части:

  • Обучающая выборка (Training set) — обычно 70-80% данных. На ней модель учится находить закономерности.
  • Тестовая выборка (Test set) — оставшиеся 20-30%. На ней мы проверяем качество модели.
  • > «Тестировать модель на тех же данных, на которых она училась — это как дать студенту на экзамене те же вопросы, что были в учебнике. Он может просто запомнить ответы, не понимая сути». > Andrew Ng, Machine Learning Course

    Пример на Python

    Хотя мы углубимся в код позже, полезно увидеть, как эти концепции реализуются с помощью библиотеки scikit-learn.

    Обратите внимание: мы вычисляем параметры масштабирования (среднее и отклонение) только на обучающей выборке, чтобы избежать «утечки данных» из будущего (тестовой выборки).

    Заключение

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

    Теперь вы готовы проверить свои знания на практике.

    2. Обучение с учителем: линейные модели, деревья решений и метод опорных векторов

    Обучение с учителем: линейные модели, деревья решений и метод опорных векторов

    Рады видеть вас снова на курсе «Основы алгоритмов машинного обучения». В прошлой статье мы подготовили данные: очистили их от пропусков, закодировали категории и привели к единому масштабу. Теперь у нас есть «топливо» высокого качества. Пришло время запустить двигатель.

    Сегодня мы погрузимся в мир обучения с учителем (Supervised Learning). Напомню, это подход, при котором у модели есть правильные ответы (метки) для обучающих примеров. Мы разберем три фундаментальных семейства алгоритмов, которые, несмотря на появление нейросетей, остаются рабочими лошадками в индустрии: линейные модели, деревья решений и метод опорных векторов.

    Линейные модели: простота и эффективность

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

    Линейная регрессия (Linear Regression)

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

    Математически это записывается так:

    Где: * — целевая переменная (то, что мы предсказываем, например, цена). * — свободный член (bias), точка пересечения с осью Y. * — веса (коэффициенты), которые модель выучивает. Они показывают важность каждого признака. * — значения признаков (площадь, этаж, район).

    !Визуализация линейной регрессии: красная линия показывает предсказанную зависимость цены от площади.

    Задача алгоритма — подобрать такие веса , чтобы сумма квадратов ошибок (расстояний от реальных точек до линии) была минимальной. Это называется методом наименьших квадратов.

    Логистическая регрессия (Logistic Regression)

    Пусть вас не смущает слово «регрессия» в названии. Это алгоритм классификации. Например, нам нужно определить: уйдет клиент из банка или останется (1 или 0).

    Линейная формула может выдать любое число, например, или . Но нам нужна вероятность от 0 до 1. Для этого результат линейного уравнения оборачивают в специальную функцию — сигмоиду.

    Где: * — результат функции (вероятность класса 1), значение всегда в диапазоне от 0 до 1. * — основание натурального логарифма (примерно 2.718). * — результат линейного уравнения ().

    Если , мы говорим, что это класс 1. Если меньше — класс 0.

    Плюсы линейных моделей: * Очень быстрые в обучении и работе. * Легко интерпретируемые (мы знаем, какой признак как влияет).

    Минусы: * Плохо работают, если зависимость в данных сложная и нелинейная (например, похожа на параболу).

    Деревья решений (Decision Trees)

    Если линейные модели — это математика, то деревья решений — это логика. Этот алгоритм имитирует то, как принимает решения человек.

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

  • Идет ли дождь? (Да Брать).
  • Если нет, то пасмурно ли? (Нет Не брать).
  • Если пасмурно, то надолго ли я выхожу? (Да Брать).
  • В машинном обучении дерево автоматически строит такие вопросы, чтобы наилучшим образом разделить данные на классы.

    !Пример структуры дерева решений для задачи классификации.

    Как строится дерево?

    Алгоритм ищет признак и пороговое значение, которые лучше всего разделяют выборку на две части. «Лучше всего» означает, что в полученных группах объекты должны быть максимально однородными (например, в одной группе только кошки, в другой — только собаки).

    Для оценки качества разбиения используются метрики, такие как Энтропия или Неопределенность Джини. Чем ниже эти значения, тем больше порядка в данных.

    Проблема переобучения

    Главный враг деревьев решений — переобучение (overfitting). Если не ограничить дерево, оно может задать миллион вопросов и построить уникальное правило для каждого конкретного клиента из обучающей выборки. Такое дерево будет идеально работать на тренировочных данных (100% точность), но с треском провалится на новых.

    Чтобы этого избежать, используют: * Ограничение глубины дерева (max_depth). * Минимальное число объектов в листе.

    Плюсы: * Понимают нелинейные зависимости. * Не требуют масштабирования данных (нормализации). * Результат легко объяснить бизнесу (нарисовать картинку).

    Минусы: * Склонны к переобучению. * Небольшое изменение в данных может кардинально изменить структуру дерева.

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

    Метод опорных векторов (Support Vector Machine) — это мощный алгоритм, который ищет гиперплоскость, разделяющую классы с максимальным зазором.

    Представьте, что у вас есть красные и синие шарики на столе. Вы можете положить между ними палку (линию), чтобы их разделить. Но таких палок можно положить много. SVM выбирает ту палку, которая лежит максимально далеко от ближайших красных и синих шариков. Эти ближайшие точки и называются опорными векторами.

    Расстояние от разделяющей линии до ближайших точек называется зазором (margin). Чем шире зазор, тем увереннее модель будет классифицировать новые объекты.

    !Иллюстрация работы SVM: поиск оптимальной разделяющей полосы с максимальным зазором.

    Ядерный трюк (Kernel Trick)

    Что делать, если данные нельзя разделить прямой линией? Например, красные шарики лежат в центре, а синие — кольцом вокруг них.

    SVM использует гениальный прием — ядерный трюк. Алгоритм проецирует данные в пространство более высокой размерности (3D, 4D и т.д.), где их можно разделить плоскостью.

    > «Представьте, что красные и синие шарики лежат на столе. Вы не можете разделить их прямой палкой. Но если вы ударите по столу снизу в центре, красные шарики подлетят в воздух. Теперь вы можете провести между летящими красными и лежащими синими шариками плоский лист фанеры».

    Математически это делается с помощью функции ядра , которая вычисляет сходство объектов без явного перехода в многомерное пространство, что экономит вычислительные ресурсы.

    Плюсы: * Отлично работает в пространствах высокой размерности (когда признаков больше, чем объектов). * Эффективен, когда классы хорошо разделены.

    Минусы: * Плохо работает на очень больших наборах данных (медленно обучается). * Чувствителен к шуму и выбросам (если они попадут в зазор). * Требует тщательного подбора параметров.

    Сравнение алгоритмов

    | Алгоритм | Когда использовать | Главное преимущество | Главный недостаток | | :--- | :--- | :--- | :--- | | Линейная регрессия | Простые задачи прогнозирования чисел | Скорость, простота | Только линейные связи | | Логистическая регрессия | Простая классификация (спам/не спам) | Вероятностный выход | Только линейные границы | | Деревья решений | Сложные данные, важна интерпретируемость | Работает «из коробки», нелинейность | Переобучение | | SVM | Сложные задачи, мало данных, много признаков | Высокая точность | Медленный, сложная настройка |

    Пример на Python

    Посмотрим, как запустить эти модели с помощью scikit-learn. Синтаксис для всех моделей почти идентичен — это сила унификации библиотеки.

    Заключение

    Мы рассмотрели три кита классического машинного обучения. Линейные модели хороши для старта и простых задач. Деревья решений отлично справляются со сложной логикой, но требуют контроля. SVM — мощный инструмент для сложных геометрических разделений.

    Однако, что если одно дерево работает неплохо, но ошибается? А что если объединить сто деревьев? В следующей статье мы поговорим об ансамблевых методах — случайном лесе и градиентном бустинге, которые сегодня доминируют в соревнованиях по анализу данных.

    3. Обучение без учителя: алгоритмы кластеризации и методы снижения размерности

    Обучение без учителя: алгоритмы кластеризации и методы снижения размерности

    Добро пожаловать обратно на курс «Основы алгоритмов машинного обучения». В предыдущих статьях мы тщательно размечали данные, учили модели предсказывать цены на квартиры и отличать кошек от собак, имея под рукой правильные ответы. Это было обучение с учителем.

    Но что делать, если правильных ответов нет? Представьте, что вы археолог, нашедший тысячи черепков древней посуды. Никто не оставил вам инструкцию, к какой эпохе или культуре принадлежит каждый осколок. Вам нужно самостоятельно найти закономерности, сгруппировать похожие предметы и понять структуру находки. Именно этим занимается обучение без учителя (Unsupervised Learning).

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

    Что такое кластеризация?

    Кластеризация — это процесс группировки объектов таким образом, чтобы объекты в одной группе (кластере) были более похожи друг на друга, чем на объекты из других групп. Это один из самых популярных методов разведочного анализа данных.

    Алгоритм K-Means (K-средних)

    Это самый простой и популярный алгоритм кластеризации. Его идея гениально проста: мы заранее говорим алгоритму, сколько кластеров хотим найти (число ), и он пытается найти центры этих кластеров.

    Как это работает:

  • Выбираем число кластеров (например, 3).
  • Случайным образом выбираем точек в пространстве данных. Назовем их центроидами.
  • Для каждой точки данных вычисляем расстояние до всех центроидов и относим точку к ближайшему.
  • Пересчитываем положение центроидов: теперь центром становится среднее арифметическое всех точек, попавших в этот кластер.
  • Повторяем шаги 3 и 4, пока центроиды не перестанут двигаться.
  • !Иллюстрация итеративного процесса обучения алгоритма K-Means

    Основная метрика, которую использует K-Means — это Евклидово расстояние. Оно вычисляется по формуле:

    Где: * — расстояние между двумя точками и . * — количество признаков (размерность пространства). * и — координаты точек по -му признаку. * — знак суммирования (сумма квадратов разностей координат).

    Проблема выбора K: Главный минус алгоритма — нужно заранее знать количество кластеров. Чтобы подобрать оптимальное , часто используют метод локтя (Elbow Method). Мы строим график зависимости ошибки от количества кластеров. В точке, где падение ошибки резко замедляется (график напоминает сгиб локтя), находится оптимальное число .

    Иерархическая кластеризация

    Этот метод не требует задавать число кластеров заранее. Он строит дерево вложенных кластеров.

    Существует два подхода:

  • Агломеративный (снизу-вверх): Сначала каждая точка — это отдельный кластер. Затем самые близкие точки объединяются, потом объединяются группы точек, и так до тех пор, пока все не станут одним большим кластером.
  • Дивизивный (сверху-вниз): Наоборот, начинаем с одного кластера и делим его.
  • Результат визуализируют с помощью дендрограммы — древовидной диаграммы, которая показывает, в каком порядке объединялись данные.

    DBSCAN: Плотность имеет значение

    K-Means хорошо работает, когда кластеры имеют форму шара. Но что, если один кластер «обнимает» другой, как полумесяц? Здесь на помощь приходит DBSCAN (Density-Based Spatial Clustering of Applications with Noise).

    Он группирует точки, которые расположены тесно друг к другу, и помечает как выбросы (шум) те точки, которые находятся в областях с низкой плотностью.

    Преимущества DBSCAN: * Не нужно задавать число кластеров. * Находит кластеры любой геометрической формы. * Умеет игнорировать шум (выбросы).

    Снижение размерности (Dimensionality Reduction)

    Современные данные часто имеют сотни и тысячи признаков. Представьте таблицу с 1000 столбцов. Работать с ней сложно по нескольким причинам:

  • Проклятие размерности: Чем больше признаков, тем больше данных нужно для обучения, иначе модель найдет случайные закономерности.
  • Визуализация: Мы не можем представить пространство больше 3 измерений.
  • Вычислительная сложность: Обучение занимает слишком много времени.
  • Методы снижения размерности позволяют сжать информацию, оставив только самое важное.

    Метод главных компонент (PCA)

    PCA (Principal Component Analysis) — это король снижения размерности. Его задача — найти такие новые оси координат (главные компоненты), вдоль которых данные имеют наибольший разброс (дисперсию).

    Представьте, что вы фотографируете летящий мяч. Мяч трехмерный, но фото — двумерное. PCA ищет такой ракурс для съемки, чтобы на фото мяч не выглядел плоским блином, а сохранил максимум своей формы.

    !Проекция многомерных данных на плоскость с помощью PCA

    Математически PCA выполняет линейное преобразование данных. Если мы хотим сжать данные до 1 компоненты, формула проекции выглядит так:

    Где: * — новое значение сжатого признака (главная компонента). * — исходные признаки. * — веса, которые определяют направление главной компоненты (вектор нагрузок).

    PCA удаляет коррелирующие признаки. Если «Площадь квартиры» и «Количество комнат» сильно связаны, PCA объединит их в одну компоненту «Размер жилья».

    t-SNE: Искусство визуализации

    Если PCA — это строгий математик, то t-SNE (t-Distributed Stochastic Neighbor Embedding) — это художник. PCA хорош для сжатия данных перед обучением модели, но t-SNE лучше подходит именно для визуализации сложных данных в 2D или 3D.

    Он пытается сохранить локальную структуру данных: если две точки были соседями в многомерном пространстве, они останутся соседями и на плоскости. Это позволяет увидеть красивые кластеры там, где PCA показал бы просто кашу.

    Пример на Python

    Давайте посмотрим, как применить K-Means и PCA к набору данных о винах, используя библиотеку scikit-learn.

    Обратите внимание: мы сначала применили масштабирование (StandardScaler). Для алгоритмов, основанных на измерении расстояний (как K-Means) и дисперсии (как PCA), это критически важно. Иначе признак с большими числами (например, «содержание пролина» в вине) заглушит все остальные.

    Заключение

    Обучение без учителя открывает скрытые структуры в данных. Мы научились: * Группировать объекты с помощью K-Means и DBSCAN. * Бороться с проклятием размерности с помощью PCA.

    Эти методы часто используются как предварительный этап перед обучением с учителем или для аналитики. Но как понять, насколько хороша наша модель, если правильных ответов нет? Или как не допустить ошибку при оценке классификатора? В следующей статье мы углубимся в тему оценки качества моделей и метрик, чтобы отличать хорошие алгоритмы от плохих.

    > «Данные — это просто шум, пока вы не найдете в них смысл». — Neil deGrasse Tyson

    4. Ансамблевые методы: случайный лес, градиентный бустинг и стекинг

    Ансамблевые методы: случайный лес, градиентный бустинг и стекинг

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

    Сегодня мы узнаем, как превратить этот недостаток в преимущество. Мы поговорим об ансамблевых методах — подходах, которые объединяют множество слабых моделей (часто именно деревьев) в одну сильную. Как говорится: «Одна голова — хорошо, а две (или тысяча) — лучше».

    Философия ансамблей: Мудрость толпы

    Идея ансамблирования основана на статистическом феномене, известном как «мудрость толпы». Если вы спросите одного эксперта прогноз погоды, он может ошибиться. Но если вы спросите 100 экспертов и усредните их ответы, случайные ошибки отдельных людей взаимно скомпенсируют друг друга, и итоговый прогноз будет точнее.

    В машинном обучении существует три основных способа создания таких комитетов экспертов:

  • Бэггинг (Bagging) — параллельное обучение независимых моделей.
  • Бустинг (Boosting) — последовательное обучение, где каждая следующая модель исправляет ошибки предыдущей.
  • Стекинг (Stacking) — обучение «менеджера», который решает, кому из моделей верить.
  • !Сравнение архитектур Бэггинга, Бустинга и Стекинга

    Бэггинг и Случайный лес

    Бэггинг (Bootstrap Aggregating)

    Название происходит от слов Bootstrap aggregating. Этот метод борется с главным врагом сложных моделей — высоким разбросом (variance), то есть переобучением.

    Алгоритм работает так:

  • Из исходного набора данных мы создаем множество новых выборок методом бутстрэпа. Это значит, что мы берем случайные объекты из оригинального датасета с возвращением. Некоторые объекты могут попасть в новую выборку несколько раз, а некоторые — ни разу.
  • На каждой такой выборке мы обучаем отдельную модель (например, дерево решений).
  • Результаты всех моделей усредняются (для регрессии) или выбираются голосованием большинства (для классификации).
  • Математически усреднение для регрессии выглядит так:

    Где: * — итоговое предсказание ансамбля. * — количество базовых моделей (деревьев). * — знак суммы (суммируем предсказания всех моделей). * — предсказание -й базовой модели.

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

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

    При построении каждого узла дерева алгоритм видит не все признаки, а только их случайное подмножество. Это заставляет деревья искать нестандартные закономерности и не полагаться только на один «самый сильный» признак.

    Преимущества Случайного леса: * Практически не переобучается с ростом числа деревьев. * Работает «из коробки» без сложной настройки. * Позволяет оценить важность признаков (Feature Importance).

    Бустинг: работа над ошибками

    Если бэггинг — это демократия независимых экспертов, то бустинг — это процесс обучения с репетитором. Модели строятся последовательно.

    Идея проста: мы строим первое дерево (оно получается слабым и делает много ошибок). Второе дерево мы обучаем не на исходных целевых метках, а на ошибках первого дерева. Третье дерево учится исправлять ошибки первых двух, и так далее.

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

    Это самый популярный вид бустинга. Здесь «исправление ошибок» формализовано с помощью градиентного спуска. Каждая новая модель пытается предсказать антиградиент функции потерь (направление, в котором ошибка уменьшается быстрее всего).

    Формула обновления ансамбля на шаге :

    Где: * — предсказание ансамбля после добавления -го дерева. * — предсказание ансамбля на предыдущем шаге. * (эта) — темп обучения (learning rate). Коэффициент от 0 до 1, который регулирует вклад каждого нового дерева. Чем он меньше, тем надежнее модель, но тем больше деревьев нужно. * — новое базовое дерево, обученное на ошибках предыдущего ансамбля.

    !Визуализация того, как каждое следующее дерево уменьшает остаточную ошибку

    Популярные библиотеки бустинга: * XGBoost — классика соревновательного ML, быстрый и эффективный. * LightGBM — разработка Microsoft, очень быстрая, отлично работает с большими данными. * CatBoost — разработка Яндекс, лучше всех работает с категориальными признаками (текстом, цветами, типами) «из коробки».

    Минусы бустинга: * Склонен к переобучению, если деревьев слишком много. * Обучается дольше, чем случайный лес (так как процесс последовательный, его сложно распараллелить). * Требует тщательной настройки гиперпараметров.

    Стекинг (Stacking)

    Стекинг (или Stacked Generalization) — это подход, при котором мы объединяем предсказания нескольких разных алгоритмов (например, SVM, Random Forest и kNN) и подаем их на вход финальной модели (мета-модели).

    Процесс выглядит так:

  • Разделяем обучающую выборку на две части (A и B).
  • Обучаем базовые модели на части A.
  • Делаем предсказания этими моделями для части B.
  • Используем эти предсказания как новые признаки для обучения мета-модели (обычно это простая линейная регрессия).
  • Мета-модель учится понимать: «Ага, в ситуациях, когда SVM говорит "Да", а Лес говорит "Нет", чаще всего прав SVM».

    Сравнение методов

    | Характеристика | Случайный лес (Bagging) | Градиентный бустинг | Стекинг | | :--- | :--- | :--- | :--- | | Принцип | Параллельный, независимый | Последовательный, исправление ошибок | Иерархический, мета-обучение | | Цель | Снижение разброса (Variance) | Снижение смещения (Bias) | Повышение общей точности | | Сложность настройки | Низкая | Высокая | Очень высокая | | Риск переобучения | Низкий | Средний/Высокий | Высокий (без правильной валидации) |

    Пример на Python

    Давайте сравним реализацию Случайного леса и Градиентного бустинга, используя scikit-learn. Мы будем использовать задачу классификации.

    В этом примере мы использовали базовые реализации. В реальных задачах часто используются библиотеки xgboost или catboost из-за их скорости и дополнительных возможностей.

    Заключение

    Ансамблевые методы — это золотой стандарт в классическом машинном обучении. Если вы участвуете в соревновании на Kaggle или решаете бизнес-задачу с табличными данными, скорее всего, вашим лучшим решением станет Градиентный бустинг или Случайный лес.

    Мы научились: * Усреднять ошибки с помощью Бэггинга. * Последовательно улучшать результат с помощью Бустинга. * Комбинировать разные подходы с помощью Стекинга.

    Но как понять, что 95% точности — это хорошо? А если у нас дисбаланс классов и 99% объектов — это один класс? В следующей статье мы подробно разберем метрики качества моделей, такие как Precision, Recall, F1-score и ROC-AUC, чтобы вы могли объективно оценивать свои алгоритмы.

    5. Оценка качества моделей, метрики эффективности и борьба с переобучением

    Оценка качества моделей, метрики эффективности и борьба с переобучением

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

    Но возникает главный вопрос: как понять, насколько хороша ваша модель?

    Представьте, что вы создали алгоритм для банка, который решает, выдавать кредит или нет. Модель сообщает, что её точность — 95%. Звучит отлично, правда? Но что, если в вашей базе данных 95% клиентов — это надежные плательщики, и только 5% — мошенники? Если ваша модель просто будет всем подряд отвечать «Выдать кредит», она достигнет точности 95%, но принесет банку колоссальные убытки, пропустив всех мошенников.

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

    Метрики качества в задачах классификации

    Когда мы предсказываем категорию (например, «Болен» / «Здоров» или «Спам» / «Не спам»), простого подсчета совпадений недостаточно. Нам нужно понимать, где именно ошибается модель.

    Матрица ошибок (Confusion Matrix)

    Это основа для большинства метрик классификации. Допустим, мы решаем задачу бинарной классификации, где класс 1 — это «Положительный» (Positive), а класс 0 — «Отрицательный» (Negative).

    Результаты предсказаний делятся на четыре категории:

  • True Positive (TP): Истинно положительные. Модель сказала «Да», и это правда.
  • True Negative (TN): Истинно отрицательные. Модель сказала «Нет», и это правда.
  • False Positive (FP): Ложно положительные (Ошибка I рода). Модель сказала «Да», но ошиблась (ложная тревога).
  • False Negative (FN): Ложно отрицательные (Ошибка II рода). Модель сказала «Нет», но ошиблась (пропуск цели).
  • !Визуальное представление четырех исходов классификации.

    Accuracy (Доля правильных ответов)

    Самая интуитивная метрика. Это процент правильных предсказаний от общего числа примеров.

    Где: * — количество верно предсказанных положительных объектов. * — количество верно предсказанных отрицательных объектов. * — количество ошибок первого рода. * — количество ошибок второго рода.

    Проблема: Как мы обсуждали в начале, Accuracy бесполезна на несбалансированных выборках (когда одного класса намного больше, чем другого).

    Precision (Точность) и Recall (Полнота)

    Эти две метрики помогают детализировать качество работы модели.

    Precision отвечает на вопрос: «Если модель назвала объект положительным, какова вероятность, что она права?».

    Где: * — истинно положительные срабатывания. * — ложные срабатывания.

    Высокая Precision важна, когда цена ложной тревоги высока. Например, в спам-фильтре: мы не хотим, чтобы важное письмо от начальника улетело в спам.

    Recall отвечает на вопрос: «Какую долю положительных объектов из всех существующих модель смогла найти?».

    Где: * — истинно положительные срабатывания. * — пропущенные положительные объекты.

    Высокий Recall важен в медицине. Лучше перестраховаться и отправить здорового пациента на дообследование (низкая Precision), чем пропустить больного раком (низкий Recall).

    F1-Score (F-мера)

    Часто нам нужно найти баланс между Precision и Recall. Просто взять среднее арифметическое нельзя, так как если одна из метрик близка к нулю, модель плохая. Поэтому используют среднее гармоническое — F1-меру.

    Где: * — точность. * — полнота.

    Эта метрика достигает максимума (1), когда и точность, и полнота высоки, и падает до 0, если хотя бы одна из них равна нулю.

    ROC-AUC

    Многие классификаторы выдают не просто класс (0 или 1), а вероятность принадлежности к классу (например, 0.85). Чтобы превратить вероятность в класс, мы выбираем порог (обычно 0.5). Но кто сказал, что 0.5 — лучший порог?

    ROC-кривая показывает зависимость доли верных срабатываний (True Positive Rate) от доли ложных срабатываний (False Positive Rate) при варьировании порога.

    AUC (Area Under Curve) — это площадь под этой кривой. Чем она больше (ближе к 1), тем лучше модель умеет ранжировать объекты (отделять мух от котлет), независимо от выбранного порога классификации.

    Метрики качества в задачах регрессии

    Когда мы предсказываем число (цену квартиры, температуру, выручку), понятия «правильно» или «неправильно» размываются. Мы почти никогда не угадаем цену с точностью до копейки. Нам важно, насколько сильно мы ошиблись.

    MSE (Mean Squared Error)

    Среднеквадратичная ошибка. Мы берем разницу между предсказанием и фактом, возводим в квадрат и усредняем.

    Где: * — количество объектов в выборке. * — знак суммирования по всем объектам. * — реальное значение для -го объекта. * — предсказанное значение для -го объекта.

    Возведение в квадрат сильно «наказывает» модель за большие ошибки. Ошибка в 10 единиц хуже ошибки в 5 единиц не в 2 раза, а в 4 ( против ).

    MAE (Mean Absolute Error)

    Средняя абсолютная ошибка. Это просто средний модуль отклонения.

    Где: * — модуль числа (абсолютное значение). * Остальные обозначения те же, что и в MSE.

    MAE легче интерпретировать. Если MAE = 5000 при предсказании цены квартиры, это значит, что мы ошибаемся в среднем на 5000 рублей.

    Коэффициент детерминации ()

    Показывает, какую долю дисперсии (разнообразия) данных объясняет наша модель. Если , модель идеальна. Если , модель работает так же, как если бы мы просто предсказывали среднее значение по больнице для всех.

    Переобучение (Overfitting) и Недообучение (Underfitting)

    Главная проблема машинного обучения — найти баланс между простотой и сложностью.

  • Недообучение (Underfitting): Модель слишком простая. Она не может уловить закономерности в данных. Пример: попытка описать траекторию полета бумеранга прямой линией.
  • Переобучение (Overfitting): Модель слишком сложная. Она не просто выучила закономерности, она «зазубрила» шум и случайные выбросы в обучающей выборке. На новых данных такая модель работает ужасно.
  • !Наглядное сравнение недообучения, оптимальной модели и переобучения.

    Bias-Variance Tradeoff

    В машинном обучении существует фундаментальный компромисс: * Bias (Смещение) — ошибка из-за слишком простых предположений (ведет к недообучению). * Variance (Разброс) — ошибка из-за чрезмерной чувствительности к малым изменениям в тренировочных данных (ведет к переобучению).

    Сложные модели (глубокие деревья) имеют низкое смещение, но высокий разброс. Простые модели (линейная регрессия) — наоборот.

    Валидация: как честно проверить модель

    В первой статье мы говорили о разделении на train (обучение) и test (тест). Но этого часто недостаточно. Если мы будем подбирать параметры модели, постоянно проверяя её на test, мы неявно «подгоним» модель под тестовую выборку.

    Кросс-валидация (Cross-Validation)

    Самый надежный способ оценки. Метод -fold (кросс-валидация по блокам) работает так:

  • Разбиваем обучающие данные на равных частей (фолдов). Обычно или .
  • Обучаем модель на частях, а проверяем на оставшейся одной.
  • Повторяем процесс раз, каждый раз выбирая для проверки новую часть.
  • Усредняем полученные метрики качества.
  • Это позволяет использовать все доступные данные и для обучения, и для проверки, получая более объективную оценку.

    Регуляризация: лекарство от переобучения

    Если модель переобучается, можно принудительно ограничить её сложность. Этот метод называется регуляризацией. Мы добавляем в функцию потерь (то, что модель минимизирует) штраф за большие веса коэффициентов.

    Идея проста: если у модели очень большие веса (), значит, она слишком сильно реагирует на малейшие изменения признаков. Мы хотим, чтобы веса были маленькими.

    L1-регуляризация (Lasso)

    Добавляет штраф, пропорциональный модулю весов.

    Где: * — исходная ошибка модели (например, MSE). * (лямбда) — коэффициент регуляризации (сила штрафа). * — веса модели.

    Особенность: L1 может занулять веса ненужных признаков, фактически выполняя отбор признаков.

    L2-регуляризация (Ridge)

    Добавляет штраф, пропорциональный квадрату весов.

    Где: * — квадрат веса.

    Особенность: L2 делает веса маленькими, но редко равными строгому нулю. Это хорошо работает, когда все признаки важны, но нужно уменьшить переобучение.

    Заключение

    Сегодня мы научились объективно судить о работе наших алгоритмов. Мы узнали, что точность — это не всегда главное, научились балансировать между Precision и Recall, и разобрали методы борьбы с переобучением.

    Теперь вы обладаете полным набором знаний классического Data Scientist: от предобработки данных до создания и валидации сложных моделей. Этот фундамент позволит вам решать большинство бизнес-задач.

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