极客前沿

AI入门:高斯过程分类实战——从零安装到跑通第一个模型

2026-07-12 01:33
DEV Machine Learning
查看原文

本文带你从零安装PyTorch和GPyTorch,理解高斯过程分类的核心概念,并跑通一个简单的二分类示例。

准备环境

在开始之前,你需要确保电脑上已安装Python(一种流行的编程语言,适合AI开发)。建议使用Python 3.8或更高版本。如果还没安装,可以去python.org下载并安装。安装时记得勾选“Add Python to PATH”。

接下来,我们需要安装两个重要的库:PyTorch(一个用于深度学习的框架)和GPyTorch(基于PyTorch的高斯过程库)。打开终端(Windows下是命令提示符或PowerShell,Mac/Linux下是终端),输入以下命令:

  • pip install torch —— 安装PyTorch
  • pip 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。

与普通的分类方法不同,高斯过程分类会给出每个预测的“置信度”,即它有多确定。这对新手来说很友好,因为你可以知道模型什么时候在“犹豫”。

Tutorial Image

安装并跑通第一个示例

现在我们来写一段代码,用GPyTorch实现一个简单的二分类(两个类别)任务。我们将生成一些模拟数据:两类点分别分布在两个不同的区域。

  1. 创建一个Python文件,比如gpc_demo.py
  2. 复制以下代码:
    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('预测完成!')
  3. 在终端运行: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

返回 AI技术