我在以下链接中共享了一个数据集:
https://drive.google.com/open?id=0B2Iv8dfU4fTUSV8wMmUwVGMyRE0
estimated_data.csv
文件的简单图表生成以下图表。
和actual_data.csv
(这是我的基本事实)的简单图表生成以下图
当我们将实际信号和估计信号一起绘制时,这就是我们得到的信息
我想找到最接近估计和实际信号的模式。我试图使用pandas.rolling_max()
找到最接近的模式,方法是将数据加载到DataFrame
并计算滚动最大值,然后转动整个系列并向后计算窗口。下面是我的Python
脚本。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.ion()
df = pd.read_csv('estimated.csv', names=('x','y'))
df['rolling_max'] = df['y'].rolling(8500).max()
df['rolling_max_backwards'] = df['y'][::-1].rolling(850).max()
df.rolling_max.fillna(df.rolling_max_backwards, inplace=True)
plt.figure()
plt.plot(df['x'], df['rolling_max'], label = 'rolling')
plt.legend()
plt.title('Pattern')
plt.xlim(0,10)
plt.ylim(0,700)
plt.xlabel('Time [Seconds]')
plt.ylabel('Segments')
plt.grid()
plt.show(block=True)
最终生成以下模式。
然而,当我将它与我的基本事实(actual_data.csv
的情节)进行比较时,我并不觉得这种模式足够接近。我们如何应用Kalman Filter
等过滤模型来查找此类signal的模式?
答案 0 :(得分:0)
卡尔曼滤波器对于输入数据非常有用,该输入数据具有加上高斯噪声的真实平均值。您可以测量或以其他方式知道随机噪声的方差,并将其作为测量噪声提供给算法。您输入的数据(您称之为#34;估计信号")不具有(平均)实际信号的值。它似乎有一个错误,导致它经常测量接近零,并且很少高于实际值。它似乎只是超过实际值,作为警告,实际值即将急剧下降。
在这种情况下,卡尔曼滤波器不太可能对您有所帮助,因为该数据集严重违反了对输入数据的假设。您最好的选择是改善您的输入数据(例如,在这种情况下,错误可能是由于传感器中的缺陷造成的)。如果这是不可能的,那么你自己对数据的直觉(采取滚动最大值)与行为的关系比KF更为一致。