python学智能算法(二十三)|SVM-几何距离

引言

前序学习文章中,已经探究了电荷超平面的距离计算方法,相关文章为点与超平面的距离。
在这片文章中,我们了解到计算距离的公式:
F=min⁡i=1...myi(w⋅xi+b)F=\min_{i=1...m}y_{i}(w\cdot x_{i}+b)F=i=1...mminyi(wxi+b)

计算点与超平面的距离

对此,可以书写代码进行计算:

# 引入numpy模块
import numpy as np# 定义example_functional_margin()函数
def example_functional_margin(w,b,x,y):# 先对w和x两个参数执行点击运算,然后添加偏置量b后与y相乘result = y*(np.dot(w,x)+b)return result# 定义functional_margin()函数
def functional_margin_array(w,b,X,y):# 直接调用example_functional_margin()函数,按照枚举函数的顺序,逐个计算return np.array([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])# 定义functional_margin()函数
def functional_margin(w,b,X,y):# 直接调用example_functional_margin()函数,按照枚举函数的顺序,逐个计算return np.min([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])x=np.array([[1,1],[2,2]])
y=1b_1=5
w_1=np.array([2,1])w_2=w_1*10
b_2=b_1*10# 所有结果均输出
print(functional_margin_array(w_1,b_1,x,y))
print(functional_margin_array(w_2,b_2,x,y))
# 最小结果输出
print(functional_margin(w_1,b_1,x,y))
print(functional_margin(w_2,b_2,x,y))

代码运行效果为:
距离计算效果
在上述代码中,我们会有一个发现:在向量x不改变的前提下,如果等比率调整权重向量w和偏置量b,获得的距离F也会等比率变化。而对于超平面计算公式w⋅x+b=0w\cdot x+b=0wx+b=0
w和x无论扩大多少倍,公式依然成立。
因此,必须进一步修正点与超平面的计算公式,消除w和b按比率变化的影响。

点与超平面距离公式修正

在先前的学习进程中,通过向量的值和方向我们已经掌握方向向量的计算方法:
w=(w1∥w∥,w2∥w∥)w=(\frac{w_{1}}{\left \| w \right \|},\frac{w_{2}}{\left \| w \right \|})w=(ww1,ww2)由上式可知,方向向量是一个单位向量,一个向量无论放大多少倍,方向向量都不会改变。

因此,合理的点与超平面计算公式应当回归到将w转化为单位向量,使得所有计算基准统一,定义此时的距离为几何距离δ:δ=min⁡i=1...myi(w∥w∥⋅x+b∥w∥)\delta =\min_{i=1...m}y_{i}(\frac{w}{\left \| w \right \|}\cdot x+\frac{b}{\left \| w \right \|})δ=i=1...mminyi(wwx+wb)
δ的计算和F最大的不同在于:将权重向量统一为单位向量。
此时再次计算点与超平面的距离时就不用担心权重向量w和偏置量b的取值。

# 引入numpy模块
import numpy as np# 定义example_functional_margin()函数
def example_functional_margin(w,b,x,y):# 先对w和x两个参数执行点击运算,然后添加偏置量b后与y相乘result = y*(np.dot(w,x)+b)return result# 定义functional_margin()函数
def functional_margin_array(w,b,X,y):# 直接调用example_functional_margin()函数,按照枚举函数的顺序,逐个计算return np.array([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])# 定义functional_margin()函数
def functional_margin(w,b,X,y):# 直接调用example_functional_margin()函数,按照枚举函数的顺序,逐个计算return np.min([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])x=np.array([[1,1],[2,2]])
y=1b_1=5
w_1=np.array([2,1])w_2=w_1*10
b_2=b_1*10# 所有结果均输出
print(functional_margin_array(w_1,b_1,x,y))
print(functional_margin_array(w_2,b_2,x,y))
# 最小结果输出
print(functional_margin(w_1,b_1,x,y))
print(functional_margin(w_2,b_2,x,y))# 将计算基准转化为权重矩阵的单位向量
def example_functional_margin_unit_ector(w,b,x,y):unit=np.linalg.norm(w)result=y*(np.dot(w/unit,x)+b/unit)return result# 计算基于单位向量的距离
def geometric_margin(w,b,X,y):return np.array([example_functional_margin_unit_ector(w,b,x,y)for i,x in enumerate(X)])# 输出单位向量基准的距离
print(geometric_margin(w_1,b_1,x,y))
print(geometric_margin(w_2,b_2,x,y))

