高斯过程回归(Gaussian Process Regression)

在概率论和统计学中,高斯过程是指观测发生在连续域(例如:时域、空间域)中的一种特殊的概率模型

高斯过程回归(Gaussian Process Regression)_第1张图片

1 基本概念

在高斯过程,连续的输入空间的任何点与正态分布的随机变量相关,而且任何随机变量的有限集合满足多重正态分布,例如变量间的任意线性组合是正态分布,高斯过程分布是所有随机变量在连续域中的联合分布
在机器学习理论中,针对于推广训练数据(generalize train data)的算法,如果学习方法在对系统发出请求之前进行,称为急切学习(eager learning),如果学习方法滞后于对系统的请求,称为懒惰学习(lazing learning),K近邻算法就是典型的懒惰学习方法
懒惰学习方法一般模型可移植性强,适用于不同的问题域,但要求较大空间来实时保存训练数据集,因为缺少对数据集合的抽象而使得预测过程计算量大。懒惰分类器适用于数据集的特征较少的情况
因此,从机器学习算法的观点看,高斯过程采用懒惰学习的方式来度量样本间的相似度(核函数),从而基于训练数据预测位置观测输入的结果。预测结果往往是边缘分布(多个概率分布函数的累加)
函数空间视角(function-space view):高斯过程可以看作是基于多个函数定义分布,并在函数空间做推断分析

2 问题描述

对于给定数据集 D N = { x n , y n } n = 1 N D_N=\{\mathbf{x}_n,y_n\}_{n=1}^N DN={xn,yn}n=1N,其中 x n ∈ ℜ m \mathbf{x}_n\in \Re^m xnm,令 X = [ x 1 , . . . , x N ] T X=[\mathbf{x}_1,...,\mathbf{x}_N]^T X=[x1,...,xN]T作为观测输入数据矩阵,即输入空间; Y = [ y 1 , … , y N ] T Y=[y_1,\dots,y_N]^T Y=[y1,,yN]T作为观测输出向量,即输出空间。考虑非线性映射 ϕ ( x ) : x ∈ ℜ m → F \phi(\mathbf{x}):\mathbf{x}\in \Re^m \rightarrow F ϕ(x):xmF,这个映射可能是未知的也可能是无限维的。核函数 k ( x i , x j ) k(\mathbf{x}_i,\mathbf{x}_j) k(xi,xj)可以满足这个特性,核函数用内积形式来构建特征空间F为: k ( x i , x j ) = < ϕ ( x i ) , ϕ ( x j ) > k(\mathbf{x}_i,\mathbf{x}_j)=<\phi(\mathbf{x}_i),\phi(\mathbf{x}_j)> k(xi,xj)=<ϕ(xi),ϕ(xj)>典型的核函数包括径向基函数 k ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 / 2 ρ 2 ) k(\mathbf{x}_i,\mathbf{x}_j)=\exp(-\Vert\mathbf{x}_i-\mathbf{x}_j\Vert^2/2\rho^2) k(xi,xj)=exp(xixj2/2ρ2),其中 ρ > 0 \rho>0 ρ>0是宽度参数
定义高斯分布 N ( μ , Σ ) N(\mu,\Sigma) N(μ,Σ),其中 μ \mu μ是均值, Σ \Sigma Σ是协方差
在高斯回归过程模型(Gaussian process regression,GPR)中,每个样本 y n y_n yn可以表示为: y = f ( x ) + ε y=f(\mathbf{x})+\varepsilon y=f(x)+ε其中 f f f是零均值高斯过程 f ∼ N ( 0 , K X X ) \mathbf{f}\sim N(\mathbf{0},K_{XX}) fN(0,KXX) K X X = { k ( x i , x j ) } ∈ ℜ N × N K_{XX}=\{k(\mathbf{x}_i,\mathbf{x}_j)\}\in \Re^{N \times N} KXX={k(xi,xj)}N×N是核函数定义的特定协方差矩阵, ε ∼ N ( 0 , σ 2 ) \varepsilon \sim N(0,\sigma^2) εN(0,σ2)
定义 K X x = [ k ( x 1 , x ) , … , k ( x N , x ) ] T ∈ ℜ N \mathbf{K}_{X\mathbf{x}}=[k(\mathbf{x}_1,\mathbf{x}),\dots,k(\mathbf{x}_N,\mathbf{x})]^T\in \Re^N KXx=[k(x1,x),,k(xN,x)]TN
典型的高斯过程回归方法是为了对于任意测试数据 x ∗ ∈ X \mathbf{x}^*\in X xX估计预测分布 p ( y ∣ x ∗ ) p(y|\mathbf{x}^*) p(yx),基于高斯概率假设,可以得到条件分布: p ^ ( y ∣ x ∗ , X , Y ) ∼ N ( f ( x ∗ ) , g ( x ∗ ) ) \hat{p}(y|\mathbf{x}^*,X,Y)\sim N(f(\mathbf{x}^*),g(\mathbf{x}^*)) p^(yx,X,Y)N(f(x),g(x))这里, f ( x ∗ ) = K X x ∗ T ( K X X + σ 2 I ) − 1 Y f(\mathbf{x}^*)=\mathbf{K}_{X\mathbf{x}^*}^T(K_{XX}+\sigma^2\mathbf{I})^{-1} Y f(x)=KXxT(KXX+σ2I)1Y g ( x ∗ ) = σ 2 + k ( x ∗ , x ∗ ) − k X x ∗ T ( K X X + σ 2 I ) − 1 k X x ∗ g(\mathbf{x}^*)=\sigma^2+k(\mathbf{x}^*,\mathbf{x}^*)-\mathbf{k}_{X\mathbf{x}^*}^T(K_{XX}+\sigma^2\mathbf{I})^{-1}\mathbf{k}_{X\mathbf{x}^*} g(x)=σ2+k(x,x)kXxT(KXX+σ2I)1kXx其中 I \mathbf{I} I是相应规模的单位矩阵
特别地,令 a = [ a 1 , … , a N ] T = ( K X X + σ 2 I ) − 1 Y \mathbf{a}=[a_1,\dots,a_N]^T=(K_{XX}+\sigma^2\mathbf{I})^{-1} Y a=[a1,,aN]T=(KXX+σ2I)1Y。因此 f ( x ∗ ) = a T k X x ∗ = ∑ i = 1 N a i k ( x i , x ∗ ) f(\mathbf{x}^*)=\mathbf{a}^T\mathbf{k}_{X\mathbf{x}^*}=\sum_{i=1}^N a_ik(\mathbf{x}_i,\mathbf{x}^*) f(x)=aTkXx=i=1Naik(xi,x)
由此可见,高斯过程可以用一系列的基函数组合来表示

