离散数据插值预测

一 前言

数据插值在很多地方都会有所应用。很多时候,我们需要根据已知点(姑且称为点吧)去插值(预测)出我们想要点对应的数据值。有时一个点可能只有1个变量(一维插值问题),有时可能有多个变量(多维插值问题)。这时如何去比较真实的预测出对应的值,这就是问题所在。

 

二 求解

1、提到插值,我们首先想到的是数值分析书上介绍的一些内容,几乎你在每一本数值分析书上都能找到关于插值的介绍。上面主要针对的是一维插值,因为书里介绍得比较多,这里不再详叙!

2、这里我们需要解决的是多维问题的插值,而我们更多的了解却是基于一维的插值算法。因为一维问题比较简单,那么我们是否可以像多维非线性拟合等问题求解将多维问题转化为一维问题来进行求解呢。答案当然是肯定的。

3、一般地,我们认为两个点比较靠近时,它们所赋予的物理量(需要插值出的数据变量)的值比较接近,因为向量范数具有距离的概念且它可将多维变量转换成一维变量,因此我们可利用范数来降低求解维度。为了编写程序方便,可将多维变量根据范数定义类似采用如下算式
(1)$$r=(x_1^2+x_2^2+……)^v$$
算式中\(x_1,x_2,……\)为多维自变量,\(v\)为一种控制距离的参数,\(r\)即为转换成的一维自变量。

4、权重思想插值

假如我们现在已知点的数据为\(m\)个,我们如何根据这\(m\)个数据插值出指定点的数据呢。其中一个最简单的思想是权重思想。

想象一下,已知一个正方形四个顶点对应的值,那如果想求形心处的值,一般我们会将4个顶点值相加求和,最后将和除以4,其实对每个点来说,它的权重系数为\(\frac{1}{4}\),求形心点的值时是每个点的值乘以对应权重系数,最后求和所得。

而如何构造每个点对应的权重系数则成了一个关键点。因为第3点已经求得每个点距离插值点的距离\(r\),而我们认为两个点比较靠近时,它们所赋予的物理量(需要插值出的数据变量)的值比较接近,即相近的点影响较大。这时很自然可按照如下算式来定义其权重
(2)$$ K(r)=\frac{1}{r}$$

可以使用公式(2)来构造一个权重系数产生函数。当然我们可以认为距离\(r\)越近影响越大,且在靠近一定程度影响比较大,远离一段距离后会很快衰减,则可考虑如下类似的算式(3)(注意,你也可以按其它方式进行构造)
(3)$$K(r)=\frac{exp(-ar)}{R}$$

\(a\)为控制系数,\(r\)是相对距离,\(R\)是实际距离。
则最后每个点的权重系数可按如下算式(4)求得
(4)$$k_i=\frac{K(r_i)}{∑K(r_j)},(j=1,2,……,m)$$

如果每个点对应的值为\(f\),则最后可得到预测点的\(f\)值为算式(5)
(5)$$f=k_1f_1+k_2f_2+……+k_mf_m$$

5、径向基函数插值
这种插值算法插值出的效果比较厉害,个人理解其就好比在一个\(n\)(插值的自变量个数为\(n\))维空间里织了一个很大的网,然后在这个网里来插值出最佳值。简单理解,它就是假设函数值为算式(6)
(6)
$$f(x)=c_1K(r_1)+c_2K(r_2)+……+c_1K(r_m)$$

算式中\(r_i\)表示\(x-x_i\)通过公式(1)获得,\(c_i\)表示求解的系数。

因为它有\(m\)个未知数\(c\)需要求解,但是在这个函数里,它必须满足每个点的值,即可将已知的\(m\)个点带进去进而求解得到每个系数\(c\),最后将求解点\(x\)带进去求解即可。

对于(6)算式当中的函数\(K\)一般有一定要求,具体可参看相关文献,这里对于紧支型的函数\(K\),对于\(r \leqslant 1\)有
文献[1] 

(7)$$
\begin{align*}
K(r)&=1-r 
\\
K(r)&=(1-r)^3(3r+1) 
\\
K(r)&=(1-r)^5(8r^2+5r+1) 
\\
K(r)&=(1-r)^2 
\\
K(r)&=(1-r)^4(4r+1) 
\\
K(r)&=(1-r)^6(35r^2+18r+3) 
\\
K(r)&=(1-r)^8(32r^3+25r^2+8r+1) 
\\
K(r)&=(1-r)^3 
\\
K(r)&=(1-r)^5(5r+1) 
\\
K(r)&=(1-r)^7(16r^2+7r+1)
\end{align*} 
$$
文献[2] 

(8)$$
\begin{align*}
K(r)&=(1-r)^2(2+r) 
\\
K(r)&=(1-r)^3(1+3r+r^2) 
\\
K(r)&=(1-r)^3(8+9r+3r^2) 
\\
K(r)&=(1-r)^4(4+16r+12r^2+3r^3) 
\\
K(r)&=(1-r)^5(1+5r+9r^2+5r^3+r^4) 
\\
K(r)&=(1-r)^4(16+29r+20r^2+5r^3) 
\\
K(r)&=(1-r)^5(8+40r+48r^2+25r^3+5r^4) 
\\
K(r)&=(1-r)^6(6+36r+82r^2+72r^3+30r^4+5r^5) 
\\
K(r)&=(1-r)^7(5+35r+101r^2+147r^3+101r^4+35r^5+5r^6)
\end{align*}
$$

6、其它细节问题

6.1、插值点的确定

考虑到一些实际问题,很多时候我们往往只需要进行局部插值即可。即我们需要确定哪些点作为已知点来进行插值。文献当中往往以插值点为圆心,一个半径\(R\)来确定出作为插值的已知点。如果数据分布很散乱且在我们不知道如何确定\(R\)的情况下(即我们不知道数据空间分布规律),选出一个合适的\(R\)有一定困难。这时建议可以一个数据量\(N\)来划定局部区域范围,即每次插值时只选择距离插值点最近的\(N\)个点进行插值即可。

6.2、半径\(r\)规范化

由于不同的数据处理,按(1)式计算出的每个距离大小无法确定。为了便于统一,可将所有距离\(r\)进行规范化。如算式(9)。这时的\(r\)可直接带进公式(2)、(3)以及公式(7)、(8)的紧支函数\(K\)里。

(9)$$r_i=\frac{r_i}{r_0}$$
\(r_0\)为所有半径当中的最大值.

当然,我在编写径向紧支函数求解问题时,我并不是直接采用公式(9),而是采用公式(10)
(10)$$r_i=\frac{r_i}{br_0}$$

\(r_0\)为动态距离(不一定是最大值),\(b\)为一个控制参数一般取16,公式当中的\(r_i\)均不会大于1,否则重新选取一个合适的\(r_0\)。

6.3、数据再插值的后处理

对于一些插值结果,可以进行简单的在加工。比如,在进行二维正方形网格插值时,现在已经插值出了各个网格节点值,则可再根据网格节点值插值出各个正方形网格型心对应的值,然后再根据各个网格型心的值再对各个节点进行简单插值,得到平滑效果。

参考文献
[1] Wendland H.Piecewise polynomial,positive definite and compactly supported radial functions of minimal degree[J]. Advances in computational Mathematics,1995,4(1):389-396.  

[2] Wu Z. Compactly supported positive definite radial functions[J]. Advances in Computational Mathematics, 1995, 4(1): 283-292.