数据分段时间序列

时间:2017-07-13 19:20:51

标签: python time-series accelerometer

如何分离代表不重要数据的重要数据的序列?

一些 背景和示例: 正如在数据图中可以看到的那样(图 - 参见链接),这个时间序列中有9个部分,用IMU记录(测量加速度 - x,y,z,围绕x,y,z的方向旋转) 。该图可以在以下链接中找到:

Figure: Snipping gesture acceleration x,y,z

情节依赖的数据:Data.csv

在这种情况下,这些代表右手的剪切动作。在每个信号之间存在延迟(2-3秒)。这种延迟也可以延长

哪种方法最容易细分?我在哪里可以找到这些示例或者您能给我一个简单的例子吗? 我想知道什么?:相关信号的起点在哪里?

  • 异常检测。我已经实现了这个,但它预测非常模糊(我还没有优化它)。可能我需要更好的功能,然后只需要原始数据。我问这个问题,因为可能有更简单的方法。
  • K-means聚类:想到这个,但我该如何处理呢?有例子吗?
  • 频域分析: 将原始数据分割成具有重叠的帧(大小为100),并将它们转换为频率domoin。我可以使用哪些功能?想到信号能量?
  • 其他方法?

之后,这些片段将用作手势分类器的训练示例。

[可选附加信息:录制环境:手松动 - >手势得到执行 - >手松散 - >在松臂位置等待5秒 - > [记录手势的下一次迭代]。 另一个重要条件是我需要分割不同类型的手势(信号看起来不同),不仅是剪切手势,还可以向上滑动,向下滑动或竖起拇指。]

非常感谢您提前:))

迎接Max

3 个答案:

答案 0 :(得分:2)

有一些可能的解决方案: DBSCAN example here 要么 DTW example here方法。

此外,您可以手动执行此操作(例如Matlab m-file)。 这里:axaR是来自加速度计的信号(沿x轴),k - 点数,阈值 - 手动可调整值

figure (100)

for fig = 1: 5
k = 200;
threshold =20*fig*std(axaR);
fprintf('window size %d, threshold is %f\n', k,threshold)  
for i = 1: (length(axaR)-k)
    summa = 0;
    for j= 1:k
    summa =  summa + abs(axaR(i+j));
    end
    if (summa > threshold)
        c(i) = 1;
    else
        c(i) = 0;

    end
end

subplot(5,1,fig)
plot ( axaR, 'LineWidth', lw), hold on
plot(1:k,ones(k,1),'*r')
hold on, 
plot ( c, 'LineWidth', lw),
hold on, 
xlim([0,5000]),
title (strcat('threshold ', num2str(threshold), 'window size', num2str(k) ))
end

Matlab figure that illustrates the algorithm

这是行走分析的例子,它是完全基于直觉的方法,如果你知道任何数学或物理背景,请不要犹豫,分享它。

最佳

答案 1 :(得分:1)

“如何分离代表不重要数据的重要数据的序列?” 你的问题不明确。什么是“重要的”是主观的,而不是数据固有的。

但是,如果要构建分类器,可以将问题重新设置为“最保守的子序列是什么?”。您可以回答:

[matrixProfile,profileIndex,motifIndex,discordIndex] = interactiveMatrixProfileVer2(ay,250); (代码在http://www.cs.ucr.edu/~eamonn/MatrixProfile.html

免费

答案 2 :(得分:0)

如果你想手动分割数据(监督学习),我遇到了同样的问题,所以我创建了一个简单的python matplotlib库: https://github.com/XavierTolza/python-timeseries-segmenter