以下是一个使用PyTorch实现支持向量机(SVM)的例子:

首先,导入必要的库:

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

生成一些随机数据(这里使用的是线性可分的数据):

# 生成训练数据
x_train = torch.tensor([[1., 1.], [2., 2.], [0., 0.], [-1., -1.]])
y_train = torch.tensor([1, 1, -1, -1])

定义SVM模型:

class SVM(nn.Module):
    def __init__(self):
        super(SVM, self).__init__()
        self.linear = nn.Linear(2, 1)  # 使用线性层

    def forward(self, x):
        return self.linear(x)

定义损失函数和优化器:

svm = SVM()
criterion = nn.HingeEmbeddingLoss()  # 采用Hinge Embedding Loss函数
optimizer = optim.SGD(svm.parameters(), lr=0.01)  # 采用随机梯度下降算法

训练模型:

for epoch in range(1000):
    optimizer.zero_grad()
    output = svm(x_train)
    loss = criterion(output.squeeze(), y_train.float())
    loss.backward()
    optimizer.step()

    if epoch % 100 == 0:
        print('epoch {}, loss {}'.format(epoch, loss.item()))

最后,我们可以使用训练好的模型对新的数据进行分类:

# 预测
svm.eval()
x_test = torch.tensor([[3., 3.], [-2., -2.]])
y_pred = svm(x_test).squeeze().detach().numpy()
print(y_pred)

这里的输出结果是[1.0, -1.0],表示第一个样本属于正类,第二个样本属于负类。

使用pytorch实现支持向量机的分类

原文地址: https://www.cveoy.top/t/topic/BrI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录