怎么用matlab实现kriging插值算法

怎么用matlab实现kriging插值算法,第1张

第一步:% 已知某天海面2:00,8:00,14:00,20:00的

% 温度分别为 221.0645, 233.7419,250.7742,229.6129 ,(间隔为6小时)

% (1)采用线性内插、多项式内插和样条内插方法插值到一局坦小时间隔,并比较不同;

% (2)桐粗桐对上述一小时内插结果进行调和分析;

% (3)对上述海表温度一小时内插结果进行Fourier分析。

clcclear allclose all

t0 = [2 8 14 20]

t1 = min(t0) : 1 : max(t0)

v0 = [221.0645 233.7419 250.7742 229.6129]

p1 = polyfit(t0, v0, 1)% 线性

v11 = polyval(p1, t1)

p2 = polyfit(t0, v0, 3)% 3次多项式

v12 = polyval(p2, t1)

v13 = spline(t0, v0, t1)'样条'

figurehold onbox on

plot(t0, v0, 'k*')

plot(t1, v11, 'r-')

plot(t1, v12, 'g-')

plot(t1, v13, 'b-')

legend('节点', '线性', '3次多项式'凳毁, '样条')

形顷族袭式穗枝是这样的:

[vp,

ep]=krig3d(xp,yp,zp,xn,yn,zn,var,model_para,hmsg)

performs

3-d

kriging

%

xn,

yn,

zn

-

coordinates

of

the

input

data

代表输入的雀兄变量

xn,

yn,

zn

是输入数据的空间坐标

xp,

yp,

zp

是输出kriging点的坐标

在工程界我们常常会遇到这样一些问题,希望通过建立输入参数-输出参数之间的映射关系,使得给定新的输入来得到新的输出,即预测值。根据输出值的类型为连续型和离散型可以分为回归问题和分类问题,处理回归问题的一种重要方法是高斯过程回归(Gaussian Process Regression),kriging代理模型是高斯过程回归方法的一种应用。回归问题可以有如下数学描述:

假设有训练集$ D= {(\boldsymbol{x}_i,y_i)|i = 1,2,\cdots,n} = (\boldsymbol{X},\boldsymbol{y}). $其中:$\boldsymbol{x}_i \in R^d$为d维输入矢量,$\boldsymbol{X} = [\boldsymbol{x}_1, \boldsymbol{x} 2, \cdots, \boldsymbol{x} n]$ 为$d\times n$维矩阵,$y_i \in R$为相睁模应的输出标量,$\boldsymbol{y}$为输出矢量。回归的任务是希望通过训练学习建立输入$\boldsymbol{X}$与输出$\boldsymbol{y}$之间的之间的映射关系$(f(\cdot) : R^d \mapsto R)$,预测出新测试点$\boldsymbol{x} *$对应的最有可能的输出值 $y*.$

