高斯过程回归与分类

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将探索高斯过程(Gaussian Processes,GP),这是一种用于回归和概率分类问题的监督学习方法。高斯过程用途广泛,能够对观测值进行插值、提供概率预测并处理不同类型的核。在本实验中,我们将重点使用 scikit-learn 库进行高斯过程回归(Gaussian Process Regression,GPR)和高斯过程分类(Gaussian Process Classification,GPC)。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到笔记本标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会立即为你解决问题。

高斯过程回归(GPR)

GaussianProcessRegressor 类实现了用于回归任务的高斯过程。它需要为高斯过程指定一个先验,例如均值和协方差函数。核的超参数在拟合过程中进行优化。下面来看一个使用 GPR 进行回归的示例。

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF

## 创建一个具有 RBF 核的 GPR 模型
kernel = RBF()
model = GaussianProcessRegressor(kernel=kernel)

## 将模型拟合到训练数据
model.fit(X_train, y_train)

## 使用训练好的模型进行预测
y_pred = model.predict(X_test)

GPR 示例

带有噪声水平估计的 GPR:此示例展示了使用包含 WhiteKernel 的和核的 GPR,用于估计数据的噪声水平。

from sklearn.gaussian_process.kernels import WhiteKernel

## 创建一个具有 RBF 核和 WhiteKernel 的 GPR 模型
kernel = RBF() + WhiteKernel()
model = GaussianProcessRegressor(kernel=kernel)

## 将模型拟合到训练数据
model.fit(X_train, y_train)

## 使用训练好的模型进行预测
y_pred = model.predict(X_test)

GPR 与核岭回归的比较:核岭回归(KRR)和 GPR 都使用“核技巧”来学习目标函数。GPR 学习一个生成式概率模型并能提供置信区间,而 KRR 仅提供预测。

from sklearn.kernel_ridge import KernelRidge

## 创建一个核岭回归模型
krr_model = KernelRidge(kernel='rbf')

## 将 KRR 模型拟合到训练数据
krr_model.fit(X_train, y_train)

## 使用 KRR 模型进行预测
krr_y_pred = krr_model.predict(X_test)

## 将结果与 GPR 进行比较
gpr_model = GaussianProcessRegressor(kernel=RBF())
gpr_model.fit(X_train, y_train)
gpr_y_pred = gpr_model.predict(X_test)

莫纳罗亚二氧化碳数据上的 GPR:此示例展示了使用对数边际似然上的梯度上升进行复杂的核工程和超参数优化。数据由夏威夷莫纳罗亚天文台收集的每月平均大气二氧化碳浓度组成。目标是将二氧化碳浓度建模为时间的函数。

from sklearn.gaussian_process.kernels import RBF, ExpSineSquared, RationalQuadratic, WhiteKernel

## 创建一个具有复合核的 GPR 模型
kernel = 34.4**2 * RBF(length_scale=41.8) + 3.27**2 * RBF(length_scale=180) * ExpSineSquared(length_scale=1.44, periodicity=1) + 0.446**2 * RationalQuadratic(alpha=17.7, length_scale=0.957) + 0.197**2 * RBF(length_scale=0.138) + WhiteKernel(noise_level=0.0336)
model = GaussianProcessRegressor(kernel=kernel)

## 将模型拟合到数据
model.fit(X_train, y_train)

## 使用训练好的模型进行预测
y_pred = model.predict(X_test)

高斯过程分类(GPC)

GaussianProcessClassifier 类实现了用于概率分类的 GPC。它在一个潜在函数上放置一个高斯过程先验,然后通过一个链接函数进行压缩以获得类别概率。GPC 通过执行一对其余或一对一的训练和预测来支持多类别分类。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

X = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

from sklearn.gaussian_process import GaussianProcessClassifier
## 创建一个具有 RBF 核的 GPC 模型
kernel = RBF()
model = GaussianProcessClassifier(kernel=kernel)

## 将模型拟合到训练数据
model.fit(X_train, y_train)

## 使用训练好的模型进行预测
y_pred = model.predict(X_test)

GPC 示例

GPC 的概率预测:此示例展示了使用不同超参数选择时 GPC 的预测概率。

## 创建一个具有 RBF 核的 GPC 模型
kernel = RBF()
model = GaussianProcessClassifier(kernel=kernel)

## 将模型拟合到训练数据
model.fit(X_train, y_train)

## 预测测试数据的类别概率
y_prob = model.predict_proba(X_test)

GPC 在异或数据集上的演示:此示例展示了 GPC 在异或数据集上的使用。我们比较了使用平稳、各向同性核(RBF)和非平稳核(DotProduct)的结果。

## 创建具有不同核的 GPC 模型
各向同性核 = RBF(length_scale=1.0)
非平稳核 = DotProduct(sigma_0=1.0)

## 将模型拟合到异或数据集
各向同性模型 = GaussianProcessClassifier(kernel=各向同性核)
非平稳模型 = GaussianProcessClassifier(kernel=非平稳核)
各向同性模型.fit(X_xor, y_xor)
非平稳模型.fit(X_xor, y_xor)

## 使用训练好的模型进行预测
各向同性_y_pred = 各向同性模型.predict(X_test)
非平稳_y_pred = 非平稳模型.predict(X_test)

GPC 在鸢尾花数据集上的应用:此示例展示了使用各向同性 RBF 核和各向异性 RBF 核对鸢尾花数据集进行 GPC 的过程。它展示了不同超参数选择如何影响预测概率。

## 创建具有不同核的 GPC 模型并将它们拟合到鸢尾花数据集
各向同性核 = RBF(length_scale=1.0)
各向异性核 = RBF(length_scale=[1.0, 2.0])
各向同性模型 = GaussianProcessClassifier(kernel=各向同性核)
各向异性模型 = GaussianProcessClassifier(kernel=各向异性核)
各向同性模型.fit(X_train, y_train)
各向异性模型.fit(X_train, y_train)

## 预测类别概率
各向同性_y_prob = 各向同性模型.predict_proba(X_test)
各向异性_y_prob = 各向异性模型.predict_proba(X_test)

总结

在本实验中,我们探索了高斯过程(GP)及其在回归和分类任务中的应用。我们学习了如何使用 scikit-learn 中的 GaussianProcessRegressor 和 GaussianProcessClassifier 类,以及如何为高斯过程指定不同类型的核。我们还看到了用于回归任务的 GPR 和用于多类分类任务的 GPC 的示例,展示了高斯过程的多功能性和能力。