当前位置: 首页 > news >正文

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.xdnf.cn/news/1143451.html

相关文章:

  • react控制react Popover组件显示隐藏
  • 【怜渠客】简单实现手机云控Windows电脑锁屏
  • 力扣面试150(33/150)
  • pytest + requests 接口自动化测试框架
  • UE 一些基础的python
  • AE MDX L6 L12 L18 电源手侧操作使用说明
  • 在git中同时配置gitcode和github访问权限
  • 40.限流规则
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件让课堂更高效安全
  • openinstall九周年:聚焦安全防御,护航业务持续增长
  • 注册表单案例
  • 低空感知技术
  • 服务端高并发方案设计
  • python学智能算法(二十四)|SVM-最优化几何距离的理解
  • git--gitlab
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - jieba库分词简介及使用
  • Python函数全解析:从基础到高阶实战
  • 无符号乘法运算的硬件逻辑实现 ————取自《湖科大教书匠》
  • 【面试】面试官:请举例回答Elasticsearch的数据模型有哪些核心概念?
  • VSCode - VSCode 快速跳转标签页
  • setTimeout、setInterval、requestAnimationFrame的使用以及区别
  • 广东省省考备考(第四十九天7.18)——资料分析(知识点回顾与练习)
  • centos7安装MySQL8.4手册
  • 产品需求文档(PRD)格式全解析:从 RP 到 Word 的选择与实践
  • 【服务器与部署 12】数据库生产环境部署实战:MySQL、PostgreSQL、Redis高可用配置全攻略
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件
  • uni-app 跳转页面传参
  • 图机器学习(13)——图相似性检测
  • 西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访庭田科技
  • OpenTelemetry学习笔记(四):OpenTelemetry 语义约定,即字段映射(1)