高斯过程是任意有限个随机变量具有联合高斯分布的集合,其性质完全由均值函数$m(\boldsymbol{x})$和协方差函数$K(\boldsymbol{x},\boldsymbol{x'})$决定,定义如下:

$$

m(\boldsymbol{x}) = E[f(\boldsymbol{x})] \

K(\boldsymbol{x},\boldsymbol{x'}) = E[(f(\boldsymbol{x}) - m(\boldsymbol{x})(f(\boldsymbol{x'}) - m(\boldsymbol{x'})]

$$

接下来我们简要推导一下kriging模型的实现方法,以对该方法春颂有一些感性的理解。kriging模型为:

$$

Z(s) = \mu + \epsilon(s)

$$

其中,等式左侧为观测值,等式右侧分别为平均值和误差,在某一空间维度中表示如下 1 :

上面这种模型被称为普通kriging模型,因扒早郑为我们在公式中引入了常数平均值。在很多情况下,平均值函数还可以表示为一次函数、二次函数等不同种类,但是简单起见我们这里只讨论平均值为常数的情况,下文中的kriging模型均指普通kriging模型。

接下来我们推导一下kriging模型的具体表达形式。假设我们已知一系列观测点${(\boldsymbol{x}_i,y_i)|i = 1,2,\cdots,n} $,同时我们对这些观测点的取值具有一定的不确定度。为了度量这些不确定度,我们假设单个观测点的分布服从高斯分布,即$y\sim N(\mu,\sigma^2)$,即我们假设这些观测值有很大概率落在区间$[\mu-3\sigma,\mu+3\sigma]$内。现在考虑这些观测点的协方差函数为$K(X,X)$,这是一个$n\times n$的矩阵。这样我们可以得到这$n$个观测点的联合高斯分布为:

$$

\boldsymbol{y} \sim N(\mu, K(X,X))

$$

现在我们考虑协方差函数$K(X,X)$的具体表达形式。由统计知识,

$$

K(X,X) = \sigma^2\boldsymbol{R}

$$

$\boldsymbol{R}$为$n\times n $的相关系数矩阵,里面的元素为不同观测点之间的相关系数,接下来我们求相关系数矩阵的具体表达形式。现在考虑两个观测点$\boldsymbol{x}_i$和$\boldsymbol{x} j$,如果我们的预测函数是连续的,那么当这两个观测点之间的距离$||\boldsymbol{x} i-\boldsymbol{x} j||$之间的距离很小,这两个观测点的观测值$y(\boldsymbol{x_i})$和$y(\boldsymbol{x_j})$也会很接近,即这两个观测值对应的随机变量之间高度相关。特别的,我们可以用高斯形式的相关系数方程来描述这样的关系:

$$

Corr[y(\boldsymbol{x_i}),y(\boldsymbol{x_j})] = \text{exp}\bigg(-\sum {l=1}^d \theta_l|\boldsymbol{x}{il}-\boldsymbol{x}{jl}|^{{pl}}\bigg)

$$

其中,$d$为观测点$\boldsymbol{x}$的维数。如果两个观测点之间的距离很近,那么它们的相关系数就会趋近于1,反之则趋近于0.两个参数$\theta_l$和$p_l$比较关键,其中$\theta_l$可以理解为相关系数对第$l$个维度的坐标距离的敏感程度,$\theta_l$越大,相关系数就对该维度的距离越敏感,下降得也越快,反之则下降得越慢。$p_l$可以衡量预测函数的光滑程度,$p_l$越接近$2$,预测函数就越光滑,可以处理一些梯度问题,如果越接近$1$,预测函数就越粗糙,不利于处理梯度问题。

经过以上分析,我们可以通过$\mu,\sigma^2,\theta_l,p_l(l=1,2,\cdots,d)$这几个参数确定这些观测点的联合高斯分布。所以现在需要求解这些参数来进行之后的预测工作,我们的思路是通过求解最大似然函数来求解参数值。当我们已知这些观测点的观测值时,意味着我们可以求出他们的似然函数表示如下:

$$

\frac{1}{(2\pi) {n/2}(\sigma 2) {n/2}|\boldsymbol{R}| {1/2}}\text{exp}\bigg[\frac{-(y-\boldsymbol{1}\mu)'\boldsymbol{R} {-1}(y-\boldsymbol{1}\mu)}{2\sigma 2}\bigg]

$$

通过选取这些参数使得似然函数最大化意味着我们得到的这些观测点和我们的预测模型符合得最好。接下来我们需要对上式取对数,然后分别对$\mu$和$\sigma^2$进行求导,可以得到这两个参数的最佳观测值,它们都是关于相关系数矩阵$\boldsymbol{R}$的函数:

$$

-\frac{n}{2}\text{log}(\widehat{\sigma} 2)-\frac{1}{2}\text{log}(|\boldsymbol{R}|)-\frac{(\boldsymbol{y-1}\mu)'\boldsymbol{R} {-1}(\boldsymbol{y-1}\mu)}{2\sigma^2}\

\widehat{\mu} = \frac{\boldsymbol{1'R {-1}y}}{\boldsymbol{1'R {-1}1}}\

\widehat{\sigma}^2 = \frac{(\boldsymbol{y-1}\widehat{\mu})'\boldsymbol{R}^{-1}(\boldsymbol{y-1}\widehat{\mu})}{n}

$$

将这两个参数代入$\text{log}$形式的似然函数,得到所谓“concentrated log-likelihood function",忽略常数项得到后得到:

$$

-\frac{n}{2}\text{log}(\widehat{\sigma}^2)-\frac{1}{2}\text{log}(|\boldsymbol{R}|)

$$

该方程仅依赖与相关系数矩阵$\boldsymbol{R}$,而相关系数矩阵依赖于参数$\theta_l$和$p_l$。这样,我们的求解思路就很明确了。首先通过最优化方法寻找使concentrated log-likelihood function 最大化的参数$\theta_l$和$p_l$,可以使用遗传算法或粒子群算法等随机类优化算法避免陷入局部最优。然后,代入求解参数$\mu$和$\sigma 2$的估计值$\widehat{\mu}$和$\widehat{\sigma} 2$。

到此为止我们可以得到我们想要的这些参数,接下来我们分析一下预测函数的实现方式。简单来说,假设我们现在有一个新的测量点$\boldsymbol{x} *$,$y $是该测量点的预测值,那么根据这$(n+1)$个测量点我们就得到了一个新的似然方程,我们的目标就是要寻找$y^ $,使得新的似然方程最大化。求得的$y^*$也就是我们希望得到的kriging预测点。

假设$\widetilde{\boldsymbol{y}}=(\boldsymbol{y}'\quad y *)$为加入新预测值$y $的增广预测值向量,$\boldsymbol{r}$代表新预测值与已知预测值的相关系数向量。这样我们得到新的$(n+1)\times(n+1)$增广协方差矩阵$\widetilde{R}$:

$$

\widetilde{R} = \left( \begin{array}{cc}

\boldsymbol{R}&\boldsymbol{r}\

\boldsymbol{r}'&1\

\end{array}

\right)

$$

回忆之前得到的$\text{log}$形式的似然函数,如果用增广协方差矩阵代替原来的协方差矩阵,那么该似然函数依赖于$y^ $的部分为:

$$

-\frac{(\widetilde{\boldsymbol{y}}-\boldsymbol{1}\widehat{\mu})'\widetilde{\boldsymbol{R}} {-1}(\widetilde{\boldsymbol{y}}-\boldsymbol{1}\widehat{\mu})}{2\widehat{\sigma} 2}

$$

这一部分主要难点是如何求解增广协方差矩阵的逆矩阵$\widetilde{\boldsymbol{R}} {-1}$,幸运的是已经有人帮我们求好了这一部分,由于形式较复杂,这里就不展出了。由于我们希望求解$y $,使得增广似然方程中依赖于$y^ $的部分最大化,所以我们将上式具体展开,并对$y^ $求导,令导数等于零,得到如下方程:

$$

\bigg \frac{-1}{\widehat{\sigma} 2(1-\boldsymbol{r}'\boldsymbol{R} {-1}\boldsymbol{r})}\bigg +\bigg[\frac{\boldsymbol{r'\boldsymbol{R} {-1}}(\boldsymbol{y-1}\widehat{\mu})}{\widehat{\sigma} 2(1-\boldsymbol{r}'\boldsymbol{R}^{-1}\boldsymbol{r})}\bigg]=0

$$

由上式可以求得kriging预测值$\widehat{y}(\boldsymbol{x^ })$:

$$

\widehat{y}(\boldsymbol{x *})=\widehat{\mu}+r'\boldsymbol{R} {-1}(\boldsymbol{y-1}\widehat{\mu})

$$

进一步地,我们可以求出在测量点$\boldsymbol{x}^ $处的误差为:

$$

s 2(\boldsymbol{x} ) = \widehat{\sigma} 2\bigg[1-\boldsymbol{r}'\boldsymbol{R} {-1}\boldsymbol{r} + \frac{(1-\boldsymbol{r}'\boldsymbol{R} {-1}\boldsymbol{r}) 2}{\boldsymbol{1}'\boldsymbol{R}^{-1}\boldsymbol{1}}\bigg]

$$

该误差方程等号右端最右侧一项可以理解为对$\mu$预测的不确定性引起的预测值的不确定性。值得注意的是,在已知测量点上,该误差为零,这一结论可以根据误差函数严格证明,这里我们就不再详述。

在我们进行数据输入时,为了消除单位变动对距离的影响,我们常常将输入数据先进行归一化,然后在计算结束的时候再复原数据。

之前已经在序言里阐述过,多精度代理模型的主要思想是希望能够用计算量较低的低精度数据代替大部分需要消耗大量计算资源的高精度数据,并达到和高精度代理模型接近的计算精度,从而减少高精度数据的计算量。假设我们有两套数据,分别是在观测点$\boldsymbol{X_e}$的高精度观测值$\boldsymbol{y}_e$和在观测点$\boldsymbol{X}_c$的低精度观测值$\boldsymbol{y}_c$,这里最好满足$(\boldsymbol{X}_e\subset\boldsymbol{X}_c)$.我们将这些观测点组合起来得到联合观测点:

$$

\boldsymbol{X} = \left(\begin{array}{c}

\boldsymbol{X}_c\

\boldsymbol{X}_e\

\end{array}\right)

=(\boldsymbol{x}_c 1,\cdots,\boldsymbol{x}_c {n_c},\boldsymbol{x}_e 1,\cdots,\boldsymbol{x}_e {n_e})^T

$$

在kriging模型中,在观测点$\boldsymbol{X}$处的预测值是一个高斯随机变量,因此这里我们有联合预测值

$$

\boldsymbol{Y} = \left(\begin{array}{c}

\boldsymbol{Y}_c(\boldsymbol{X}_c)\

\boldsymbol{Y}_e(\boldsymbol{X}_e)\

\end{array}\right)

=(Y_c(\boldsymbol{x}_c 1),\cdots,Y_c(\boldsymbol{x}_c {n_c}),Y_c(\boldsymbol{x}_e 1),\cdots,Y_c(\boldsymbol{x}_e {n_e}))^T

$$

这里我们假设在观测点$\boldsymbol{x}_i$处的预测值具有Markov性质,即$cov{Y_e(\boldsymbol{x} i),Y_c(\boldsymbol{x})|Y_c(\boldsymbol{x} i)}=0,\forall\boldsymbol{x}\ne\boldsymbol{x}^i$ [1] ,这个性质在我们求解cokriging的协方差矩阵时有很大帮助。高斯过程$Z_c(\cdot)$和$Z_e(\cdot)$代表低精度和高精度kriging模型的当地特征,它们之间的关系表示如下:

$$

Z_e(\boldsymbol{x}) = \rho Z_c(\boldsymbol{x}) + Z_d(\boldsymbol{x}).

$$

其中,$\rho$是一个标量,$Z_d(\boldsymbol{x})$代表高斯过程$Z_e(\boldsymbol{x})$和$\rho Z_c(\boldsymbol{x})$之间的差别。这样,我们就可以求出cokriging模型的协方差矩阵$cov{Y(\boldsymbol{x}),Y(\boldsymbol{x})} $:

$$

\begin{array}{l}

cov{\boldsymbol{Y}_c(\boldsymbol{X}_c),\boldsymbol{Y}_c(\boldsymbol{X}_c)} &=

cov{Z_c(\boldsymbol{X}_c),Z_c(\boldsymbol{X}_c)}\

&= \sigma_c^2\boldsymbol{R}_c(\boldsymbol{X}_c,\boldsymbol{X}_c)\

cov{\boldsymbol{Y}_e(\boldsymbol{X}_e),\boldsymbol{Y}_c(\boldsymbol{X}_c)} &=

cov{\rho Z_c(\boldsymbol{X}_e) + Z_d(\boldsymbol{X}_e),Z_c(\boldsymbol{X}_c)}\

&=\rho \sigma_c^2\boldsymbol{R}_c(\boldsymbol{X}_e,\boldsymbol{X}_c)\

cov{\boldsymbol{Y}_e(\boldsymbol{X}_e),\boldsymbol{Y}_e(\boldsymbol{X}_e)} &=

cov{\rho Z_c(\boldsymbol{X}_e) + Z_d(\boldsymbol{X}_e),\rho Z_c(\boldsymbol{X}_e) + Z_d(\boldsymbol{X}_e)}\

&= \rho 2\sigma_c 2\boldsymbol{R}_c(\boldsymbol{X}_e,\boldsymbol{X}_e) + \sigma_d^2\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e)

\end{array}

$$

这样,我们就可以得到更为复杂的协方差矩阵:

$$

\boldsymbol{C} = \left(\begin{array}{cc}

\sigma_c^2\boldsymbol{R}_c(\boldsymbol{X}_c,\boldsymbol{X}_c) &

\rho \sigma_c^2\boldsymbol{R}_c(\boldsymbol{X}_c,\boldsymbol{X}_e)\

\rho \sigma_c^2\boldsymbol{R}_c(\boldsymbol{X}_e,\boldsymbol{X}_c)&

\rho 2\sigma_c 2\boldsymbol{R}_c(\boldsymbol{X}_e,\boldsymbol{X}_e) + \sigma_d^2\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e)\

\end{array}\right)

$$

从协方差矩阵的构成元素中,我们可以清楚地看到这里我们需要求解更多的超参数,分别是:$\boldsymbol{\theta}_c,\boldsymbol{\theta}_d,\boldsymbol{p}_c,\boldsymbol{p}_d$和标量$\rho$。由上一章节的kriging模型,我们可以根据低精度数据求出$\boldsymbol{\theta}_c$和$\boldsymbol{p}_c$,接下来我们求解剩下的参数。首先我们由高斯过程$Z_c(\cdot)$和$Z_e(\cdot)$之间的关系,定义一个新的参数:

$$

\boldsymbol{d} = \boldsymbol{y}_e - \rho\boldsymbol{y}_c(\boldsymbol{X}_e)

$$

其中$\boldsymbol{y}_c(\boldsymbol{X}_e)$在观测点$\boldsymbol{x}_e$处的低精度观测值,一般情况下我们选择的高精度观测点是低精度观测点的子集,所以能够直接得到该值。如果某些高精度观测点不属于低精度观测点集,那么我们用构造的低精度kriging模型预测值来求出$\boldsymbol{y}_c(\boldsymbol{X}_e)$。为了求出$\boldsymbol{\theta}_d,\boldsymbol{p}_d,\rho$,我们构造出参数$\boldsymbol{d}$的$\text{log}$形式的似然函数:

$$

-\frac{n_e}{2}\text{log}(\widehat{\sigma}_d 2)-\frac{1}{2}\text{log}(|\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e)|)-\frac{(\boldsymbol{d-1}\mu_d)'\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e) {-1}(\boldsymbol{d-1}\mu_d)}{2\sigma_d^2}

$$

类似地,通过求解最大似然函数,分别对$\mu_d$和$\sigma^2_d$进行求导,可以求出:

$$

\begin{array}{l}

\widehat{\mu}_d &= \frac{\boldsymbol{1'\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e) {-1}d}}{\boldsymbol{1'\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e) {-1}1}}\

\widehat{\sigma}^2_d &= \frac{(\boldsymbol{d-1}\widehat{\mu}_d)'\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e)^{-1}(\boldsymbol{d-1}\widehat{\mu}_d)}{n_e}

\end{array}

$$

将上式代入似然函数,可以得到新的似然函数:

$$

-\frac{n_e}{2}\text{log}(\widehat{\sigma}_d^2)-\frac{1}{2}\text{log}(|\text{det}(\boldsymbol{R}_d(\boldsymbol{X}_e,\boldsymbol{X}_e))|)

$$

通过最大化求解上面的似然函数,就可以得到我们需要的参数$\boldsymbol{\theta}_d,\boldsymbol{p}_d,\rho$,同样我们可以使用遗传算法或者粒子群算法等随机类算法来进行求解,这样可以避免陷入局部最优点。当然如果观测点的数量和维度很大,为了减少计算量我们也可以假设参数$\boldsymbol{\theta}_c,\boldsymbol{\theta}_d$均为标量,但是这样可能会降低模型的精确度。

求出超参数之后,我们可以给出cokriging模型的预测方程:

$$

\widehat{y}_e(\boldsymbol{x}^{n_e+1}) = \widehat{\mu} + \boldsymbol{c} T\boldsymbol{C} {-1}(\boldsymbol{y-1}\widehat{\mu})

$$

其中,

$$

\boldsymbol{c} = \left(\begin{array}{c}

\widehat{\rho}\widehat{\sigma}_c 2R_c(\boldsymbol{X}_c,\boldsymbol{x} {n+1})\

\widehat{\rho}\widehat{\sigma}_c 2R_c(\boldsymbol{X}_e,\boldsymbol{x} {n+1}) + \widehat{\sigma}_d 2R_d(\boldsymbol{X}_e,\boldsymbol{x} {n+1})

\end{array}\right)

$$

该向量是新的预测点和已知的低精度和高精度观测点的相关系数矩阵。平均值常数$ \widehat{\mu} = \frac{\boldsymbol{1'C {-1}y}}{\boldsymbol{1'C {-1}1}}$ 。

进一步地,我们还可以给出在预测点的误差估计:

$$

s^2(\boldsymbol{x}) = \widehat{\rho} 2\widehat{\sigma}_c 2 + \widehat{\sigma}_d^2 - \boldsymbol{c TC {-1}c}

$$

如果新的预测点$\boldsymbol{x}^{n_e+1}\in\boldsymbol{X}_e$,那么该点的误差估计为$0$,可以根据上式严格证明,这里我们就不再详述。

接下来,我们希望通过一个例子来阐述一下cokriging模型的具体实现效果。假设我们现在分别有高精度模型$f_e$和低精度模型$f_c$,表达式为:

$$

f_e(x) =(6x-2)^2\sin(12x-4),x\in[0,1]\

f_c(x) = 0.5(6x-2)^2\sin(12x-4)+10(x-0.5)+5,x\in[0,1]

$$

分别取低精度模型和高精度模型的观测点$\boldsymbol{X}_c = {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}$和$\boldsymbol{X}_e = {0.0,0.4,0.6,1.0}$,值得注意的是高精度模型的观测点包含低精度模型观测点的两个端点。利用这些观测点和观测值训练cokriging模型,然后取得剩余区间内的高精度预测值曲线,并与真实的函数曲线进行对比,考察cokriging模型的准确度。结果如下图所示:

图片中绿色的点为低精度观测值。可以看到,cokriging的预测曲线与真实函数曲线几乎重合,这说明我们的cokriging模型效果很好,仅仅用了四个高精度观测值就取得了很好的预测结果。

误差曲线如下图所示。可以看到误差在四个高精度观测点为零,最大方差在0.001左右。

这里也给出模型参数以供参考:

$$

\theta_c = 15.715,p_c =1 .9998\

\theta_d = 0.1,p_d = 1.99985,\rho=1.9836

$$


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8264462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存