【机器学习】支持向量机(个人笔记)

文章目录

  • SVM 分类器的误差函数
    • 分类误差函数
    • 距离误差函数
    • C 参数
  • 非线性边界的 SVM 分类器(内核方法)
    • 多项式内核
    • 径向基函数(RBF)内核

源代码文件请点击此处!

SVM 分类器的误差函数

SVM 使用两条平行线,使用中心线作为参考系 L : w 1 x 1 + w 2 x 2 + b = 0 L: \ w_1x_1 + w_2x_2 + b = 0 L: w1x1+w2x2+b=0。我们构造两条线,一条在上面,一条在下面,分别为:

L + : w 1 x 1 + w 2 x 2 + b = 1 L − : w 1 x 1 + w 2 x 2 + b = − 1 L+: \ w_1x_1 + w_2x_2 + b = 1 \\ L-: \ w_1x_1 + w_2x_2 + b = -1 L+: w1x1+w2x2+b=1L: w1x1+w2x2+b=1

分类器由 L + L+ L+ L − L- L 组成。为训练 SVM,我们需要为由两条线组成的分类器构建一个误差函数,期望达成的目标有两个:

  • 两条线中的每一条都应尽可能对点进行分类。
  • 两条线应尽可能彼此远离。

误差函数表示如下:

误差 = 分类误差 + 距离误差 误差 = 分类误差 + 距离误差 误差=分类误差+距离误差

分类误差函数

( x 1 , x 2 ) (x_1, x_2) (x1,x2) 的预测函数为

y ^ = s t e p ( w 1 x 1 + w 2 x 2 + b ) \hat{y} = step(w_1x_1 + w_2x_2 + b) y^=step(w1x1+w2x2+b)

显然这是一个离散感知器,其中:

