Я новичок в ML и SVM и т.д. в целом. У меня есть массив x, y точек данных сигнала. Сигнал напоминает ЭКГ (ниже). Я хочу обучить SVM классифицировать нормальный сигнал ЭКГ по сравнению с ненормальным (ненормальным) сигналом. Каков наилучший способ добиться этого с помощью LibSVM (или любой другой библиотеки SVM)?
Опорные векторные машины как почти все классификаторы требуют, чтобы обучающие образцы были представлены в виде векторы функций которые лежат в особенном пространстве.
Чтобы создать такие векторы функций, вам нужно будет сделать извлечение признаков на ваши сигналы. Таким образом, вы должны извлечь некоторые измеримые отличительные черты инвариантных признаков из ваших сигналов (например, вейвлет-коэффициенты).
Как только вы это сделаете, вам придется организовать ваши векторы объектов в виде строк (или столбцов) Данные матрицы. Матрица данных — это двумерная матрица, где ее строки (или столбцы) представляют собой ранее извлеченные векторы признаков. Например, предположим, что у вас есть 3 сигнала, которые представлены векторами пространственных объектов 3D (т.е. из каждого из ваших сигналов вы извлекли 3 объекта).
,
,
(Где T обозначает транспонирование).
Тогда ваша матрица данных будет:
После создания матрицы данных вам нужно будет создать вектор меток данных. Вектор меток — это одномерный вектор с тем же числом строк (или столбцов), что и в вашей матрице данных, и содержит метки классов, соответствующие векторам объектов. Поскольку ваша задача состоит из двух классов (то есть нормальных и ненормальных), ваш вектор меток будет иметь только 2 символа (например, нормальный = -1, ненормальный = 1). Продолжая предыдущий пример, если нормальный и ненормальный, ваш вектор меток будет выглядеть
Теперь, что касается части LibSVM: LibSVM использует Формат LibSVM хранить матрицу данных вместе с метками классов в .txt
файл.
Формат файла:
<label> <index1>:<value1> <index2>:<value2>
Следуя нашему примеру, содержимое вашего файла будет выглядеть так:
-1 1:1 2:2 3:3
-1 1:4 2:5 3:6
1 1:7 2:8 3:9
Имейте в виду, однако, что если у вас есть нулевые значения, вы можете их опустить. Например, если тогда ваш файл будет выглядеть так:
-1 2:2 3:3
-1 1:4 2:5 3:6
1 1:7 2:8 3:9
Также обратите внимание, что в каждой строке файла сначала пишется метка класса вектора объектов, а затем его значения.
Как только вы создали файл, упомянутый выше, вы готовы к работе. в Сайт LibSVM вы найдете все инструкции, необходимые для запуска LibSVM с вашим файлом.
для меня ваша проблема звучит как Одноклассная классификация проблема, поскольку у вас никогда не будет тренировок для «ненормального» пространства функций. libSVM поддерживает это.
сложная часть заключается в извлечении инвариантных функций, что является проблемой обработки сигналов. Вы, вероятно, должны оценить различные подходы, такие как вейвлеты, FFT или выборка методом грубой силы. Вы также можете попробовать описательный подход, как 6 относительных минимальных / максимальных значений. алгоритмы, охватывающие несколько периодов, могут быть более стабильными, чем алгоритмы, основанные на выделении отдельных периодов и / или выделении отдельных параметров.
в зависимости от вашего приемлемого уровня ложных положительных и ложных отрицательных результатов некоторые альтернативы могут быть исключены.