总的来说,我对 ML 和 SVM 等还不熟悉。我有一个信号的 x,y 数据点数组。该信号类似于心电图(如下)。我想训练 SVM 对正常心电图信号与非正常(异常)信号进行分类。使用 LibSVM(或任何其他 SVM 库)实现此目的的最佳方法是什么?
最佳答案
Support Vector Machines像几乎所有classifiers要求训练样本表示为 feature vectors位于特征空间中。
为了创建这样的特征向量,你必须这样做 feature extraction到你的信号。也就是说,您必须从信号中提取一些可测量的区分尺度不变特征(例如 wavelet coefficients )。
完成此操作后,您必须将特征向量组织为数据矩阵的行(或列)。数据矩阵是一个二维矩阵,其中的行(或其列)是先前提取的特征向量。例如,假设您有 3 个由 3D 特征向量表示的信号(即,您从每个信号中提取了 3 个特征)。
, ,
(其中 T 表示转置)。
那么你的数据矩阵将是:
创建数据矩阵后,您必须创建数据标签的 vector 。标签 vector 是一个一维 vector ,其行数(或列数)与数据矩阵相同,并且包含与特征向量对应的类标签。由于您的问题由两个类(即正常和非正常)组成,您的标签 vector 将只有 2 个符号(例如,正常 = -1,非正常 = 1)。继续前面的示例,如果 正常和 非正常,您的标签 vector 将类似于
现在就 LibSVM 部分而言:LibSVM使用 LibSVM format将数据矩阵与类标签一起存储在 .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's site您会发现所有说明都需要它来使用您的文件运行 LibSVM。
关于c++ - libsvm - 训练信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23300521/