Вскоре после завершения нашего проекта Data-Engineering для нашего Coding Bootcamp мы перешли к следующей интересной теме: Неконтролируемое машинное обучение: кластеризация песен. Преуспев в ощущении объединения вещей для формирования более широкой картины, теперь нам нужно было получить некоторые данные от Spotify — чтобы удовлетворить потребности нашего воображаемого масштабируемого стартапа под названием Moosic. Мы притворились, что были наняты ими в качестве их специалистов по данным.

Основным направлением деятельности Moosic было создание персонализированных плейлистов для своих клиентов, и нашей задачей было выяснить, можно ли автоматизировать этот процесс. Для этого мы собрали данные из Spotify и решили выявить закономерности и сходства в песнях.
Используя неконтролируемые методы машинного обучения, такие как кластеризация, мы стремились сгруппировать песни на основе их особенностей и характеристик.

Подготовка данных

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

Чтобы подготовить данные для анализа, мы удалили некоторые столбцы, которые не имели отношения к нашей задаче, например, с неправильными типами данных, и объединили столбцы «имя» и «исполнитель», чтобы сделать набор данных более управляемым. Мы также поэкспериментировали с некоторыми визуализациями, чтобы понять взаимосвязь между различными столбцами в наименьшем наборе данных.

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

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

Кластерное исследование

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

Наши воображаемые боссы сказали нам использовать около 200–250 песен на кластер, поэтому, узнав о KMeans, мы применили 5 центроидов. Очевидно, что они не имеют большого смысла в данном отношении, но могут иметь смысл в других отношениях. Мы не только узнали о KMeans, но и ранее упомянули масштабировщик. Имея кластеры и соответствующие им центроиды, мы быстро решили использовать Quantile Transformer для масштабирования наших данных — не только для того, чтобы получить легко различимые кластеры с наименьшим перекрытием (как это нам показалось на картинке выше), но и попытаться разберитесь с документацией!

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

Моделирование

Итак, ранее мы говорили, что перед нами стоит задача собрать около 200–250 песен для наших «стильных» или «капризных» плейлистов. Но по лени (шутка :P) мы не хотели потом искать много выбросов в созданных нами кластерах. И поскольку мы также умны, мы посмотрели на среднюю продолжительность наших песен (прежде чем отбросить этот столбец как бесполезный для нашей кластеризации…). Поэтому мы решили: ~130 песен в группе, каждая примерно по 4 минуты, должно быть более чем достаточно, чтобы создать хороший плейлист, отражающий определенное настроение или стиль, если даже не сам жанр. Чтобы оправдать наше решение, мы даже разработали различные оценки силуэта и инерции, но ни один из них не имел для нас никакого значения (но все же было бы очень полезно знать об этом). Однако знать о них все же полезно на случай масштабирования проекта.

Говоря о расширении этого проекта: на самом деле это была одна из самых приятных частей проекта — ручная маркировка различных кластеров (что легко может стать немного утомительным, когда вы думаете о сотнях, если не тысячах плейлистов для маркировки…). Поскольку наш подход заключался в том, чтобы получить как можно более определенные/четкие кластеры, мы не производили столько выбросов, чтобы найти — по крайней мере, мы не нашли много в процессе сэмплирования всей музыки. Чего мы не получали в большинстве случаев, так это кластеров одного жанра, но у нас всегда было ощущение основной темы внутри каждого кластера. Иногда было трудно выразить это словами, но нам определенно понравилось немного проявить творческий подход:

Заключение

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

  • Евклидовы и манхэттенские расстояния
  • Введение в модуль Sklearn
  • Различные масштабаторы и преобразователи
  • Показатели инерции и силуэта
  • Кластеризация с помощью KMeans

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

С методами, объясненными и упомянутыми в статье, можно представить, где этот проект можно было бы распространить на более крупные наборы данных, но даже с предоставленными данными в 5000 песен есть много места для экспериментов, что мы обязательно сделаем в ближайшее время. Будущее для дальнейшей полировки нашего проекта. Но сначала нам нужно продолжить наше учебное путешествие в классе, полном умных и красивых людей в нашем учебном лагере… Следите за машинным обучением с учителем, над которым мы сейчас работаем :)

Мой LinkedIn (а позже ссылка на этот еще очень неотшлифованный репозиторий :D)

Отказ от ответственности

Изображения «Moosic: The Monet-ic Mosaique-esque Music-Moose», «Moosic Preparing Data», «DALL-E in DALL-E out» и «Modeling Music», использованные в этой статье, были созданы с использованием OpenAI DALL-E API. .