关于C#:libsvm-训练信号

libsvm - Training a signal

一般来说,我是ML和SVM等的新手。我有一个信号的x,y数据点数组。该信号类似于ECG(下图)。我想训练SVM对正常ECG信号与非正常(异常)信号进行分类。使用LibSVM(或任何其他SVM库)实现此目标的最佳方法是什么?

ECG


支持向量机就像几乎所有分类器一样,都要求训练样本表示为位于特征空间中的特征向量。

为了创建这样的特征向量,您必须对信号进行特征提取。也就是说,您必须从信号中提取一些可测量的区分尺度不变特征(例如小波系数)。

一旦这样做,就必须将特征向量组织为数据矩阵的行(或列)。数据矩阵是2D矩阵,其中的行(或其列)是先前提取的特征向量。例如,假设您有3个以3D特征向量表示的信号(即从每个信号中提取了3个特征)。

enter

创建数据矩阵后,您必须创建数据标签的向量。标签向量是一维向量,其行(或列)数与数据矩阵相同,并且包含与特征向量相对应的类标签。由于您的问题包含两个类别(即正常和非正常),因此您的标签矢量将只有2个符号(例如,正常= -1,非正常= 1)。继续前面的示例,如果enter

1
<label> <index1>:<value1> <index2>:<value2>

按照我们的示例,您文件的内容如下所示:

1
2
3
-1 1:1 2:2 3:3
-1 1:4 2:5 3:6
 1 1:7 2:8 3:9

请记住,如果您有零值,则可以忽略它们。例如,如果enter

1
2
3
-1 2:2 3:3
-1 1:4 2:5 3:6
 1 1:7 2:8 3:9

还要注意,在文件的每一行中,首先编写特征矢量的类标签,然后编写其值。

创建了上述文件后,就可以开始使用了。在LibSVM的站点中,您会找到使用它来运行LibSVM和文件的所有说明。


对我来说,您的问题听起来像是一类分类问题,因为您永远不会为"非正常"特征空间准备训练样本。 libSVM确实支持该功能。

棘手的部分是提取不变特征,这是信号处理问题。您可能必须评估不同的方法,例如小波,FFT或蛮力采样。您还可以尝试采用描述性方法,例如6个相对的最小/最大值。覆盖多个周期的算法可能比基于提取单个周期和/或提取单个参数的算法更稳定。

根据您可接受的误报率和误报率,某些选择可能会被排除在外。