3 高斯过程模型估计

在高斯模型估计中,噪声方差往往视为一个参数,并于核函数在在一起,即 σ \sigma σ
常用的模型参数估计方法是边际概率 p ( Y ∣ X ) p(Y|X) p(YX),可以通过条件概率和先验的乘积积分来表示,即为 p ( Y ∣ X ) = ∫ p ( Y ∣ f , X ) p ( f ∣ X ) d f p(Y|X)=\int p(Y|\mathbf{f},X)p(\mathbf{f}|X)d\mathbf{f} p(YX)=p(Yf,X)p(fX)df边际概率取对数有: J M L = log ⁡ p ( Y ∣ X ) = − 1 2 Y T ( K X X + σ 2 I ) − 1 Y − 1 2 log ⁡ det ⁡ ( K X X + σ 2 I ) − N 2 log ⁡ ( 2 π ) J^{ML}=\log p(Y|X)=-\frac{1}{2}Y^T(\mathbf{K}_{XX}+\sigma^2\mathbf{I})^{-1}Y-\frac{1}{2}\log \det(\mathbf{K}_{XX}+\sigma^2\mathbf{I})-\frac{N}{2}\log(2\pi) JML=logp(YX)=21YT(KXX+σ2I)1Y21logdet(KXX+σ2I)2Nlog(2π)
或者,考虑输出概率密度函数和高斯过程回归估计之间的Kullbak-Leibler(K-L)散度作为代价函数,即有 K L = ∫ p ( y ) log ⁡ p ( y ) p ^ ( y ∣ X , Y ) d y = ∫ p ( y ) log ⁡ p ( y ) d y − ∫ log ⁡ p ^ ( y ∣ X , Y ) p ( y ) d y KL=\int p(y)\log\frac{p(y)}{\hat{p}(y|X,Y)}dy=\int p(y)\log p(y)dy-\int\log\hat{p}(y|X,Y)p(y)dy KL=p(y)logp^(yX,Y)p(y)dy=p(y)logp(y)dylogp^(yX,Y)p(y)dy其中上式第二项 R = ∫ log ⁡ p ^ ( y ∣ X , Y ) p ( y ) d y ≈ E ( log ⁡ p ^ ( y ∣ X , Y ) ) 求 最 大 值 R=\int\log\hat{p}(y|X,Y)p(y)dy\approx E(\log\hat{p}(y|X,Y))求最大值 R=logp^(yX,Y)p(y)dyE(logp^(yX,Y)).
由于 p ^ ( y ∣ X , Y ) = ∫ p ^ ( y ∣ x , X , Y ) p ( x ) d ( x ) = E ( p ^ ( y ∣ x , X , Y ) ) ≈ 1 N ∑ j = 1 N 1 2 π g ( x j ) exp ⁡ ( − ( y − f ( x j ) ) 2 2 g ( x j ) ) \hat{p}(y|X,Y)=\int \hat{p}(y|\mathbf{x},X,Y)p(\mathbf{x})d(\mathbf{x})=E(\hat{p}(y|\mathbf{x},X,Y))\approx \frac{1}{N}\sum_{j=1}^N \frac{1}{\sqrt{2\pi g(\mathbf{x}_j)}}\exp \left(-\frac{(y-f(\mathbf{x}_j))^2}{2g(\mathbf{x}_j)}\right) p^(yX,Y)=p^(yx,X,Y)p(x)d(x)=E(p^(yx,X,Y))N1j=1N2πg(xj) 1exp(2g(xj)(yf(xj))2)因此,将上式带入 R R R,并引入 p ( x ) p(\mathbf{x}) p(x)的真实密度,可以得到 R ≈ J K L = 1 N ∑ i = 1 N log ⁡ ( 1 N ∑ j = 1 N 1 2 π g ( x j ) exp ⁡ ( − ( y − f ( x j ) ) 2 2 g ( x j ) ) ) = 1 N ∑ i = 1 N log ⁡ ( 1 N ∑ j = 1 N p i , j ) R\approx J^{KL}=\frac{1}{N}\sum_{i=1}^N\log\left(\frac{1}{N}\sum_{j=1}^N \frac{1}{\sqrt{2\pi g(\mathbf{x}_j)}}\exp \left(-\frac{(y-f(\mathbf{x}_j))^2}{2g(\mathbf{x}_j)}\right)\right)=\frac{1}{N}\sum_{i=1}^N\log\left(\frac{1}{N}\sum_{j=1}^Np_{i,j}\right) RJKL=N1i=1Nlog(N1j=1N2πg(xj) 1exp(2g(xj)(yf(xj))2))=N1i=1Nlog(N1j=1Npi,j)其中 p i , j = 1 2 π g j exp ⁡ ( − e i , j 2 2 g j ) p_{i,j}=\frac{1}{\sqrt{2\pi g_j}}\exp\left(-\frac{e_{i,j}^2}{2g_j}\right) pi,j=2πgj 1exp(2gjei,j2),这里 e i , j = y i − f j e_{i,j}=y_i-f_j ei,j=yifj f i f_i fi g j g_j gj分别定义 f ( x i ) f(\mathbf{x}_i) f(xi) g ( x j ) g(\mathbf{x}_j) g(xj)
由于真实密度 p ( y ) p(y) p(y) p ( x ) p(\mathbf{x}) p(x)并不知道,但不同级别的概率函数可以调整至结晶误差的 N − 1 / 2 N^{-1/2} N1/2阶,所以可以用估计器插值法近似KL散度
高斯过程参数估计不管是通过 J K L J^{KL} JKL还是 J M L J^{ML} JML,都是非线性优化任务,需要对 ( K X X + σ 2 I ) − 1 (K_{XX}+\sigma^2\mathbf{I})^{-1} (KXX+σ2I)1进行迭代,每步计算复杂度是 O ( N 3 ) O(N^3) O(N3)

