c++ - libsvm - 训练信号

标签 c++ machine-learning classification libsvm

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

ECG

最佳答案

Support Vector Machines像几乎所有classifiers要求训练样本表示为 feature vectors位于特征空间中。

为了创建这样的特征向量,你必须这样做 feature extraction到你的信号。也就是说,您必须从信号中提取一些可测量的区分尺度不变特征(例如 wavelet coefficients )。

完成此操作后,您必须将特征向量组织为数据矩阵的行(或列)。数据矩阵是一个二维矩阵,其中的行(或其列)是先前提取的特征向量。例如,假设您有 3 个由 3D 特征向量表示的信号(即,您从每个信号中提取了 3 个特征)。

enter image description here , enter image description here , enter image description here

(其中 T 表示转置)。

那么你的数据矩阵将是:

enter image description here

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

现在就 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

但请记住,如果您有零个值,则可以忽略它们。例如如果 enter image description here那么你的文件将如下所示:

-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/

相关文章:

c++ - Poco 定时器示例

c++ - 嵌套 for 循环的外层 for 循环在执行时将被忽略

java - LinUCB exploration-exploitation 算法不会随时间改善结果

python - 将变量添加到 Keras/TensorFlow CNN 密集层

c++ - 推荐内存占用较小的快速 C++ UI 库

c++ - 为什么在C++中这个double值乘以2会出现计算错误?

lucene - 如何设计自动QA系统?

r - R 中的多类 ROC 曲线

python - NLTK 确定性衡量标准?

machine-learning - 使用基尼指数的决策树