从多条曲线中提取特征
Posted
技术标签:
【中文标题】从多条曲线中提取特征【英文标题】:Feature extraction from multiple curves 【发布时间】:2015-08-05 10:15:29 【问题描述】:我从不同的传感器获得了多条曲线,但都连接在同一个移动对象中。
现在我想从中提取特征,假设我已经将 0-10 剪切为 window1,所以在 window1 中我得到了 5 个图形,每个图形代表一个特定位置的传感器,每个传感器生成 3 条曲线,x(red ) ,y(green),and z(blue),如下图:
**整个图是一个窗口
由于所有传感器都连接在同一个移动对象中,我认为这些图形和曲线应该有一些关系,我可以将其用作机器学习算法(尤其是 SVM)中的特征。但是他们太多了,我有点迷茫。
我可以从这个单一窗口生成多少合理的特征?
非常感谢您提供任何建议.. 谢谢!
【问题讨论】:
什么是“cut 0-10”,是指时间吗?这些是速度曲线还是位置?您对这些数据的总体任务是什么? 是的,0-10 以秒为单位,它们是加速度计读数,总体任务是检测运动模式。同时,我也得到了整个欧拉角数据.. 所以基本上,所有这些读数都描述了相同的运动,只是在不同的坐标系中?听起来像是正交 Procrustes 问题的工作。 是的,完全正确!它们在相同的对象中,但在不同的坐标系中,我已经为单个曲线计算了尽可能多的特征,包括每个曲线的 fft,但我认为它们之间必须有一些联系不同的坐标系,因为我的数学很差,我只计算每个坐标系的xyz,这是它们的卷积结果,我不确定它是否有帮助,也许我可以用这个结果计算相关性不同坐标系之间的系数 你想把这些数据上传到某个地方吗,我想我知道如何匹配它们但是如果不尝试就很难知道...... 【参考方案1】:您可以通过求解orthogonal Procrustes problem,将不同的时间序列转换为生活在同一坐标系中。
这是你给我的五个欧拉角数组(它们以 169x3 numpy 数组的形式存储在 arr[0]
到 arr[4]
):
现在我们通过以下 Python 例程解决正交 Procrustes 问题,它允许我们旋转一个数组以尽可能接近地匹配另一个数组:
def rotate_into(arr0, arr1):
"""Solve orthogonal Procrustes problem"""
M = dot(arr0.T, arr1)
(U,S,V) = svd(M)
Q = dot(U, V) # the rotation matrix which transforms arr0 into arr1
return arr0.dot(Q)
svd
是奇异值分解,位于numpy.linalg.svd
。现在我们可以将此例程应用于每个数组并将其转换为尽可能接近参考数组,这里是第一个:
reference = 0
for i in range(0,5):
subplot(2,3, i+1)
plot(rotate_into(arr[i], arr[reference]))
现在所有系列都具有可比性,您可以通过取均值、标准差等轻松计算特征。
【讨论】:
cfh ,您是天才,非常感谢您深入研究我的问题。我相信您是对的,但仍有几点我不明白:首先,正交 Procrustes 是否会改变原始物理特性?因为被改造的结果似乎全都变了。第二,为什么它适合包含多坐标系的系统?第三:因为我将这个窗口与另一个窗口进行比较,我应该通过将我拥有的每条曲线相加来计算整个平均值或标准差吗? @Yank:在您的设备中,所有传感器都有不同的物理方向。解决 Procrustes 问题尝试为每个传感器找到一个旋转矩阵Q
,这样,当传感器数据被它旋转时,它尽可能接近参考数据,在我的示例中它只是第一个传感器。效果类似于您设备中的所有运动传感器一开始就以相同的方向安装。
@Yank:我应该提一下,如果您想比较不同的窗口,最好事先为每个传感器计算一次正确的旋转矩阵Q
,而不是在每个窗口中更改它。如果您希望现在可以简单地将所有 5 个传感器平均在一起以获得特征,或者如果这对您的数据很重要,您可以将传感器分开。
这种方法让我大吃一惊。在我看到你的答案之前,我从没想过这个问题会导致我解决系统设计中的另一个大问题。这是我对这种变换的理解:由于所有传感器最初都是在相同的条件下校准的(在相同的平板和方向上校准)然后我将它们附加到我的对象的不同位置,有些是垂直的,有些是水平的,因此它们很难得到合理的整体系统特征。用你的方法改造后,我选择了一个参考点,每个传感器都可以认为它们在同一个坐标系中。r?
我猜方向是一个重要的重要特征,当然是传感器之间的不同方向。这不会完全撤销吗?以上是关于从多条曲线中提取特征的主要内容,如果未能解决你的问题,请参考以下文章