- 英文版的原文
Introduction to Gaussian Processes - Part I - 中文翻译版的原文
图文详解高斯过程(一)——含代码
要点摘录(二维高斯函数)
1.为什么要用到高斯采样
- 高斯采样是一种非参数化方法,相对于一般的参数化方法,不但可以为黑箱建模还可以为不确定性建模。
2.使用高斯函数产生样值点
-
函数表达式
f ∼ N ( μ , Σ ) f \sim N(\bold{\mu},\bold{\Sigma}) f∼N(μ,Σ)
其中 μ = ( μ 1 , μ 2 , . . . , μ n ) \bold{\mu} = (\mu_1,\mu_2,...,\mu_n) μ=(μ1,μ2,...,μn) , Σ = [ σ 11 σ 12 ⋯ σ 1 n σ 21 σ 22 ⋯ σ 2 n ⋮ ⋮ ⋱ ⋮ σ n 1 σ n 2 ⋯ σ n n ] \bold{\Sigma}=\left[ \begin{matrix} \sigma_{11} & \sigma_{12} & \dotsb & \sigma_{1n}\\ \sigma_{21} & \sigma_{22} & \dotsb & \sigma_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ \sigma_{n1} & \sigma_{n2} & \dotsb & \sigma_{nn} \end{matrix} \right] Σ=⎣⎢⎢⎢⎡σ11σ21⋮σn1σ12σ22⋮σn2⋯⋯⋱⋯σ1nσ2n⋮σnn⎦⎥⎥⎥⎤ -
产生样值点 y = f ( x ) \bold{y} = f(\bold{x}) y=f(x) , x = [ x 1 , x 2 , . . . , x n ] T \bold{x} = [x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T 表示需要采样的点的位置, y = [ y 1 , y 2 , . . . , y n ] T \bold{y}=[y_1,y_2,...,y_n]^T y=[y1,y2,...,yn]T 表示采样得到的值。
-
参数说明:
number_dot
采样点数,sample_scale
采样区设定,number_sample
设定样本曲线数,sigma
设定 σ \sigma σ 的值。 -
主要代码:
sample_locate = np.linspace(sample_scale[0],sample_scale[1],number_dot)
选取采样点。sample = np.random.multivariate_normal(np.zeros(number_dot),np.eye(number_dot),number_sample)
完成采样。
-
采样结果:
- 采样点 3 个,样本曲线 6 条,采样区间 [0,1],均值为 0 ,协方差矩阵为单位阵。
- 采样点 30 个,样本曲线 6 条,采样区间 [0,1],均值为 0 ,协方差矩阵为单位阵。
3.增加高斯核函数的高斯采样
-
从上面可以看出来,采样的曲线变换十分不规则,可以说非常嘈杂。这是因为将协方差矩阵设置为单位阵(即任何两个 x 对应的抽样值 y 均没有关系)。而解决的方法就是将协方差矩阵和抽样点 x 之间的距离建立起关系,当 x 之间的距离越近就让 x 的值之间的相关性越大,这样就能保证曲线的变化相对平滑。
-
度量距离的方法(采用高斯核函数):
k ( x , x ′ ) = exp ( − ( x − x ′ ) 2 2 σ 2 ) k(x,x') = \exp(\displaystyle\frac{-(x-x')^2}{2\sigma^2}) k(x,x′)=exp(2σ2−(x−x′)2) -
主要代码
- 定义高斯核
# 定义高斯核函数,这里用到一个比较巧妙的地方在于用了 ndarray 的 broadcast 机制没有用循环来计算 # 在 train 的时候类似 tensor 的矩阵计算要快的多 def gauss_kernal(sample_scale,sigma): tempa = sample_scale.reshape(-1, 1) # 这里是为了升维,否则会导致转置之后还是向量形式 tempb = np.transpose(tempa) temp = tempa - tempb gauss = np.exp(- temp**2 / (2 * sigma**2)) return gauss
sample = np.random.multivariate_normal(np.zeros(number_dot),gauss_kernal(sample_locate, sigma ),number_sample)
完成采样。
-
采样结果
- 采样点 3 个,样本曲线 6 条,采样区间 [0,1],均值为 0 , σ = 0.3 \sigma=0.3 σ=0.3。
- 采样点 100 个,样本曲线 6 条,采样区间 [0,1],均值为 0 , σ = 0.1 \sigma=0.1 σ=0.1。