用多项式拟合周期性数据有什么问题?

机器算法验证 回归 时间序列 预测模型 曲线拟合 季节性
2022-04-14 19:35:14

假设我们有玩具每日温带数据,我们想要拟合一个模型。

在此处输入图像描述

一个合理的做法是用傅里叶基拟合周期性模型

f(x)=β0+β1cos(2πx/24)+β2sin(2πx/24)

所以数据矩阵的傅里叶基展开是X

[1cos0sin01cosπ4sinπ41cos7π4sin7π4]

另一方面,假设我不知道傅里叶展开,只知道多项式拟合。所以我用三阶多项式拟合数据,其中

f(x)=β0+β1x+β2x2+β3x3

数据矩阵的多项式基展开是(出于演示目的,我没有使用正交多项式,这在现实世界的问题中是病态的。)X

[1 0001332331 21212213]

这两种拟合如下所示,它们是“相似的”。我的问题是,多项式拟合周期性数据有什么问题?在这种情况下,我们没有外推,时间应始终为[0,23]

    d = data.frame(t=c(0,3,6,9,12,15,18,21),
    temp=c(-2.2,-2.8,-6.1,-3.9,0,1.1,-0.6,-1.1))
    X=cbind(1,cos(2*pi*d$t/24),sin(2*pi*d$t/24))
    coeff = solve(t(X) %*% X, t(X) %*% d$temp)
    X2=cbind(1,d$t, d$t^2, d$t^3)
    coeff_2 = solve(t(X2) %*% X2, t(X2) %*% d$temp)
    plot(d$t,d$temp,type='b')

    d_new = seq(0,24,0.1)
    X=cbind(1,cos(2*pi*d_new/24),sin(2*pi*d_new/24))
    X2=cbind(1,d_new, d_new^2, d_new^3)

    lines(d_new,X %*% coeff, type='l',col='red')
    lines(d_new,X2 %*% coeff_2, type='l', col='blue')

在此处输入图像描述

4个回答

仅在您提供的数据集中,在傅立叶基础上使用多项式的唯一真正缺点是处的不连续性问题。正如您所说,如果您真的愿意,您可以添加约束来解决这个问题。T=0T=24

但更典型的是,对于这类数据,我们观察到几个周期。在这种情况下,它将是数据的天数。关键是要利用周一下午 3 点与周二下午 3 点具有非常相似的特性这一事实。这种关系根本不会出现在“香草”多项式展开式中,因此您根本不会从不同的周期中借用进行估计。出于类似的原因,你几乎没有希望得到一个好的推断,即使只有 1 天,即使从一个非常基本的傅立叶展开,你可以说“我想明天下午 3 点,它可能和通常是在下午 3 点”。

错误在于,要准确捕获最简单的周期性过程,例如单色正弦波,您需要无限数量的多项式项。看泰勒展开

直觉上,你想要拟合(在某种意义上)看起来像 你的底层过程的函数。这样,您将拥有最少数量的参数来估计。假设您有一个圆孔,需要在其中插入软木塞。如果你的软木塞是方形的,那么它比圆形的软木塞更难适应。

处的不连续性是问题。实际上,该图具有误导性,因为它仅绘制到如果我们将绘图代码更改为:T=0T=24T21

plot(d$t,d$temp,type='b',xlim=c(0,24),ylim=c(-7.5,1.5))

我们可以看到三阶多项式不是一个很好的拟合:

在时间,温度为,但第二天在时间温度为!:01.707.04

在此处输入图像描述

此外,将函数输入设为任意实数是非常自然的,而不是仅限于 0 到 23。T

例如,当表示第二天 1:00,表示前一天 23:00。使用多项式基础,我们需要在 0 到 23 内生成输出。T=25T=1

但是随着傅里叶基的扩展,一切都是内置的。

如果您使用样条拟合有限时间间隔的数据,比如一天,这不会考虑前后间隔的值。即使用多项式拟合非周期性数据,您也会发现这种效果:拟合数据对最后一个和第一个跨度间隔“反应过度”。一种平滑的方法是将要拟合的区间数据重复三次,使多项式拟合长区间,并仅将中间区间的拟合数据用作“更好”的拟合数据。但可以肯定的是,如果您知道所考虑的效果是周期性的,那么使用周期性作为“基函数”是最好的方法。系数数量有限的多项式无法拟合周期性信号。正如 Aksakal 已经说过的