此时的计算结果为:
在这里插入图片描述

由计算效果可见,此时尽管w放大10倍,但计算获得的几何距离值不变。

总结

学习了几何距离的定义和计算。

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

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

相关文章

[每日随题11] 贪心 - 数学 - 区间DP

整体概述 难度:1000 →\rightarrow→ 1400 →\rightarrow→ 1600 P3918 [国家集训队] 特技飞行 标签:贪心 前置知识:无 难度:橙 1000 题目描述: 输入格式: 输出格式: 样例输入:…

Elasticsearch 9.x 搜索执行流程(源码解读)

1. 搜索执行流程概述 Elasticsearch的搜索执行是一个分布式过程,涉及协调节点和数据节点之间的多阶段交互 #mermaid-svg-QGh2GjrUKcs5jzQp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QGh2GjrUKcs5jzQp .error…

暑期训练8

E. G-C-D, Unlucky!题目要求判断是否存在一个长度为 n 的数组 a,使得p[i] 是 a[0..i] 的前缀 GCDs[i] 是 a[i..n-1] 的后缀 GCD思路前缀 GCD 非递增后缀 GCD 非递减首尾 GCD 一致桥梁条件成立对于每个位置 i,gcd(p[i], s[i1]) 必须等于整个数组的 GCD&am…

深入解析Hadoop HDFS高可用性:原理、故障切换与元数据同步

Hadoop HDFS高可用性(HA)概述在分布式存储领域,Hadoop分布式文件系统(HDFS)作为Hadoop生态系统的核心存储组件,其高可用性(HA)设计一直是架构师们关注的焦点。传统HDFS架构中,NameNode作为单一主节点管理整个文件系统的元数据,这种…

Freertos源码分析:任务创建/删除

任务创建/删除流程1.简介FreeRTOS 中任务创建通过 xTaskCreate() 或 xTaskCreateStatic() 实现。动态创建(xTaskCreate)会自动分配任务栈和TCB(任务控制块),静态创建(xTaskCreateStatic)需用户预…

warning: _close is not implemented and will always fail

相关问题: 一、undefined reference to _exit undefined reference to ‘end‘ warning: _close is not implemented and will always fail 一、环境: ubuntu24.04实体机、 arm-none-eabi-gcc gcc version 13.2.1 20231009 (15:13.2.rel1-2) 二…

MyBatis之缓存机制详解

MyBatis之缓存机制详解一、MyBatis缓存的基本概念1.1 缓存的核心价值1.2 MyBatis的两级缓存体系二、一级缓存(SqlSession级别缓存)2.1 工作原理2.2 实战案例:一级缓存演示2.2.1 基础用法(默认开启)2.2.2 一级缓存失效场…

云服务器搭建自己的FRP服务。为什么客户端的项目需要用Docker启动,服务端才能够访问到?

简单回答:在云服务器搭建FRP服务时,客户端项目用Docker启动并非必需,而是因为Docker的特性简化了配置: Docker通过端口映射(如-p 本地端口:容器端口)能固定项目对外暴露的端口,减少本地端口冲突…

6 STM32单片机的智能家居安防系统设计(STM32代码+手机APP设计+PCB设计+Proteus仿真)

系列文章目录 文章目录 系列文章目录前言1 资料获取与演示视频1.1 资料介绍1.2 资料获取1.3 演示视频 2 系统框架3 硬件3.1 主控制器3.2 显示屏3.3 WIFI模块3.4 DHT11温湿度传感器3.5 烟雾/燃气传感器模块:MQ-23.6 火焰传感器3.7 门磁模块MC-38 4 设计PCB4.1 安装下…

