使用pytorch实现支持向量机的分类
以下是一个使用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],表示第一个样本属于正类,第二个样本属于负类。
原文地址: https://www.cveoy.top/t/topic/BrI 著作权归作者所有。请勿转载和采集!