线性可分支持向量机代码 举例说明 具体的变量数值变化

### 实现线性可分支持向量机
### 硬间隔最大化策略
class Hard_Margin_SVM:### 线性可分支持向量机拟合方法def fit(self, X, y):# 训练样本数和特征数m, n = X.shape# 初始化二次规划相关变量:P/q/G/hself.P = matrix(np.identity(n + 1, dtype=np.float))self.q = matrix(np.zeros((n + 1,), dtype=np.float))self.G = matrix(np.zeros((m, n + 1), dtype=np.float))self.h = -matrix(np.ones((m,), dtype=np.float))# 将数据转为变量self.P[0, 0] = 0for i in range(m):self.G[i, 0] = -y[i]self.G[i, 1:] = -X[i, :] * y[i]# 构建二次规划求解sol = solvers.qp(self.P, self.q, self.G, self.h)# 对权重和偏置寻优self.w = np.zeros(n,) self.b = sol['x'][0] for i in range(1, n + 1):self.w[i - 1] = sol['x'][i]return self.w, self.b### 定义模型预测函数def predict(self, X):return np.sign(np.dot(self.w, X.T) + self.b)

通过一个具体的示例来展示硬间隔支持向量机的代码是如何运行的,并为每个变量提供具体的数据样例。

示例数据和解释

假设我们有如下的二维数据集,其中每个样本有两个特征(即二维坐标),并且样本属于两个类别 y ∈ { − 1 , 1 } y \in \{-1, 1\} y{1,1}。我们将使用硬间隔支持向量机来找到一个最大化分类间隔的超平面。

示例数据

特征矩阵 X X X(每一行是一个样本的坐标):

X = np.array([[1, 2],[2, 3],[3, 3],[2, 1],[3, 2]
])

标签向量 y y y(每个样本的类别标签):

y = np.array([1, 1, 1, -1, -1])

这个数据集包含 5 个样本,分别对应两个类别(1 和 -1)。前 3 个样本属于类别 + 1 +1 +1,后两个样本属于类别 − 1 -1 1

代码中的每个变量解释

让我们一步步来分析代码中的每个变量。

(1) 训练样本数和特征数
m, n = X.shape

X.shape 返回 m m m n n n,分别表示样本数量和特征数量:

  • m = 5 m = 5 m=5 表示有 5 个样本。
  • n = 2 n = 2 n=2 表示每个样本有 2 个特征(二维数据)。
(2) 初始化二次规划相关矩阵
self.P = matrix(np.identity(n + 1, dtype=np.float))
self.q = matrix(np.zeros((n + 1,), dtype=np.float))
self.G = matrix(np.zeros((m, n + 1), dtype=np.float))
self.h = -matrix(np.ones((m,), dtype=np.float))

我们将定义二次规划问题的参数矩阵:

  • self.P:用于构建目标函数的二次项 1 2 w T P w \frac{1}{2} w^T P w 21wTPw,在支持向量机中,目标是最小化 1 2 ∥ w ∥ 2 \frac{1}{2} \|w\|^2 21w2,因此 P P P 是一个 ( n + 1 ) × ( n + 1 ) (n+1) \times (n+1) (n+1)×(n+1) 的单位矩阵(表示 w 1 , w 2 w_1, w_2 w1,w2 b b b)。

    self.P = np.identity(3)  # 2 个特征 + 1 个偏置
    # 输出
    [[1. 0. 0.][0. 1. 0.][0. 0. 0.]]
    
  • self.q:表示线性项 q q q,其值为 0,因为硬间隔 SVM 中我们只需要最小化 1 2 ∥ w ∥ 2 \frac{1}{2} \|w\|^2 21w2,不需要其他线性项。

    self.q = np.zeros(3)
    # 输出
    [0. 0. 0.]
    
  • self.Gself.h:这些是约束条件,用于确保每个样本都正确分类并满足硬间隔条件 y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 yi(wTxi+b)1

    self.G = np.zeros((5, 3))  # 5 个样本,每个样本对应 (w1, w2, b)
    self.h = -np.ones(5)       # 对应每个样本的约束
    # 输出 G 和 h
    G = [[0. 0. 0.][0. 0. 0.][0. 0. 0.][0. 0. 0.][0. 0. 0.]]
    h = [-1. -1. -1. -1. -1.]
    
