向量机SVM代码实现

news/2025/3/4 23:17:33/

支持向量机(SVM, Support Vector Machines)是一种广泛应用于分类、回归、甚至是异常检测的监督学习算法。自从Vapnik和Chervonenkis在1995年首次提出,SVM算法就在机器学习领域赢得了巨大的声誉。这部分因为其基于几何和统计理论的坚实数学基础,也因为其在实际应用中展示出的出色性能。

代码实现

在这一部分中,我们将使用Python和PyTorch库来实现一个基础的支持向量机(SVM)。我们会遵循以下几个主要步骤:

  1. 数据预处理:准备用于训练和测试的数据。
  2. 模型定义:定义SVM模型的架构。
  3. 优化器选择:选择合适的优化算法。
  4. 训练模型:使用训练数据来训练模型。
  5. 评估模型:使用测试数据来评估模型的性能。
import torch# 创建训练数据和标签
X_train = torch.FloatTensor([[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3]])
y_train = torch.FloatTensor([1, 1, 1, -1, -1, -1])# 创建测试数据
X_test = torch.FloatTensor([[1, 0.5], [2, 0.5]])

 模型定义

class LinearSVM(torch.nn.Module):def __init__(self):super(LinearSVM, self).__init__()self.weight = torch.nn.Parameter(torch.rand(2), requires_grad=True)self.bias = torch.nn.Parameter(torch.rand(1), requires_grad=True)def forward(self, x):return torch.matmul(x, self.weight) + self.bias

优化器选择

# 实例化模型和优化器
model = LinearSVM()
optimizer = torch.optim.SGD([model.weight, model.bias], lr=0.01)

训练模型

# 设置训练轮次和正则化参数C
epochs = 100
C = 0.1for epoch in range(epochs):for i, x in enumerate(X_train):y = y_train[i]optimizer.zero_grad()# 计算间隔损失 hinge loss: max(0, 1 - y*(wx + b))loss = torch.max(torch.tensor(0), 1 - y * model(x))# 添加正则化项: C * ||w||^2loss += C * torch.norm(model.weight)**2loss.backward()optimizer.step()

评估模型

with torch.no_grad():for x in X_test:prediction = model(x)print(f"Prediction for {x} is: {prediction}")


http://www.ppmy.cn/news/1228483.html

相关文章

mfc140.dll是什么文件?如何修复mfc140.dll丢失的方法分享

​mfc140.dll丢失的原因 未正确安装Microsoft Visual C Redistributable:mfc140.dll是Visual C库的一部分,如果没有正确安装Visual C Redistributable,可能导致mfc140.dll丢失。 系统文件损坏:由于病毒感染、系统错误或其他原因…

nodejs微信小程序-实验室上机管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

用户:管理员、教师、学生 基础功能:管理课表、管理机房情况、预约机房预约;权限不同,预约类型不同,教师可选课堂预约和个人;课堂预约。 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 …

用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制AI助手——PPT大纲助手

随着人工智能技术的不断发展,AI助手在各行各业中扮演着越来越重要的角色。在商业领域,PPT演示是一种常见的沟通方式,而定制化的PPT大纲助手能够极大地提高PPT制作效率和质量。本文将介绍如何利用向量数据库Milvus Cloud搭建GPT大模型和私有知识库,构建一款高效的PPT大纲助手…

基于LLM+场景识别+词槽实体抽取实现多轮问答

前言 随着人工智能技术的不断进步,大语言模型(LLM)已成为技术前沿的热点。它们不仅能够理解和生成文本,还能在多种应用场景中实现复杂的交互。本文将深入探讨一段结合了大语言模型能力、意图识别和词槽实体抽取的Python代码&…

uniapp heckbox-group实现多选

文章目录 html 代码JS 代码 混了业务逻辑&#xff0c;谨慎观看 html 代码 <view><!--可滚动视图区域。用于区域滚动 --><scroll-view :style"{ height: clientHeight px }" :scroll-top"scrollTop" scroll-y"true"scrolltouppe…

C#有关里氏替换原则的经典问题答疑

目录 理解创建类型与变量类型很关键 先来理解变量类型。 再来理解创建类型。 有了正确的理解再来看疑问 里氏替换原则是面向对象七大原则中最重要的原则。 语法表现&#xff1a;父类容器装子类对象。 namespace 里氏替换原则 {class GameObject { } class Player : GameO…

Linux管道的工作过程

常用的匿名管道&#xff08;Anonymous Pipes&#xff09;&#xff0c;也即将多个命令串起来的竖线。管道的创建&#xff0c;需要通过下面这个系统调用。 int pipe(int fd[2]) 我们创建了一个管道 pipe&#xff0c;返回了两个文件描述符&#xff0c;这表示管道的两端&#xff…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…