卡尔曼滤波器¶
- class darts.models.filtering.kalman_filter.KalmanFilter(dim_x=1, kf=None)[源代码]¶
基类:
FilteringModel
,ABC
该模型在时间序列上实现了一个卡尔曼滤波器。
关键方法是 KalmanFilter.filter()。它将提供的时间序列视为包含从具有隐藏状态 x 的(可能带有噪声的)线性动态系统获得的(可能带有噪声的)观测值 z。函数 filter(series) 返回一个新的 TimeSeries,描述了输出 z(不带噪声)的分布,这是通过卡尔曼滤波器从 series 中顺序观察 z 以及线性系统的动态特性推断出来的,系统的阶数为 dim_x。
此过滤器还支持观测序列中的缺失值,在这种情况下,底层卡尔曼滤波器将继续使用其均值估计。
方法 KalmanFilter.fit() 用于通过使用N4SID算法估计线性动态系统的状态空间模型以及过程和测量噪声的协方差矩阵来初始化卡尔曼滤波器。
此实现使用了 NFourSID 包中的 Kalman。更多信息可以在这里找到:https://nfoursid.readthedocs.io/en/latest/source/kalman.html。
测量值 z 和可选的控制信号(协变量)u 的维度在调用 filter() 时会自动推断。
- 参数
dim_x (int) – 卡尔曼滤波器状态向量的大小。
kf (nfoursid.kalman.Kalman) – 可选地,一个 nfoursid.kalman.Kalman 的实例。如果提供了这个实例,参数 dim_x 将被忽略。这个实例将在每次调用 filter() 时被复制,因此状态不会从一个时间序列传递到另一个时间序列,即使在多次调用 filter() 时也是如此。过滤器的维度必须与调用 filter() 时使用的 TimeSeries 的维度匹配。
方法
filter
(series[, covariates, num_samples])按顺序对提供的观测序列应用卡尔曼滤波器。
fit
(series[, covariates, num_block_rows])使用N4SID算法初始化卡尔曼滤波器。
- filter(series, covariates=None, num_samples=1)[源代码]¶
按顺序对提供的观测序列应用卡尔曼滤波器。
- 参数
series (TimeSeries) – 用于根据指定的卡尔曼过程推断潜在输出的输出(观测值)序列。这必须是一个确定性序列(包含一个样本)。
covariates (Optional[TimeSeries]) – 一系列可选的输入(控制信号),如果卡尔曼滤波器是用协变量初始化的,则这是必要的。这必须是一个确定性的序列(包含一个样本)。
num_samples (int, default: 1) – 从推断的输出 z 分布中生成的样本数量。如果设置为 1,输出是一个包含使用分布均值的单一样本的 TimeSeries。
- 返回
推断输出 z 的(随机)`TimeSeries`,其宽度与输入序列相同。
- 返回类型
- fit(series, covariates=None, num_block_rows=None)[源代码]¶
使用N4SID算法初始化卡尔曼滤波器。
- 参数
series (TimeSeries) – 用于推断底层状态空间模型的输出(观测值)序列。这必须是一个确定性的序列(包含一个样本)。
covariates (Optional[TimeSeries]) – 一系列可选的输入(控制信号),也将用于推断底层状态空间模型。这必须是一个确定性的序列(包含一个样本)。
num_block_rows (Optional[int]) – 在N4SID算法中使用的块Hankel矩阵中使用的块行数。更多信息请参阅nfoursid.nfoursid.NFourSID的文档。如果未提供,将使用状态空间模型的维度,最大为10。
- 返回
拟合卡尔曼滤波器。
- 返回类型
self