(3) 构建约束矩阵 G G G h h h

接下来,我们要根据数据构建约束条件:

self.P[0, 0] = 0  # 偏置 b 不需要惩罚
for i in range(m):self.G[i, 0] = -y[i]  # 对偏置项的影响self.G[i, 1:] = -X[i, :] * y[i]  # 对 w 的影响

每一行 G [ i ] G[i] G[i] 对应样本 X [ i ] X[i] X[i] 的约束 y i ( w T x i + b ) ≥ 1 y_i(w^T x_i + b) \geq 1 yi(wTxi+b)1

样本 X X X标签 y y y约束条件
(1, 2)1 w 1 ⋅ 1 + w 2 ⋅ 2 + b ≥ 1 w_1 \cdot 1 + w_2 \cdot 2 + b \geq 1 w11+w22+b1
(2, 3)1 w 1 ⋅ 2 + w 2 ⋅ 3 + b ≥ 1 w_1 \cdot 2 + w_2 \cdot 3 + b \geq 1 w12+w23+b1
(3, 3)1 w 1 ⋅ 3 + w 2 ⋅ 3 + b ≥ 1 w_1 \cdot 3 + w_2 \cdot 3 + b \geq 1 w13+w23+b1
(2, 1)-1 − w 1 ⋅ 2 − w 2 ⋅ 1 − b ≥ 1 -w_1 \cdot 2 - w_2 \cdot 1 - b \geq 1 w12w21b1
(3, 2)-1 − w 1 ⋅ 3 − w 2 ⋅ 2 − b ≥ 1 -w_1 \cdot 3 - w_2 \cdot 2 - b \geq 1 w13w22b1

更新后的 G G G 矩阵和 h h h 向量为:

