20 марта 2014 в 11:38

Data Mining в музыке. Определяем музыкальный инструмент при помощи Деревьев Классификации из песочницы

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

Итак, поехали

Наши исходные данные:
  • 550 записей по 5 минут для 10 инструментов – по 55 записей на инструмент.
  • Музыкальные инструменты: пианино, виолончель, домбра, флейта, дудка, гитара, аккордеон, кларнет, альт, скрипка.
  • 9 признаков музыкального звукового сигнала.


Что хотим в итоге?

В итоге хочется получить какие-то значения признаков, которые бы помогли проклассифицировать музыкальные сигналы и легли в основу алгоритма классификации.

Как будем делать

Стратегия будет следующей:
  1. Подготовка входных данных
  2. Кластерный анализ
  3. Снижение размерности входных данных
  4. Анализ методом Деревьев Классификации

Собственно вот о б этом и пойдет дальше речь.

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

На этом этапе мы различными методами (анализ Фурье и прочие) мы получим значения для наших 9 характеристик.

Кластерный анализ

Воспользуемся методом Иерархический классификации. Результат кластеризации данным методом представлен на рисунке ниже(кластеры выделены красными кружками).

image

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

Снижение размерности входных данных

Имеющийся в нашем распоряжении набор входных данных имеет довольно большую размерность, а следовательно с ним не совсем удобно работать. Осуществим попытку снизить размерность входных данных, то есть решить задачу редукции данных.
Для этого мы воспользуемся сначала Факторным анализом, как более грубым инструментом, а потом к результатам Факторного анализа применим метод Многомерного шкалирования.
Проведем факторный анализ. Так как мы не знаем заведомо, сколько факторов будет выделено, то проведем для 9 факторов. Собственные значения представлены в таблице ниже:

Собственные значения Выделение: Главные компоненты
Соб. зн. % общей дисперсии Кумулятивн. собств знач Кумулятивн. %
1 3,640494 40,44993 3,640494 40,4499
2 1,875795 20,84217 5,516289 61,2921
3 1,028626 11,42918 6,544915 72,7213
4 0,869353 9,65948 7,414268 82,3808
5 0,636831 7,07590 8,051100 89,4567
6 0,410692 4,56325 8,461792 94,0199
7 0,261768 2,90854 8,723560 96,9284
8 0,204545 2,27272 8,928105 99,2012
9 0,071895 0,79883 9,000000 100,0000

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

image

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

image

Анализ методом Деревьев Классификации

Ввиду того, что мы априорно знаем, о существовании 10 кластеров в исходных данных, а также что мы имеем некоторое доказательство их существования (то есть имеется возможность классификации по имеющемуся набору характеристик): результат кластеризации по методу Иерархической классификации, а также полученные выводы при предварительном исследовании входных данных,– решено применить весьма «тонкий» инструмент – Деревья Классификации. Решено так же применить одномерное ветвление по методу CART, как наиболее точному методу для задач классификации.
Алгоритм построил следующее дерево классификации:

image

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

Заключение

Все эксперименты проводились при помощи друзей-музыкантов и математического пакета Statistica.
В итоге были получены значения признаков аудио сигнала, благодаря которым, я могу распознать на каком музыкальном инструменте была сыграна мелодия.
Алгоритм пока работает для мелодий, которые сыграны на одном музыкальном инструменте, но в планах и много-инструментальные мелодии.
Хмельницкий Андрей @TheHedgehog
карма
2,0
рейтинг 0,0
Пользователь
Самое читаемое Дизайн

Комментарии (12)

  • 0
    Круто-круто! Сам таким хотел давно заняться и думаю, что все-таки займусь после вашего поста. Спасибо!
    • 0
      Спасибо, но еще много работы предстоит — попробовать с мелодиями, которые проигрались не одним музыкальным инструментом.
  • +4
    Какие «9 признаков музыкального звукового сигнала» вы использовали?
    • –5
      Извиняюсь перед всеми, что не упомянул их, но это моя «маленькая тайна»:) Просто скажу, это различные характеристики обертонов, так как именно они создают «индивидуальность» музыкального инструмента.
  • +1
    Простите, но кажется в заголовке лишний мягкий знак в слове «дерьевьев»
    • +1
      Ага, есть такое:) исправился:)
  • +3
    Для много-инструментальных мелодий у Вас могут возникнуть проблемы перекрытия обертонов для нот, взятых одновременно. Ноты, взятые на одном музыкальном инструменты своими обертонами или фундаментальной частотой могут маскировать обертоны, а иногда и фундаментальные частоты (при большей амплитуде), взятые на другом инструменте. Проблема распознавания как инструментов, так и партитуры, остро стоит именно для полифонических произведений. Подумайте об этом и удачи!
  • +6
    Ничего не понятно. Результатов не видно (значение признаков-то получено, а как узнать, хорошее или плохое?), выбираете CART из невесть откуда взявшегося утверждения, что это «наиболее точный метод для задач классификации»; кросс-валидации, видимо, не было; какие-то непонятные магические 9 признаков (признаков непонятно чего — коротких временных отрезков звука? треков целиком?), утверждение о большой размерности (хотя до этого говорилось о 9 признаках).
  • +1
    Советую обратить внимание на публикации этой группы http://mtg.upf.edu/
    Они занимаются в том числе и вашей темой.
  • +3
    Такое ощущение, что из достаточно большой работы вы надёргали всего понемножку из разных мест, причём понятно это будет только специалисту «в теме». Я вот, к примеру, в упор не вижу, что "… по графику каменистой осыпи можно выделить 3 фактора...".

    Кроме того, такой анализ имеет более «спортивный», нежели «практический» интерес. А вот если бы вы разработали работающую систему, которая на вход приняла mp3 или wav файл (пусть даже с одним инструментом, да хотя бы пианино), а на выходе выдала бы готовые ноты в формате MusicXML — вот тогда бы благодарность сообщества не имела бы границ в пределах разумного (с).
  • 0
    Эх мечты: Запускаешь программу, а она тебе — гитара записано вероятно на ESP Explorer, EMG 81/ 81 через Mesa/Boogie Mark IIC+… Ну и там возможный тракт обработки.
    • 0
      У этой мечты есть оборотная сторона:
      сидишь, пытаешься нарулить звук на аналоговых эффектах как у «Мегадэт», нарулил, проверяешь себя — а программа такая: «Ваша гитара звучит как у ранней „Арии“.
      Это ж страшнее пистолета!

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.