AI入门:高斯过程分类实战——从零安装到跑通第一个模型
本文带你从零安装PyTorch和GPyTorch,理解高斯过程分类的核心概念,并跑通一个简单的二分类示例。
准备环境
在开始之前,你需要确保电脑上已安装Python(一种流行的编程语言,适合AI开发)。建议使用Python 3.8或更高版本。如果还没安装,可以去python.org下载并安装。安装时记得勾选“Add Python to PATH”。
接下来,我们需要安装两个重要的库:PyTorch(一个用于深度学习的框架)和GPyTorch(基于PyTorch的高斯过程库)。打开终端(Windows下是命令提示符或PowerShell,Mac/Linux下是终端),输入以下命令:
pip install torch—— 安装PyTorchpip install gpytorch—— 安装GPyTorch
如果下载慢,可以加上国内镜像,例如:pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple。
理解高斯过程分类
分类问题就是给数据贴标签,比如判断一封邮件是“垃圾邮件”还是“正常邮件”。高斯过程分类(Gaussian Process Classification)是一种用概率来做分类的方法。简单来说,它先假设一个隐藏的“打分函数”f(x)(对每个输入x给出一个分数),然后用一个叫做逻辑斯蒂函数(sigmoid)的“挤压函数”把分数转换成0到1之间的概率,概率大于0.5就归为类别1,否则归为类别-1。
与普通的分类方法不同,高斯过程分类会给出每个预测的“置信度”,即它有多确定。这对新手来说很友好,因为你可以知道模型什么时候在“犹豫”。
安装并跑通第一个示例
现在我们来写一段代码,用GPyTorch实现一个简单的二分类(两个类别)任务。我们将生成一些模拟数据:两类点分别分布在两个不同的区域。
- 创建一个Python文件,比如
gpc_demo.py。 - 复制以下代码:
import torch import gpytorch import numpy as np import matplotlib.pyplot as plt # 生成数据 np.random.seed(0) X = np.random.randn(100, 2) y = np.where(X[:, 0] + X[:, 1] > 0, 1, -1) # 简单线性可分 # 转换为PyTorch张量 X = torch.tensor(X, dtype=torch.float32) y = torch.tensor(y, dtype=torch.float32) # 定义高斯过程模型 class GPClassificationModel(gpytorch.models.VariationalGP): def __init__(self, train_x): super().__init__() self.mean_module = gpytorch.means.ConstantMean() self.covar_module = gpytorch.kernels.ScaleKernel(gpytorch.kernels.RBFKernel()) def forward(self, x): mean_x = self.mean_module(x) covar_x = self.covar_module(x) return gpytorch.distributions.MultivariateNormal(mean_x, covar_x) model = GPClassificationModel(X) likelihood = gpytorch.likelihoods.BernoulliLikelihood() # 训练模式 model.train() likelihood.train() # 使用变分推理(近似方法) from gpytorch.variational import CholeskyVariationalDistribution, VariationalStrategy variational_distribution = CholeskyVariationalDistribution(100) variational_strategy = VariationalStrategy(model, X, variational_distribution) # 训练过程 optimizer = torch.optim.Adam([{'params': model.parameters()}, {'params': likelihood.parameters()}], lr=0.1) mll = gpytorch.mlls.VariationalELBO(likelihood, model, num_data=len(y)) for i in range(50): optimizer.zero_grad() output = model(X) loss = -mll(output, y) loss.backward() optimizer.step() if i % 10 == 0: print(f'Iter {i}, Loss: {loss.item():.4f}') # 预测 model.eval() likelihood.eval() with torch.no_grad(): test_x = torch.linspace(-3, 3, 50) test_x = torch.stack([test_x, torch.zeros_like(test_x)], dim=1) predictions = likelihood(model(test_x)) pred_classes = predictions.probs.mean(0) > 0.5 print('预测完成!') - 在终端运行:
python gpc_demo.py。你会看到训练过程中的损失值逐渐下降,最后输出“预测完成!”。
常见坑提醒:如果报错ModuleNotFoundError: No module named 'gpytorch',说明GPyTorch没安装成功,请重新执行安装命令。如果内存不足,可以减小数据量(比如把100改成50)。
验证是否成功
成功运行后,你可以修改代码中的test_x来预测新的点。例如,把test_x改成torch.tensor([[1.0, 1.0], [-1.0, -1.0]]),然后打印pred_classes,看看模型是否给[1, -1](即第一个点属于类别1,第二个属于类别-1)。
下一步可以做什么
你已经跑通了第一个高斯过程分类模型!接下来可以尝试:
- 用真实数据集(如鸢尾花数据集)替换模拟数据,进行多分类。
- 调整核函数(比如换成
MaternKernel)看看效果。 - 学习如何可视化决策边界和不确定性。
内容来源
DEV Machine Learning
发布时间
2026-07-12 01:33