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.
В итоге были получены значения признаков аудио сигнала, благодаря которым, я могу распознать на каком музыкальном инструменте была сыграна мелодия.
Алгоритм пока работает для мелодий, которые сыграны на одном музыкальном инструменте, но в планах и много-инструментальные мелодии.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 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
                    У этой мечты есть оборотная сторона:
                    сидишь, пытаешься нарулить звук на аналоговых эффектах как у «Мегадэт», нарулил, проверяешь себя — а программа такая: «Ваша гитара звучит как у ранней „Арии“.
                    Это ж страшнее пистолета!

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