参考资料
1.7. Gaussian Processes
Sklearn官方文档中文整理5——高斯过程篇
sklearn中文文档——1.7. 高斯过程
Gaussian Processes for Machine Learning

前言

核技巧(kernal trick)是机器学习中非常重要的方法,在支持向量机(SVM)、高斯过程回归(GPR)、核岭回归(KRR)等机器学习方法中都有非常重要的运用(【机器学习系列】支持向量机与核技巧)。

在GPR中,核函数又可作为协方差函数,其决定了高斯过程的先验和后验的形状(determine the shape of prior and posterior of the GP)。关于这一部分的理解可以看一下看得见的高斯过程:这是一份直观的入门解读这篇文章。

1. 基内核——ConstantKernel(常数核)

常数核的计算公式如下:

k(x_1,x_2)=\text{constant value} \forall x_1,x_2

常数核的作用在于修改GP的均值。在sklearn中,通过from sklearn.gaussian_process.kernels import ConstantKernel来进行调用。ConstantKernel有两个参数:

参数 简介
constant_value 默认为1.0。在调用过程中,kernel = RBF() + ConstantKernel(constant_value=2)kernel = RBF() + 2是等价的。
constant_value_bounds 是一对大于0的浮点型的数据或者设置为fixed。默认为(1e-5, 1e5) 。确定了constant_value的上界和下界。如果设置为fixed ,则constant_value在超参数调优时不能修改。
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel
import matplotlib.pyplot as plt
import numpy as np

rng = np.random.RandomState(0)
# Generate sample data
X = 15 * rng.rand(100, 1)
y = np.sin(X).ravel()
y += 3 * (0.5 - rng.rand(X.shape[0]))  # add noise

kernel = RBF() + ConstantKernel(constant_value=0.01)

gpr = GaussianProcessRegressor(kernel=kernel, alpha=5,random_state=0).fit(X, y)
print(gpr.score(X, y))

X_plot = np.linspace(0, 20, 10000)[:, None]
y_gpr = gpr.predict(X_plot, return_std=False)

# Plot results
plt.figure(figsize=(10, 5))
lw = 2
plt.scatter(X, y, c='k', label='data')
plt.plot(X_plot, np.sin(X_plot), color='navy', lw=lw, label='True')
plt.plot(X_plot, y_gpr, color='darkorange', lw=lw, label='GPR (%s)' % gpr.kernel_)
plt.xlabel('data')
plt.ylabel('target')
plt.xlim(0, 20)
plt.ylim(-4, 4)
plt.title('GPR')
plt.legend(loc="best",  scatterpoints=1, prop={'size': 8})
plt.show()
取值 constant_value_bounds=’fixed’ constant_value_bounds=default
constant_value=1.0
constant_value=10.0
constant_value=100.0

2. 基内核——WhiteKernel

WhiteKernel主要是用来处理数据中的噪声的。通过参数noise_level来调节,该值默认为1。

from sklearn.gaussian_process.kernels import RBF, WhiteKernel
kernel = RBF() + WhiteKernel(noise_level = 0.05)
noise_level的取值 拟合结果
0.5
1.0

3. 内核操作符

内核操作符旨在将基内核和新内核结合在一起,得到新的内核函数。

内核操作符 计算
sklearn.gaussian_process.kernels.Sum(k1, k2) K_sum(X,Y)=k_1(X,Y)+k_2(X,Y)
sklearn.gaussian_process.kernels.Product(k1, k2) K_prob(X,Y)=k_1(X,Y)*k_2(X,Y)
sklearn.gaussian_process.kernels.Exponentiation(kernel, exponent) K_exp(X,Y)=k(X,Y)^p

4. Radial-basis function (RBF) kernel——径向基函数内核

该内核函数的计算公式如下所示:

k(x_i,x_j)=exp(\frac{d(x_i,x_j)^2}{2l^2})

其中,d(\cdot)表示欧几里得距离,l可以看作是一个长度的缩放系数。长度缩放系数是sklearn中该内核函数的参数length_scale,默认值为1.0,有关如何设置长度缩放参数的建议可以参考Advice on Covariance functions

5. Matérn kernel——Matérn内核

Matérn内核是RBF内核的泛化形式,其计算公式如下:

其中,d(\cdot)表示欧几里得距离,K(\cdot)是修正后的贝塞尔函数T(\cdot)为gamma函数,具体可以看《Gaussian Processes for Machine Learning》一书中的第四章的4.2节。

与RBF内核相比,Matérn内核多了一个参数v,默认值为1.50。当v=\frac{1}{2}时,Matérn内核便成为了RBF内核。v=\frac{3}{2}\frac{5}{2}是常用的两个机器学习参数。通过v灵活控制学习函数的平滑性可以更加适应真正的底层函数关联属性。

6. Rational quadratic kernel——有理二次内核

有理二次内核的公式如下:

k(x_i,x_j)=(1+\frac{d(x_i,x_j)^2}{2 \alpha j^2})^{\alpha}

其中,\alpha为比例混合参数(the scale mixture parameter)默认为1.0;d(\cdot)表示欧几里得距离;l可以看作是一个长度的缩放系数,默认为1.0。

7. Exp-Sine-Squared kernel——正弦平方内核

正弦平方内核可以对有周期变化的数据进行建模。其计算公式如下:

k(x_i,x_j)=exp(-\frac{2 \sin^2(\pi d(x_i,x_j)/p)}{l^2})

其中,l可以看作是一个长度的缩放系数,默认为1.0;d(\cdot)表示欧几里得距离;p表示核函数的周期(the periodicity of the kernel)。

8. Dot-Product kernel——点乘内核

其计算公式如下:

k(x_i,x_j)=\sigma_0^2+x_i \cdot x_j

DotProduct 内核是非固定内核,它可以通过在线性回归的x_d (d = 1, . . . , D) 的相关系数上加上服从于N(0, 1)的先验以及在线性回归的偏置上加上服从于N(0, \sigma_0^2)的先验来获得。 该 DotProduct 内核对于原点坐标的旋转是不变的,因此不是转换。它通过设置参数\sigma_0^2来进行参数化。