self.G = [[-1. -1. -2.]  # 对应第一个样本的约束[-1. -2. -3.]  # 对应第二个样本的约束[-1. -3. -3.]  # 对应第三个样本的约束[ 1.  2.  1.]  # 对应第四个样本的约束[ 1.  3.  2.]] # 对应第五个样本的约束
self.h = [-1. -1. -1. -1. -1.]
(4) 使用二次规划求解

使用 cvxopt.solvers.qp 进行求解:

sol = solvers.qp(self.P, self.q, self.G, self.h)

这个函数会求解二次规划问题,返回包含最优解的字典 sol

(5) 提取权重和偏置

从求解结果中提取权重 w w w 和偏置 b b b

self.w = np.zeros(n,)
self.b = sol['x'][0]  # 偏置 b
for i in range(1, n + 1):self.w[i - 1] = sol['x'][i]  # 提取权重 w

假设 sol['x'] 返回如下最优解:

sol['x'] = [1.5, 0.5, -0.5]

则:

  • self.b = 1.5 是偏置项。
  • self.w = [0.5, -0.5] 是权重向量 w 1 = 0.5 w_1 = 0.5 w1=0.5 w 2 = − 0.5 w_2 = -0.5 w2=0.5

6. 使用模型进行预测

def predict(self, X):return np.sign(np.dot(self.w, X.T) + self.b)

假设我们用训练好的模型对样本进行预测,预测公式为:
y 预测 = sign ( w T x + b ) y_{\text{预测}} = \text{sign}(w^T x + b) y预测=sign(wTx+b)

例如,输入样本 X = [ 1 , 2 ] X = [1, 2] X=[1,2],计算 y 预测 y_{\text{预测}} y预测
y 预测 = sign ( 0.5 ⋅ 1 + ( − 0.5 ) ⋅ 2 + 1.5 ) = sign ( 0.5 + ( − 1 ) + 1.5 ) = sign ( 1.0 ) = 1 y_{\text{预测}} = \text{sign}(0.5 \cdot 1 + (-0.5) \cdot 2 + 1.5) = \text{sign}(0.5 + (-1) + 1.5) = \text{sign}(1.0) = 1 y预测=sign(0.51+(0.5)2+1.5)=sign(0.5+(1)+1.5)=sign(1.0)=1

模型预测结果为正类 + 1 +1 +1

总结

  • 数据:输入的训练数据 X X X 和标签 y y y
  • 目标:通过二次规划找到最优的超平面参数 w w w b b b
  • 预测:使用得到的模型参数 w w w b b b 对新数据进行预测。

另一篇文章是对这段代码的整体说明:线性可分支持向量机代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS计算多个面要素范围内栅格数据各数值的面积

本文介绍在ArcMap软件中,基于面积制表工具(也就是Tabulate Area工具),基于1个面要素数据集与1个栅格数据,计算每一个面要素中各栅格数据分布面积的方法。 首先,来看一下本文的需求。现有一个矢量面的要素集…

Springboot整合原生ES依赖

前言 Springboot整合依赖大概有三种方式: es原生依赖:elasticsearch-rest-high-level-clientSpring Data ElasticsearchEasy-es 三者的区别 1. Elasticsearch Rest High Level Client 简介: 这是官方提供的 Elasticsearch 客户端,支持…

小问题解决方法汇总(2024.10.24水个勋章)

问题1:”因为在系统上禁止运行脚本“ 我们在使用命令行时经常遇到类似文章这样的提示,或者是如下截图中显示的那样: 仅需要在“管理员权限下的Powershell”中输入下面的命令即可解决: set-ExecutionPolicy RemoteSigned 输入命…

【数据分享】全国科技-产品质量国家监督抽查(1995-2021年)

数据介绍 一级标题指标名称单位科技国家监督抽查产品种类种科技国家监督抽查食品种类种科技国家监督抽查日用消费品种类种科技国家监督抽查建筑与装饰装修材料种类种科技国家监督抽查农业生产资料种类种科技国家监督抽查工业生产资料种类种科技国家监督抽查企业家科技国家监督抽…

Dns_在Ubuntu和Centos上安装并配置Dns服务器

Dns_在Ubuntu和Centos上安装并配置Dns服务器 一、Ubuntu上安装Dns1.安装 BIND92.配置 DNS 服务器3.配置防火墙(如果启用 UFW)4.在客户端使用 DNS 服务器5.测试 DNS 服务器6.常见问题及解决方案 二、Centos上安装Dns 以下记录在Ubuntu和Centos系统上安装D…

软工毕设开题建议

文章目录 🚩 1 前言1.1 选题注意事项1.1.1 难度怎么把控?1.1.2 题目名称怎么取? 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢? 🚩2 选题概览🚩 3 项目概览题目1 : 深度学习社…

一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)

1. 背景介绍 如果你拿到了两台8卡A100的机器(做梦),你的导师让你学习部署并且训练不同尺寸的大模型,并且写一个说明文档。你意识到,你最需要学习的就是关于分布式训练的知识,因为你可是第一次接触这么多卡…

聚合值和非聚合值比较【SQL】

文章目录 聚合值和非聚合值比较背景可以在HAVING中使用的聚合条件如何实现与非聚合值的比较与非聚合值的特殊比较 聚合值和非聚合值比较 背景 在数据库中,聚合值和非聚合值通常不直接比较,因为它们的上下文和用途不同。聚合值是通过聚合函数计算出来的…

linx ,centos7 ,hadoop集群登录时免密登录注意点以及步骤

linx ,centos7 ,hadoop集群登录时免密登录注意点以及步骤 SSH 免密登陆 1,在配置ssh免密登陆之前,将master克隆3份slaves出来,然后验证其ip是否和上面所述一致,并使用Xshell连接,这样我们可以得到额外的三台机器&…