4 带噪声的离散观测值估计实例

根据上面内容,已知有先验分布 y ∼ N ( 0 , K X X + σ 2 I ) y\sim N(0,K_{XX}+\sigma^2\mathbf{I}) yN(0,KXX+σ2I),对于任意测试数据 y ∗ y^* y有:
[ y y ∗ ] ∼ [ K X X + σ 2 I K X x K X x T K x x ] \left[ \begin{array}{l} y\\ y^* \end{array} \right] \sim \left[ \begin{array}{l} \mathbf{K}_{XX}+\sigma^2\mathbf{I}&\mathbf{K}_{X\mathbf{x}}\\ \mathbf{K}_{X\mathbf{x}}^T&\mathbf{K}_{\mathbf{x}\mathbf{x}} \end{array} \right] [yy][KXX+σ2IKXxTKXxKxx]
其中, K x x \mathbf{K}_{\mathbf{x}\mathbf{x}} Kxx恒等于1

附 matlab写的高斯滤波器

real1 = TestingData_output;
out1 = testingoutput';
N = length(out);
in = zeros(N,1);
in(:,1) = 1:N;
out = (out1 - mean(out1))/std(out1);
real = (real1 - mean(real1))/std(real1);
sigma_square = 0.5;
rho_opt = 100;

N = length(in);
K =zeros(N,N);
for i = 1:N
    for j =1:N
        K(i,j)=exp(-((in(i,1)-in(j,1))^2)/(2*rho_opt^2));
    end
end
Num = N;
cnt = 0;
K_new = zeros(N,1);
ret = zeros(Num,1);
temp = inv(K+sigma_square*eye(N,N))*out;
for i = 1:Num
    x =in(i,1);   
    for k = 1:N
        K_new(k,1)=exp(-((x-in(k,1))^2)/(2*rho_opt^2));
    end
    cnt =cnt + 1;
    ret(cnt,1) = K_new' * temp;
end
ret =  ret * std(out1) + mean(out1);
plot(ret);hold on 
plot(real1); hold on 
plot(out1);
%%%%
legend('ret','TestingData_output','testingoutput');

你可能感兴趣的:(机器学习,数据分析,算法)