利用sklearn.gaussian_process.kernels实现基于核函数的高斯过程回归模型
高斯过程回归(Gaussian Process Regression,GPR)是一种非参数的回归方法,可以通过不断的观测样本来预测未知的函数值。在GPR中,函数的每一个点都是一个随机变量,整个函数就是一个随机过程。GPR的核心思想是通过观测的样本来推断整个函数的分布,而核函数则用来衡量样本之间的相似性。在sklearn库中,可以利用gaussian_process.kernels模块来实现基于核函数的高斯过程回归模型。
首先,我们需要导入所需的库和模块:
import numpy as np import matplotlib.pyplot as plt from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
接下来,我们定义一个自定义的函数,作为我们的目标函数。在这个例子中,我们定义一个正弦函数:
def target_function(x):
return np.sin(2 * np.pi * x)
然后,生成一些观测样本。我们选择在区间[0, 1]上均匀采样,共生成10个样本点:
np.random.seed(0) X_train = np.random.rand(10, 1) y_train = target_function(X_train)
接下来,我们需要定义核函数。常用的核函数有RBF(Radial Basis Function)核和线性核。我们可以根据具体的需求选择适当的核函数。在这个例子中,我们选择RBF核:
kernel = C(1.0, (1e-3, 1e3)) * RBF(0.1, (1e-2, 1e2))
然后,我们创建一个高斯过程回归模型,并将样本数据传入模型进行训练:
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9) gp.fit(X_train, y_train)
接下来,我们可以利用已经训练好的模型进行预测。我们在[0, 1]区间上均匀采样100个点,并通过模型推断这100个点的函数值:
X_test = np.linspace(0, 1, 100).reshape(-1, 1) y_pred, sigma = gp.predict(X_test, return_std=True)
最后,我们可以画出原始的目标函数、观测样本和预测结果的图像:
plt.figure(figsize=(10, 6))
plt.plot(X_test, target_function(X_test), label='True function', linewidth=2)
plt.scatter(X_train, y_train, label='Observations', color='red', s=30, alpha=0.5)
plt.plot(X_test, y_pred, label='Prediction', color='blue')
plt.fill_between(X_test.flatten(), y_pred - 2 * sigma, y_pred + 2 * sigma, alpha=0.3, color='lightblue')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
通过运行上述代码,我们可以得到包括真实函数、观测样本和预测结果的图像。这个图像展示了GPR模型的拟合效果,以及预测结果的不确定性。
总结起来,sklearn库中的gaussian_process.kernels模块提供了用于构建高斯过程回归模型的核函数。通过选择适当的核函数和观测样本,可以通过高斯过程回归模型来预测未知函数的值,并量化预测的不确定性。这种基于核函数的高斯过程回归模型在机器学习中具有广泛的应用,例如函数拟合、异常检测、优化等。
