libsvm - 训练信号
Posted
技术标签:
【中文标题】libsvm - 训练信号【英文标题】:libsvm - Training a signal 【发布时间】:2014-06-11 14:31:05 【问题描述】:总的来说,我是 ML 和 SVM 等的新手。我有一个信号的 x,y 数据点数组。该信号类似于心电图(下图)。我想训练 SVM 对正常 ECG 信号与非正常(异常)信号进行分类。使用 LibSVM(或任何其他 SVM 库)实现此目的的最佳方法是什么?
【问题讨论】:
【参考方案1】:Support Vector Machines 与几乎所有classifiers 一样,要求将训练样本表示为位于特征空间中的feature vectors。
为了创建这样的特征向量,您必须对信号执行feature extraction。也就是说,您必须从您的信号中提取一些可测量的判别尺度不变特征(例如,wavelet coefficients)。
完成此操作后,您必须将特征向量组织为 数据矩阵 的行(或列)。数据矩阵是一个二维矩阵,其行(或列)是先前提取的特征向量。例如,假设您有 3 个由 3D 特征向量表示的信号(即,您从每个信号中提取了 3 个特征)。
, ,
(其中 T 表示转置)。
那么您的数据矩阵将是:
创建数据矩阵后,您必须创建数据标签的向量。标签向量是一个一维向量,其行数(或列数)与您的数据矩阵相同,并且包含与您的特征向量相对应的类标签。由于您的问题包含两个类(即正常和非正常),因此您的标签向量将只有 2 个符号(例如,正常 = -1,非正常 = 1)。继续前面的例子,如果 正常和 非正常,你的标签向量看起来像
现在就 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 所需的所有说明。
【讨论】:
感谢您提供详细信息。你知道一个很好的库可以自动从信号中提取相关特征吗?正如您可能知道的那样,我是特征提取的新手。我认为峰值间隔距离和信号形态分割是很好的开始,但我不知道如何从以采样率sr
采集的点阵列中的数字信号中“提取”这些信息。
如果代表原始信号采样的每个点序列具有相同数量的点和具有相同索引的所有样本(例如,在每个信号中,序列中的第 3 个点具有索引 3) 对应于完全相同的采样时间帧,并且如果所有信号中的幅度具有相同的比例,那么您可以将它们本身的点序列用作特征向量。否则,您将不得不求助于 MatLab、Octave、SciKit-Learn、Weka 等软件包。信号特征提取技术有很多:arxiv.org/ftp/arxiv/papers/1005/1005.0957.pdf【参考方案2】:
对我来说,您的问题听起来像是 One-class classification 问题,因为您永远不会有“非正常”特征空间的训练样本。 libSVM 确实支持。
棘手的部分是提取不变特征,这是一个信号处理问题。您可能必须评估不同的方法,例如小波、FFT 或蛮力采样。您还可以尝试使用描述性方法,例如 6 个相对最小值/最大值。覆盖多个周期的算法可能比基于提取单个周期和/或提取单个参数的算法更稳定。
根据您可接受的误报率和误报率,一些替代方案可能会被排除在外。
【讨论】:
以上是关于libsvm - 训练信号的主要内容,如果未能解决你的问题,请参考以下文章