我将电信号表示为 2(内部)d 数据。每个数据点的格式为(<timestamp>, <power_value>)。我希望能够区分信号窗口可以属于的 4 种不同状态。
为了让您更好地理解,这里有一个信号看起来如何的例子
在这里,我们可以看到代表的所有 4 个不同的状态。
关闭- 信号完全静止并且在这种情况下其幅度低于标准偏差。你可以在剧情结束前看到一小部分
空闲- 当信号静止但其幅度接近平均水平时。就像在剧情的开始。
待机- 信号有一些明显变化的区域,例如在第二个尖峰之后。
开- 变化多且频率高的区域
我希望能够确定指定长度窗口(长度也是必须讨论的)属于哪些状态。
到目前为止,我所做的非常简单,而且有点业余。我只使用两个特征训练了一个随机森林,一个窗口的平均值和一个窗口的方差。为了运行分类,我在滑动窗口上应用分类,并且每次标记第一个数据点。
我开始这样做是因为起初分类必须能够区分 3 种状态(关闭、空闲、开启),即使使用这些简单的统计特征也很容易。我什至可以纠正一个简单的 if-then-else 而不是训练决策树,结果将同样准确,因为这三个状态对于这些特征具有非常不同的值。但是随着添加第四个状态,分类器会失败很多。这很正常。在上面的图片中可能没有很好地描述它,但Stand-By和On,在特定区域,有一些共同的方差和平均值。
我对采用模式匹配方法不感兴趣,尽管这可以有力地解决所有这些问题,但这也意味着我必须创建一组参考模式,这会产生许多不同的含义。
我正在寻找的是一组功能,使我能够有效地区分这些状态。首先,您认为这可能吗?
我的理解告诉我,也许一组频域特征可以提高准确性。我只使用过一次这样的功能(MFCC),用于音频分类,但这不适用于这种情况。
如果您认为这是可能的,您能否推荐一组可以尝试的功能,或者向我指出您认为非常适合这种情况的研究?
更新
在 MikeP 的建议之后,我使用 Octavespecgram和默认参数创建了一个频谱图
更新2
在解决这个问题几天后,我设法取得了一些进展。我尝试了不同的功能集并添加了一些新功能。
我所做的是通过添加偏度和峰度来扩展我的统计特征。我还通过添加与参考模式(每个状态之一)的 dtw 距离来转向更多模式匹配方法。最后一步大大改善了滑动窗口分类的结果。
我的问题仍然在于我用于分类的滑动技术,因为每次窗口落入中间(也未标记)情况时,分类器都很难断定它看到的是什么。
我现在要做的是使用 SVM 而不是带有多项式内核(4 级)的 RandomForests。我正在使用scikit-learn实现。问题是分类器总是将数据分类为state_3。我想我在施加某种偏见,但我不知道为什么以及如何。你有什么想法可能会出错吗?
为了了解标记的外观,这里有一些标记的信号实例
更新3
我没有使用多项式内核,而是为 SVM 使用了线性内核,并且分类器工作正常。实际上,我得到了迄今为止最好的结果。我可能需要额外工作以使整个分类管道更高效,因为 svm 和额外的特征提取使一切变得非常缓慢



