高斯过程的内核

时间:2019-11-18 14:53:50

标签: python machine-learning scikit-learn

我正在训练高斯过程(用scikit-learn进行编码,请参见下文)。

我想通过初步了解我的信号,来了解如何对可能最适合我的任务的内核做出有根据的猜测。 GP应该学习的映射是在坐标x,y,z,d(具有d = sqrt(x**2 +y**2 +z**2))和标量之间。不同坐标x,y,z,d的标量一起形成一个时间序列。

在下面,我正在绘制我的训练集,即我的时间序列。在每个绘图中,x轴分别代表坐标x,y,z,d中的一个,按升序排列并标准化。在每个图中,时间序列的组成部分都按此顺序排序。换句话说,在每个图中,我分别显示了信号根据x,y,z,d坐标的增加而排序。

我想了解:

1)我的数据的最佳顺序是什么:作为xyzd的函数?

2)按照1)对我的数据进行排序后,在高斯过程中使用的最佳内核是什么?特别是,对于初始超参数及其范围,合理的优先选择是什么?

按时间顺序排列的(标准)X坐标enter image description here

按时间顺序排列(标准)的Y坐标enter image description here

按时间顺序排列(按标准Z坐标递增)enter image description here

按时间顺序排列的(标准)距离坐标enter image description here

代码

(作为说明性示例,这里我使用Matern 3/2内核,并按照d坐标的增加值对数据进行排序)

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import (RBF, Matern, RationalQuadratic, ExpSineSquared, DotProduct, ConstantKernel)
# Instantiate a Gaussian Process model
kernel = (time_series_ordered_with_increasing_d[:].std()**2.) * Matern(nu=1.5, length_scale=10.*np.ones(x_y_z_d_ordered_with_increasing_d.shape[1]), length_scale_bounds=(0.001, 20.0))
gp = GaussianProcessRegressor(kernel=kernel,  n_restarts_optimizer=10, alpha=time_series_ordered_with_increasing_d[:].std()/100.)

gp.fit(x_y_z_d_ordered_with_increasing_d, time_series_ordered_with_increasing_d[:])
print gp.kernel_
y_pred, sigma = gp.predict(x_y_z_d_ordered_with_increasing_d, return_std=True)

0 个答案:

没有答案