Случайные леса — это универсальный метод машинного обучения, который можно использовать для прогнозирования категорий или выполнения регрессии. Одной из особенностей этого метода является то, что он не предполагает какой-либо конкретной статистики набора данных. Это делает его очень мощным методом, который работает с различными наборами данных.

Код этого сообщения находится по адресу https://github.com/berlemontkevin/FrenchNeurons_SongPopularityPrediction

В этом посте я опишу, как применить алгоритм случайного леса к задаче классификации популярности песен (https://www.kaggle.com/c/song-popularity-prediction/overview). Этот простой алгоритм смог достичь 40% лучших результатов в конкурсе Kaggle без какой-либо серьезной предварительной обработки данных. Популярность песни определяется категориальной переменной, равной 0, если она не популярна, и 1, если она популярна. Другие функции в наборе данных:
- song_duration: продолжительность песни
- акустика: описывает, насколько акустической является песня< br /> - танцевальность: значение 0 означает наименее танцевальную способность, значение 1 - наиболее танцевальную способность
- энергия: представляет перцептивную меру интенсивности и активности
- инструментальность: количество вокала в песне
- ключ: целые числа сопоставляются с высотой тона с использованием стандартной нотации Pitch Class
- liveness: вероятность того, что песня была записана при живой аудитории
- loudness: громкость трека в дБ
- audio_mode : указывает на модальность дорожки
- речь: наличие произносимых слов в песне
- темп: предполагаемый темп дорожки
- time_signature: сколько долей в каждом такте
- audio_valence: музыкальная позитивность, передаваемая треком

Изучение набора данных

Как и в любом проекте по науке о данных, первым шагом будет просмотр данных, чтобы получить некоторое представление об общей структуре. Я использую первую часть этого поста, чтобы сделать краткое введение в исследовательский анализ набора данных.

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

Теперь я сосредоточусь на функции инструментальность. Поскольку распределение сильно искажено, мы рассмотрим форму распределения без искаженной части.

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

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

Реализация случайного леса

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

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

Библиотека sklearn (https://scikit-learn.org) содержит реализацию классификатора случайного леса.

Функция принимает различные параметры, которые можно использовать для настройки модели на определенный набор данных. Я выделю некоторые из них:
- n_estimators: общее количество деревьев в лесу.
- max_depth: максимальная глубина дерево. Или, другими словами, максимальное количество узлов перед листом.
- min_samples_split: минимальное количество образцов, необходимое для разделения узла.
- max_features : количество признаков, которые учитываются при поиске наилучшего разделения узла.
- вес_класса: этот параметр особенно важен в этом проекте, так как существует огромное несоответствие между количество непопулярных и популярных песен. Этот параметр определяет веса, связанные с различными классами.

Один из вопросов, который возникает из-за многочисленных параметров модели случайного леса, заключается в следующем: как выбрать оптимальный набор параметров для конкретной задачи классификации?
Один из наивных способов состоит в том, чтобы попробовать случайные комбинации параметры и в конце выберите тот, который работает лучше всего. Хотя это неэффективно, это может быть способом получить первый набор параметров, а затем выполнить более подробный поиск, перепробовав все возможные комбинации рядом с этой точкой (поиск по сетке).
Более эффективный метод оптимизации гиперпараметров состоит в байесовской оптимизации. Этот подход заключается в сопоставлении вероятностной модели оценки с различными гиперпараметрами, что позволяет более эффективно использовать вычислительные ресурсы для поиска оптимального набора гиперпараметров. Эта конкретная процедура оптимизации реализована в пакете scikit-optimize (https://scikit-optimize.github.io/stable/). Следующий код представляет собой пример байесовской процедуры поиска для классификатора случайного леса.

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

Тот факт, что AUC (площадь под кривой) модели превышает 0,5, означает, что она работает лучше, чем случайный классификатор. Однако значение близко к 0,5, что означает низкую точность.

Глядя на важность функций

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

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

Заключение

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