【数据仓库】数据仓库面试题

简单整理了一下题目和答案,希望对大家有所帮助。 第一面:基础技术与概念 什么是ETL?请解释ETL过程中的每个步骤。 ETL是Extract, Transform, Load的缩写,用于描述将数据从源系统提取、转换为适合分析的形式、最后加载到目标系统的…

使用vscode拉取release远程分支,发现没有这个分支,但是远程仓库里确确实实有,是因为没有及时更新远程仓库分支导致

今天在开发过程中,需要从release分支上拉取代码重新拉个分支开发,方便后面迭代更新。但是我在vscode里点击分支,发现没有远程分支release/v1.0.0,但是仓库里确确实实有这个分支。然后我就上网查有类似的情况,参考别人是…

ANSI C、ISO C、POSIX标准、GNU的含义

一、基本概念 ISO: International Organization for Standardization,国际标准组织 ANSI: American National Standards Institute,美国国家标准协会 GNU:GNUs Not Unix,为了实现自由开源目的一个基金会 POSIX: Portable Oper…

74页PPT智能工厂整体规划方案

▲关注智慧方案文库,学习9000多份最新解决方案,其中 PPT、WORD超过7000多份 ,覆盖智慧城市多数领域的深度知识社区,稳定更新4年,日积月累,更懂行业需求。 智能工厂的定义 根据《智能工厂通用技术要求》的…

【个人记录】新电脑的配置截图和电源选项的修改

核心硬件评测: 硬件参数: #修改的电源设置# 电源选项-编辑计划设置-修改的设置: 电源选项-关闭盖子时-修改的设置:

MapStruct浅尝

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…

一文掌握异步web框架FastAPI(七)-- 安全(XSS 和 CSRF 防护、权限和角色控制、审计日志、使用安全的随机数生成、API 文档保护、会话管理)

接上篇:一文掌握异步web框架FastAPI(六)-- 安全(HTTP验证、Bearer Token、Session、OAuth2 和 OpenID Connect、HTTPS 和 TLS、速率限制)-CSDN博客 目录 九、安全 7、XSS 和 CSRF 防护 1)XSS防护 2)CSRF防护 8、安全的数据存储 9、环境变量管理 10、权限和角色控…

Redis 命令集 (超级详细)

目录 Redis 常用命令集 string类型 hash类型 list类型 set类型 zset类型 bitmap 类型 geo 类型 GEOADD (添加地理位置的坐标) GEOPOS (获取地理位置的坐标) GEODIST (计算两个位置之间的距离) GEOHASH (返回一个或多个位置对象的 geohash 值) GEORADIUS (根据用户…

LeetCode_2413. 最小偶倍数_java

1、问题 2413. 最小偶倍数https://leetcode.cn/problems/smallest-even-multiple/给你一个正整数 n &#xff0c;返回 2 和 n 的最小公倍数&#xff08;正整数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 5 输出&#xff1a;10 解释&#xff1a;5 和 2 的最小公倍…

PDF工具类源码

PDF-Guru: PDF Guru Anki是一款以PDF为中心的多功能办公学习工具箱软件&#xff0c;包含四大板块功能&#xff1a;PDF实用工具箱、Anki制卡神器、Anki最强辅助、视频笔记神器&#xff0c;软件功能众多且强大&#xff0c;熟练运用可以大幅提高办公和学习效率&#xff0c;绝对是您…

在 MySQL 中,添加索引后,插入、更新和删除操作的性能通常会变慢的原因

在 MySQL 中&#xff0c;添加索引后&#xff0c;插入、更新和删除操作的性能通常会变慢。这是因为索引的存在增加了这些操作的复杂性和开销。 1. 索引维护成本 索引是一种数据结构&#xff0c;用于加速数据的查找。常见的索引类型包括 B-Tree 索引、哈希索引等。当插入、更新…