DevOps落地的终极实践:8大关键路径揭秘!

本文来自腾讯蓝鲸智云社区用户: CanWay当前,DevOps因其能够降低IT运营成本、提高软件质量并加快上市时间的能力而在全球范围内引起广泛关注。它打破了传统软件开发与运营的界限,消除了新功能发布延迟和软件质量下降的障碍。DevOps通过实施持续集成、持续…

react - 根据路由生成菜单

后端返回菜单的格式menuList:[{index: true,name: "",component: "../views/Home",meta: { title: "首页", requiresAuth: true,roles:[user]},},{path: "/admin",name: "admin",meta: { title: "管理页", roles:…

Window延迟更新10000天配置方案

1.点击"开始"菜单,搜索"注册表编辑器",点击"打开"。2.找到"\HKEY LOCAL MACHINE\SOFTWARE\Microsoft\WindowsUpdate\Ux\Settings"路径。3.右面空白处右键新建一个32位值,命名为FlightSettingsMaxPau…

【OD机试】人民币转换

题目描述 将阿拉伯数字金额转换为中文大写金额格式,需遵循以下规则: 1、 前缀要求:中文大写金额前必须标明“人民币”字样。 2、 用字规范:使用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样。 3、 “整”字规则: 金额到“元”为止…

在ajax中什么时候需要将返回值类型做转换

$.ajax({url: TMSPROC0050/deleteData?accidentIds accidentIds.join(,),type: DELETE,dataType: json,success: function(result) {$(#accidentGrid).datagrid(reload);$.messager.show({title: 成功,msg: result.message})},error: function(result) {$.messager.alert({ti…

Helm常用命令大全(2025最新版)

文章目录Helm常用命令大全(2025最新版)一、基础命令与环境配置版本与帮助信息安装与升级HelmLinux系统安装版本升级注意事项二、仓库管理命令仓库基础操作OCI仓库支持(v3.8新特性)三、Chart操作命令Chart创建与打包Chart搜索与下载…

gitlab+jenkins

文章目录架构gitlab和jenkins安装jenkins配置gitlab配置jenkins与gitlab联动参考架构 gitlab和jenkins安装 部署docker 部署jenkins 启动jenkins 用户:admin,对应的密码如下 点击安装自定义推荐的插件 安装gitlab插件 jenkins配置 配置pipline…

Redis字符串操作指南:从入门到实战应用

Redis作为一款高性能的键值存储数据库,其字符串(String)类型是最基础也最常用的数据类型。它不仅能存储简单的文本信息,还能应对数字计算、二进制数据等多种场景,灵活且高效。接下来,我们就全方位剖析Redis…

SQLite 数据库字段类型-详细说明,数据类型详细说明。

SQLite 数据类型 SQLite字段类型详细说明,包含存储类、亲和类型、布尔类型、日期时间类型的存储方式、取值范围及核心特性。 创建 SQLite3 表时可使用的各种数据类型名称,同时也介绍了相应的亲和类型。 一、核心存储类(Storage Classes&am…

Node.js特训专栏-实战进阶:17.会话管理与安全存储

🔥 欢迎来到 Node.js 实战专栏!在这里,每一行代码都是解锁高性能应用的钥匙,让我们一起开启 Node.js 的奇妙开发之旅! Node.js 特训专栏主页 专栏内容规划详情 会话管理与安全存储:从原理到实战的Web安全实践 在Web应用中,会话(Session)是维持用户状态的核心机制—…

【橘子分布式】gRPC(编程篇-中)

一、简介 我们之前已经完成了对于api模块的开发,也就是已经生成了基础的类和对应的接口,现在我们需要完成的是client和server端的开发。其实如同thrift一样,现在要做的就是实现我们之前定义的service里面的hello方法,里面写我们的…