y = s t e p ( x ) = { 0 , x ≤ 0 1 , x > 0 y = step(x) = \begin{cases} 0, x \leq 0 \\ 1, x > 0 \end{cases} y=step(x)={0,x01,x>0

定义分类误差函数如下:

{ 0 , 错误分类 ∣ w 1 x 1 + w 2 x 2 + b ∣ , 正确分类 \begin{cases} 0, 错误分类 \\ |w_1x_1 + w_2x_2 + b|, 正确分类 \end{cases} {0,错误分类w1x1+w2x2+b,正确分类

例如,考虑标签为 0 0 0 的点 ( 4 , 3 ) (4,3) (4,3),两个感知器给出的预测为:

L + : y ^ = s t e p ( 2 x 1 + 3 x 2 − 7 ) = 1 L − : y ^ = s t e p ( 2 x 1 + 3 x 2 − 5 ) = 1 L+: \hat{y} = step(2x_1 + 3x_2 - 7) = 1 \\ L-: \hat{y} = step(2x_1 + 3x_2 - 5) = 1 L+:y^=step(2x1+3x27)=1L:y^=step(2x1+3x25)=1

可以看到两个感知器均预测错误,此时分类误差为:

∣ 2 x 1 + 3 x 2 − 7 ∣ + ∣ 2 x 1 + 3 x 2 − 5 ∣ = 22 |2x_1 + 3x_2 - 7| + |2x_1 + 3x_2 - 5| = 22 ∣2x1+3x27∣+∣2x1+3x25∣=22

距离误差函数

若两个线性方程如下:

L + : w 1 x 1 + w 2 x 2 + b = 1 L − : w 1 x 1 + w 2 x 2 + b = − 1 L+: \ w_1x_1 + w_2x_2 + b = 1 \\ L-: \ w_1x_1 + w_2x_2 + b = -1 L+: w1x1+w2x2+b=1L: w1x1+w2x2+b=1

根据两条平行直线间的距离公式:

d = ∣ C 1 − C 2 ∣ A 2 + B 2 d = \frac{|C_1 - C_2|}{\sqrt{A^2 + B^2}} d=A2+B2 C1C2

则这两条平行线的垂直距离为:

d = 2 w 1 2 + w 2 2 d = \frac{2}{\sqrt{w_1^2 + w_2^2}} d=w12+w22 2

此为距离误差。注意到,当 w 1 2 + w 2 2 w_1^2 + w_2^2 w12+w22 很大时, d d d 很小;当 w 1 2 + w 2 2 w_1^2 + w_2^2 w12+w22 很小时, d d d 很大。因此 w 1 2 + w 2 2 w_1^2 + w_2^2 w12+w22 是一个很好的误差函数。

C 参数

很多时候我们希望 SVM 分类器能侧重于分类误差或距离误差其中一个方面,那么我们可以使用 C 参数:

误差 = C ⋅ 分类误差 + 距离误差 误差 = C \cdot 分类误差 + 距离误差 误差=C分类误差+距离误差

C 参数如何控制两者的呢?

  • C 很大:误差公式以分类误差为主,SVM 分类器更侧重于对点进行正确分类;
  • C 很小:误差公式以距离误差为主,SVM 分类器更侧重于保持线之间的距离。

下面是一个例子:

svm_c_001 = SVC(kernel='linear', C=0.01)
svm_c_001.fit(features, labels)svm_c_100 = SVC(kernel='linear', C=100)
svm_c_100.fit(features, labels)

上图为 C=0.01 的情况,下图为 C=100 的情况:

在这里插入图片描述

在这里插入图片描述

非线性边界的 SVM 分类器(内核方法)

多项式内核

  • 在变量 x 1 , x 2 x_1, x_2 x1,x2 使用 2 阶多项式内核,就需要计算这些单项式: x 1 , x 2 , x 1 2 , x 1 x 2 , x 2 2 x_1, x_2, x_1^2, x_1x_2, x_2^2 x1,x2,x12,x1x2,x22,然后尝试把它们线性组合起来,比如通过检查发现这是一个有效的分类器公式: x 1 2 + x 2 2 = 1 x_1^2 + x_2^2 = 1 x12+x22=1
  • 这相当于将二维平面映射到一个五维平面,即点 ( x 1 , x 2 ) (x_1, x_2) (x1,x2) 到点 ( x 1 , x 2 , x 1 2 , x 1 x 2 , x 2 2 ) (x_1, x_2, x_1^2, x_1x_2, x_2^2) (x1,x2,x12,x1x2,x22) 的映射
  • 类似地,在变量 x 1 , x 2 x_1, x_2 x1,x2 使用 3 阶多项式内核,就需要计算这些单项式: x 1 , x 2 , x 1 2 , x 1 x 2 , x 2 2 , x 1 3 , x 1 2 x 2 , x 1 x 2 2 , x 2 3 x_1, x_2, x_1^2, x_1x_2, x_2^2, x_1^3, x_1^2x_2, x_1x_2^2, x_2^3 x1,x2,x12,x1x2,x22,x13,x12x2,x1x22,x23,然后尝试把它们线性组合起来,通过检查发现一个有效的分类器公式

代码如下:

svm_degree_2 = SVC(kernel='poly', degree=2)
svm_degree_2.fit(features, labels)
print("[Degree=2] Accuracy=", svm_degree_2.score(features, labels))svm_degree_4 = SVC(kernel='poly', degree=4)
svm_degree_4.fit(features, labels)
print("[Degree=4] Accuracy=", svm_degree_4.score(features, labels))

当分类器为 2 阶多项式的运行结果:

在这里插入图片描述

当分类器为 4 阶多项式的运行结果:

在这里插入图片描述

径向基函数(RBF)内核

径向基函数:

  • 当变量只有一个时,最简单的径向基函数为 y = e − x 2 y = e^{-x^2} y=ex2,此函数看起来像标准正态分布,函数凸起处为 x = 0 x=0 x=0
  • 当变量有 2 个时,最简单的径向基函数为 z = e − ( x 2 + y 2 ) z = e^{-(x^2 + y^2)} z=e(x2+y2),此函数看起来像标准正态分布,函数凸起处为 ( 0 , 0 ) (0,0) (0,0)
  • 当变量有 n n n 个时,基本径向基函数为 y = e − ( x 1 2 + . . . + x n 2 ) y = e^{-(x_1^2 + ... + x_n^2)} y=e(x12+...+xn2) n n n 维凸点以 0 为中心
  • 若希望以点 ( p 1 , . . . , p n ) (p_1, ..., p_n) (p1,...,pn) 为中心凸起,则基本径向基函数为 y = e − [ ( x 1 − p 1 ) 2 + . . . + ( x n − p n ) 2 ] y = e^{-[(x_1-p_1)^2 + ... + (x_n-p_n)^2]} y=e[(x1p1)2+...+(xnpn)2]
  • 添加 γ \gamma γ 参数: y = e − γ [ ( x 1 − p 1 ) 2 + . . . + ( x n − p n ) 2 ] y = e^{-\gamma[(x_1-p_1)^2 + ... + (x_n-p_n)^2]} y=eγ[(x1p1)2+...+(xnpn)2],用于控制拟合程度(形象理解,即调整凸起程度
    • γ \gamma γ 值非常小时,模型会欠拟合
    • γ \gamma γ 值非常大时,模型会严重过拟合,合适的 γ \gamma γ 值非常重要

相似度公式:

  • 对于点 p p p 和点 q q q 相似度 ( p , q ) = e − 距离 ( p , q ) 2 相似度(p,q) = e^{-距离(p,q)^2} 相似度(p,q)=e距离(p,q)2
  • 一维数据集中,点 x 1 x_1 x1 和点 x 2 x_2 x2 的相似度为 e − ( x 1 − x 2 ) 2 e^{-(x_1-x_2)^2} e(x1x2)2
  • 二维数据集中,点 A ( x 1 , y 1 ) A(x_1, y_1) A(x1,y1) 和点 B ( x 2 , y 2 ) B(x_2, y_2) B(x2,y2) 的相似度为 e − [ ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 ] e^{-[(x_1-x_2)^2 + (y_1-y_2)^2]} e[(x1x2)2+(y1y2)2]
  • 若该数据集有 n n n 个数据点,则应计算 n 2 n^2 n2 个相似度;每个点到自身的相似度一定为 1;距离越近,相似度越高

有了相似度公式,就可以定义分类器了。假设数据集有 n n n 个数据点 X i X_i Xi,每个点对应标签 L i L_i Li(取值为 0 或 1),则对于点 X X X 的分类预测如下:

y ^ = s t e p [ ∑ i = 1 n ( − 1 ) L i − 1 ⋅ e − 距离 ( X , X i ) 2 ] \hat{y} = step[\sum^n_{i=1} (-1)^{L_i - 1} \cdot e^{-距离(X, X_i)^2}] y^=step[i=1n(1)Li1e距离(X,Xi)2]

形象理解:这相当于在一个二维平面上,为标记为 0 的点添加了一个“山谷”,为标记为 1 的点添加了一个“山峰”。对每个点都如此操作,最后使用阈值 0 画出一个“海岸线”,这就是最后的分类边界(boundary)。

代码如下:

svm_gamma_01 = SVC(kernel='rbf', gamma=0.1)
svm_gamma_01.fit(features, labels)
print("[Gamma=0.1] Accuracy=", svm_gamma_01.score(features, labels))svm_gamma_1 = SVC(kernel='rbf', gamma=1)
svm_gamma_1.fit(features, labels)
print("[Gamma=1] Accuracy=", svm_gamma_1.score(features, labels))svm_gamma_10 = SVC(kernel='rbf', gamma=10)
svm_gamma_10.fit(features, labels)
print("[Gamma=10] Accuracy=", svm_gamma_10.score(features, labels))svm_gamma_100 = SVC(kernel='rbf', gamma=100)
svm_gamma_100.fit(features, labels)
print("[Gamma=100] Accuracy=", svm_gamma_100.score(features, labels))

γ = 0.1 \gamma=0.1 γ=0.1 时的运行结果:
在这里插入图片描述

γ = 1 \gamma=1 γ=1 时的运行结果:

在这里插入图片描述

γ = 10 \gamma=10 γ=10 时的运行结果:

在这里插入图片描述

γ = 100 \gamma=100 γ=100 时的运行结果:

在这里插入图片描述

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

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

相关文章

基于flask的网站如何使用https加密通信

文章目录 内容简介网站目录示例生成SSL证书单独使用Flask使用WSGI服务器Nginx反向代理参考资料 内容简介 HTTPS 是一种至关重要的网络安全协议,它通过在 HTTP 协议之上添加 SSL/TLS 层来确保数据传输的安全性和完整性。这有助于防止数据在客户端和服务器之间传输时…

高考志愿专业选择:计算机人才需求激增,人工智能领域成热门

随着2024年高考的落幕,数百万高三学生站在了人生新的十字路口,面临着一个重要的抉择:选择大学专业。这一选择不仅关乎未来四年的学习生涯,更可能决定一个人一生的职业方向和人生轨迹。在众多专业中,计算机相关专业因其…

如何用Xinstall CPS结算系统打破传统营销桎梏,实现用户增长?

在互联网流量红利逐渐衰退的今天,App推广和运营面临着前所未有的挑战。如何快速搭建起满足用户需求的运营体系,成为了众多企业急待解决的问题。而在这个关键时刻,Xinstall CPS结算系统应运而生,以其独特的优势帮助企业解决了一系列…

深度学习500问——Chapter11:迁移学习(2)

文章目录 11.2 迁移学习的基本思路有哪些 11.2.1 基于样本迁移 11.2.2 基于特征迁移 11.2.3 基于模型迁移 11.2.4 基于关系迁移 11.2 迁移学习的基本思路有哪些 迁移学习的基本方法可以分为四种。这四种基本方法分别是:基于样本的迁移,基于模型的迁移&a…

Sa-Token鉴权与网关服务实现

纠错: 在上一部分里我完成了微服务框架的初步实现,但是先说一下之前有一个错误,就是依赖部分 上次的学习中我在总的父模块下引入了spring-boot-dependencies(版本控制)我以为在子模块下就不需要再引用了,…

Opencv图像梯度计算

Opencv图像梯度计算 Sobel算子 可以理解为是做边缘检测的一种方法。 首先说明自己对图像梯度的简单理解:简单理解就是图像的颜色发生变化的边界区域在X方向和Y方向上的梯度值 Gx Gy 而Gx和Gy处的梯度的计算—使用下面的公式来进行计算。 G x [ − 1 0 1 − 2 0 …

【计算机毕业设计】258基于微信小程序的课堂点名系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

总结【GetHub的WebAPI,ASSET_ID】,【Linux的jq命令】(草稿版+实际操作)

目录 1.介绍一下github中的 asset_id 2. GitHub 的 asset_id相关操作 2.1.获取特定 repository 的 release 列表: 2.2.获取特定 release 中的 asset 列表,并找到 asset_id: 2.3.使用ASSET_ID获取资材 3.返回的 assets 的信息 是什么样样…

【STM32CubeIDE -使用-调试过程中-遇到的“弹窗”报错问题-部分总结-处理方式】

【STM32CubeIDE -使用-调试过程中-遇到的“弹窗”报错问题-部分总结-处理方式】 1、前言2、软件环境问题1:Confirm Perspective Switch(确认视角切换)(1)问题描述:This kind of launch is configured to open the Debu…

14、modbus poll 使用教程小记1

开发平台:Win10 64位 Modbus Slave版本:64位 7.0.0 Modbus Poll版本:64位 7.2.2 因为项目中经常会用到modbus协议,所以就避免不了的要使用modbus测试工具,Modbus Slave/Poll无疑是众多测试工具中应用最广泛的。 文章目…

C语言的数据结构:串、数组、广义表

一、串 1、串的定义 串是一个线性表,但其节点中的内容只能为字符,所以也称为字符串。 字符串中可以有多个字符,也可以没有字符。没有字符的叫作:空串。 空串:""。 有值的串:"1123"。 只…

yolov3 详解

文章目录 1、yolov3原理2、损失函数3、yolov3改进4、使用opencv实现yolov35、卷积神经网络工作原理 1、yolov3原理 参考视频 darknet53:52个卷积层和1个全联接层 输入图像为416416 1313 -》 下采样32倍 2626 -》 下采样16倍 5252 -》 下采样8倍 由标注框中心点落在…

13600KF+3060Ti,虚拟机安装macOS 14,2024年6月

距离上次装macOS虚拟机已经有一段时间了,macOS系统现在大版本升级的速度也是越来越快了,由于Office只支持最新三个版本的macOS,所以现在保底也得安装macOS 12了,我这次是用macOS 14做实验,13和12的安装方式和macOS 14一…

eNSP学习——PPP的认证

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置PPP的PAP认证 4、配置PPP的CHAP认证 主要命令 //设置本端的PPP协议对对端设备的认证方式为 PAP,认证采用的域名为huawei [R3]int s4/0/0 [R…

Android 14 系统启动流程 之 启动init进程、启动Zygote进程

Android 14 系统启动流程 之 启动init进程、启动Zygote进程 废话不多说,先上图,不清楚的可以在评论区留言。

【论文阅读】-- 时态合并树状图:时态标量数据的基于拓扑的静态可视化

时态合并树状图:时态标量数据的基于拓扑的静态可视化 摘要1 引言2 相关工作及背景介绍2.1 增广合并树2.2 (增强)合并树的可视化与跟踪2.3 特征跟踪2.4 数据线性化 3 时间合并树状图3.1 映射单个时间步长: R d → R R^d \rightarrow R Rd→R3.2 映射所有时…

python:faces swap

# encoding: utf-8 # 版权所有 2024 涂聚文有限公司 # 许可信息查看:pip install boost # 描述:pip install boost # pip install dlib # pip install cmake3.25.2 # pip install dlib19.24.2 如果安装不上,按此法 # Author : geovindu,G…

实用软件下载:MathType最新安装包及详细安装教程

MathType是强大的数学公式编辑器,与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号,可用在编辑数学试卷、书籍、报刊、论文、幻灯演示等方面,是编辑数学资料的得力工具。MathType与常见文字处理…

【乐吾乐2D可视化组态编辑器】条件变化,触发告警动画

条件触发告警动画 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.com/ 如图所示,左侧文本图元数值一直在变化,当数值大于等于50的时候,右侧矩形图元执行告警动画,当数值小于50的时候,右侧图元恢复正常。…

【Spring EL<二>✈️✈️ 】SL 表达式结合 AOP 注解实现鉴权

目录 🍻前言 🍸一、鉴权(Authorization) 🍺二、功能实现 2.1 环境准备 2.2 代码实现 2.3 测试接口 🍹三、测试功能 3.1 传递 admin 请求 ​ 3.2 传递普通 user 请求 🍻四、章末 &a…