高斯回归过程核函数(RBF,Matern,RationalQuadratic,ExpSineSquared,DotProduct)

转载源:http://www.sohu.com/a/252035553_99917536

最近在做高斯回归过程小车倒摆实验。修改了Actor中网络神经元后,及Critic中Batch后,打算看看核函数。

内核操作是把1~2个基内核与新内核进行合并。内核类 Sum通过 相加来合并 和 内核。内核类 Product通过 把 和 内核进行合并。内核类 Exponentiation通过 把基内核与 常量参数 进行合并。

1.径向基函数内核

RBF内核是一个固定内核,它也被称为“平方指数”内核。它通过定长的参数(length_scale) 来对内核进行参数化。该参数既可以是标量(内核的各向同性变体)或者与输入 (内核的各向异性变体) 具有相同数量的维度的向量。该内核可以被定义为:

这个内核是无限可微的,这意味着这个内核作为协方差函数的 GP 具有所有阶数的均方差导数, 因此非常平滑。由RBF内核产生的GP的先验和后验示意图如下所示:

2.Matérn 内核

Matern内核是一个固定内核,是 RBF内核的泛化。它有一个额外的参数 , 该参数控制结果函数的平滑程度(nu)。它由定长参数(length_scale) 来实现参数化。该参数既可以是标量 (内核的各向同性变体)或者与输入 (内核的各向异性变体)具有相同数量的维度的向量。

通过 灵活控制学习函数的平滑性可以更加适应真正的底层函数关联属性。 通过 Matérn 内核产生的高斯过程的先验和后验如下图所示:

3.有理二次内核

RationalQuadratic内核可以被看做不同特征尺度下的 RBF内核的规模混合(一个无穷和) 它通过长度尺度参数(length_scale)比例混合参数(alpha) 进行参数化。 此时仅支持 标量的各向同性变量。内核公式如下:

从 RBF 内核中产生的高斯过程的先验和后验如下图所示:

4.正弦平方内核

ExpSineSquared内核可以对周期性函数进行建模。它由定长参数(length_scale) 以及周期参数(periodicity) 来实现参数化。此时仅支持 标量的各向同性变量。内核公式如下:

从ExpSineSquared内核中产生的高斯过程的先验和后验如下图所示:

5.点乘内核

DotProduct内核是非固定内核,它可以通过在线性回归的相关系数上加上 服从于 的先验以及在线性回归的偏置上加上服从于 的先验来获得。 该 DotProduct内核对于原点坐标的旋转是不变的,因此不是转换。它通过设置参数 来进行参数化。 当 时,该内核叫做同质线性内核;否则该内核是非同质的。内核公式如下:

DotProduct内核通常和指数分布相结合。实例如下图所示:

参考源:Carl Eduard Rasmussen and Christopher K.I. Williams, “Gaussian Processes for Machine Learning”, MIT Press 2006

https://blog.youkuaiyun.com/a_l_a_n/article/details/93888883    文中有参考资源

Matérn核函数是一种常用的高斯过程(Gaussian Process,GP)的核函数,它提供了一种平滑且可微分的拟合能力,适用于处理连续性和光滑性的数据。在Python中,我们通常使用`scikit-learn`库来构建高斯过程模型,其中并没有直接提供对Matérn核函数的内置支持,但你可以通过自定义实现或使用第三方库如`GPy`或`george`来应用。 以下是一个简单的示例,展示如何自定义使用Matérn核函数创建高斯过程回归模型: ```python from scipy.special import gamma import numpy as np from sklearn.gaussian_process.kernels import Kernel # 定义Matérn核函数 def matern_kernel(nu=1.5, length_scale=1.0, sigmaf=1.0): def kernel(x, y=None, scale=length_scale, variance=sigmaf**2): if y is None: x, y = x[:, np.newaxis], x[np.newaxis, :] else: assert x.shape[1] == y.shape[1] # Matérn kernel parameters dist = np.linalg.norm(x - y, axis=-1) K = (sigmaf**2) * ((1 + np.sqrt(5*nu)*dist / scale) + 5*(np.sqrt(5*nu)*dist / scale)**3 / 3 / np.gamma(1+nu)) / scale**nu return K return kernel # 创建Matérn核实例 kernel = matern_kernel(nu=1.5, length_scale=0.5) # 假设你有训练数据 X_train 和 Y_train X_train = ... # 输入特征 Y_train = ... # 目标变量 # 初始化高斯过程回归模型并添加自定义核函数 gp = GaussianProcessRegressor(kernel=kernel) # 训练模型 gp.fit(X_train, Y_train) # 使用模型进行预测 X_test = ... # 测试输入特征 y_pred, _ = gp.predict(X_test, return_std=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值