【机器学习】支持向量机SVM入门

优化目标

相较于之前学习的线性回归和神经网络,支持向量机(Supprot Vector Machine,简称SVM)在拟合复杂的非线性方程的时候拥有更出色的能力,该算法也是十分经典的算法之一。接下来我们需要学习这种算法

首先我们回顾逻辑回归中的经典假设函数,如下图:

对于任意一个实例 ( x , y ) (x,y) (x,y),当y=1的时候,我们希望 h θ ( x ) ≈ 1 h_\theta(x)\approx1 hθ(x)1,也就是 θ T x > > 0 \theta^Tx>>0 θTx>>0;当y=0的时候,我们希望 h t h e t a ( x ) ≈ 0 h_theta(x)\approx0 htheta(x)0,也就是 θ T x < < 0 \theta^Tx<<0 θTx<<0。在这种情况下我们才认为算法预测正确了

在之前的学习中,我们了解到Logistics函数的方程如下:

逻辑回归
m i n θ 1 m [ ∑ i = 1 m y ( i ) ( − l o g h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ( − l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 λ θ j 2 \mathop{min}\limits_{\theta } \:\frac{1}{m} \left [ \sum_{i=1}^{m}y^{(i)}\left ( -log\:h_\theta (x^{( i)}) \right ) +(1-y^{(i)})\left ( -log(1-h_\theta (x^{(i)}) \right ) \right ]+\frac{\lambda }{2m}\sum_{j=1}^{\lambda }\theta _j^2 θminm1[i=1my(i)(loghθ(x(i)))+(1y(i))(log(1hθ(x(i)))]+2mλj=1λθj2

很明显,当y=1但是 h θ ( x ) ≈ 0 h_\theta(x)\approx0 hθ(x)0,或者y=0但是 h θ ( x ) ≈ 1 h_\theta(x)\approx1 hθ(x)1,因为这意味着逻辑回归的假设函数做出了错误的假设,代价函数应该狠狠地惩罚它

对比原来的逻辑回归,SVM的公式如下:
m i n θ C ∑ i = 1 m [ y ( i ) c o s t 1 ( θ T x ( i ) ) + ( 1 − y ( 1 ) ) c o s t 0 ( θ T x ( i ) ) ] + 1 2 ∑ j = 1 n θ j 1 \mathop{min}\limits_{\theta } C\sum_{i=1 }^{m}\left [ y^{(i)}cost_1(\theta ^Tx^{(i)})+(1-y^{(1)})cost_0(\theta ^Tx^{(i)}) \right ] +\frac{1}{2}\sum_{j=1}^{n}\theta _j^1 θminCi=1m[y(i)cost1(θTx(i))+(1y(1))cost0(θTx(i))]+21j=1nθj1
很明显,前面的中括号是代价函数项,后面的是正则化项,在SVM中,使用参数 C C C来控制代价函数和正则化项之间的权重。
其中 c o s t 1 ( z ) cost_1(z) cost1(z)的图象是

c o s t 2 ( z ) cost_2(z) cost2(z)的图形是

这意味着当y=1的时候,我们会希望 θ x T ≥ 1 \theta\:x^T\geq1 θxT1,才能使代价函数cost较小。而当y=0的时候,我们会希望 θ x ≤ − 1 \theta\:x\leq-1 θx1。这样子我们在SVM的(-1,1)中建立了一个安全间距

大间距问题

对于一些间距较大的数据集,存在着多种划分方式,比如下面这种划分方式,虽然满足了条件,但是它的鲁棒性和泛化能力并出色

而下图这种划分方式显然比上面的好:划分边界和被划分的两个点集的距离是接近的,这个距离被称之为间距。显然,上图的划分方法间距就十分小,而下图的划分方式间距就比较大。

对于这些间距较大的数据集的划分,我们称之为大间距问题,而SVM可以很自然地处理大间距问题,将数据集划分成上图所示的样子,这使得SVM有优秀的鲁棒性,因此SVM有时候又称为大间距分类器。这也说明了SVM的划分方式:SVM会将点以最大间距进行分类。

注意:SVM在其参数C设置得十分大的时候会倾向于保持大间距,但是这会使得算法对异常点十分敏感

核函数

注:$||w||$表示一个向量的长度

假设在图上有三个点,分别是 l ( 1 ) l^{(1)} l(1), l ( 2 ) l^{(2)} l(2) l ( 3 ) l^{(3)} l(3),如下图所示

我们需要计算某个点x和着三个点的相似度,那么计算方法如下:
f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e x p ( − ∣ ∣ x − l ( 1 ) ∣ ∣ 2 2 σ 2 ) f_1=similarity(x,l^{(1)})=exp\left (-\frac{||x-l^{(1)}||^2}{2\sigma ^2}\right ) f1=similarity(x,l(1))=exp(2σ2∣∣xl(1)2)
f 2 = s i m i l a r i t y ( x , l ( 2 ) ) = e x p ( − ∣ ∣ x − l ( 2 ) ∣ ∣ 2 2 σ 2 ) f_2=similarity(x,l^{(2)})=exp\left (-\frac{||x-l^{(2)}||^2}{2\sigma ^2}\right ) f2=similarity(x,l(2))=exp(2σ2∣∣xl(2)2)
f 3 = s i m i l a r i t y ( x , l ( 3 ) ) = e x p ( − ∣ ∣ x − l ( 3 ) ∣ ∣ 2 2 σ 2 ) f_3=similarity(x,l^{(3)})=exp\left (-\frac{||x-l^{(3)}||^2}{2\sigma ^2}\right ) f3=similarity(x,l(3))=exp(2σ2∣∣xl(3)2)
其中 ∣ ∣ x − l ( i ) ∣ ∣ 2 ||x-l^{(i)}||^2 ∣∣xl(i)2是x到 l ( 1 ) l^{(1)} l(1)的欧氏距离

上面所示的 s i m i l a r i t y similarity similarity函数是其中一种核函数,被称之为高斯核函数,可以写作 k ( x , l ( i ) ) = e x p ( − ∣ ∣ x − l ( i ) ∣ ∣ 2 2 σ 2 ) k(x,l^{(i)})=exp\left (-\frac{||x-l^{(i)}||^2}{2\sigma ^2}\right ) k(x,l(i))=exp(2σ2∣∣xl(i)2)
分析这个核函数,当 x ≈ l ( 1 ) x\approx l^{(1)} xl(1)的时候, ∣ ∣ x − l ( i ) ∣ ∣ 2 ≈ 0 ||x-l^{(i)}||^2\approx0 ∣∣xl(i)20,那么 k ( x , l ( 1 ) ) ≈ e x p ( 0 ) = 1 k(x,l^{(1)})\approx exp(0)=1 k(x,l(1))exp(0)=1;当x和 l ( i ) l^{(i)} l(i)距离很远的时候,由于其欧氏几何距离变得很大,那么 k ( x , l ( i ) ) = e x p ( − ∣ ∣ x − l ( i ) ∣ ∣ 2 2 σ 2 ) = e x p ( − L a r g e N u m b e r 2 σ 2 ) ≈ 0 k(x,l^{(i)})=exp\left (-\frac{||x-l^{(i)}||^2}{2\sigma ^2}\right )=exp\left (-\frac{Large Number}{2\sigma ^2}\right )\approx0 k(x,l(i))=exp(2σ2∣∣xl(i)2)=exp(2σ2LargeNumber)0

接下来我们聚焦于参数 σ \sigma σ对整个核函数的影响,假设 l ( 1 ) l^{(1)} l(1)位于[3,5]

可以看到,当 σ \sigma σ比较小的时候,其图像变化的幅度更大;反之,其图像则比较平缓

回到最初的图像,如果我们希望如果一个实例x靠近 l ( 1 ) l^{(1)} l(1)或者 l ( 2 ) l^{(2)} l(2)的时候,我们就预测其y=1(比如当一张图片上具有某些猫类的特征的时候,我们希望机器学习算法将其分类为猫)。那具体应该怎么做呢?

设定一个假设函数 f ( x ) = θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 f(x)=\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3 f(x)=θ0+θ1f1+θ2f2+θ3f3,其中 f i = k ( x , l ( i ) ) f_i=k(x,l^{(i)}) fi=k(x,l(i)) 当 当 f(x)\geq0 的时候,我们预测 y = 1 。并且令 的时候,我们预测y=1。并且令 的时候,我们预测y=1。并且令\theta_0-0.5, \theta_1=1,\theta_2=1,\theta_3=0$,那么会怎么样呢?

当x靠近 l ( 1 ) l^{(1)} l(1)的时候, f ( x ) = − 0.5 + 1 + 0 + 0 = 0.5 f(x)=-0.5+1+0+0=0.5 f(x)=0.5+1+0+0=0.5,因此我们预测其y=1;而当x靠近 l ( 2 ) l^{(2)} l(2)的时候, f ( x ) = − 0.5 + 0 + 1 + 0 = 0.5 f(x)=-0.5+0+1+0=0.5 f(x)=0.5+0+1+0=0.5,因此我们预测其y=1

神奇的来了,我们实际上可以画出一个非线性的边界(红线),在这个边界内 f ( x ) ≥ 0 f(x)\geq0 f(x)0,也就是意味着算法认为y=1

总而言之,通过高斯核函数可以衡量x到任意点的距离远近,而通过假设函数f(x)将若干个高斯核函数的计算集合在一块,规划出了一个非线性的边界。

使用SVM

现在已经很少人手搓SVM的 θ \theta θl了,正如很少人手搓一个数的平方根一样。但是在使用SVM的时候还是需要决定几个关键的参数。比如:

  • 选择需要使用的参数C
  • 选择SVM使用何种内核

比如不使用任何内核的SVM,称之为线性核函数。当你的实例拥有大量特征,但是训练集数量却不多的时候,可以使用线性SVM核函数来避免过拟合(此种情况也适合使用我们之前说的线性回归法)

另外一个策略是使用高斯核函数,上面已经介绍过了,高斯核函数如下:
f i = e x p ( − ∣ ∣ x − l ( i ) ∣ ∣ σ 2 ) , w h e r e l ( i ) = x ( i ) f_i=exp(-\frac{||x-l^{(i)}||}{\sigma ^2} ),where\:\: l^{(i)}=x^{(i)} fi=exp(σ2∣∣xl(i)∣∣),wherel(i)=x(i)这种情况下我们需要对参数 σ \sigma σ进行选择,如果 σ \sigma σ过小,那么得到一个高方差,低偏差的训练器;反之则是一个高偏差,低方差的训练器。当你的数据集数量很大,但是单个数据所拥有的特征量很少的时候,使用高斯核函数是一个不错的选择,因为它可以拟合出相当复杂的非线性决策边界

注意:使用高斯核函数之前,请对特征向量进行归一化,否则会导致在运算中各个特征向量权重不一致

除此之外,还有一些其他的核函数,此处只做简单介绍:
多项式核函数: k e r n a l ( x , l ) = ( x T l ) 2 kernal(x,l)=(x^Tl)^2 kernal(x,l)=(xTl)2x和l越靠近其内积越大
字符串核函数:用于处理文本的核函数
直方核函数

无监督学习

在无监督学习中,数据集不会含有对数据的标记,只包含数据的特征,也就是如下图:
在这里插入图片描述
我们可以看到Training Set中已经没有了 y y y,图上的点也没有了标记。而无监督算法的任务就是,找出这些点之间隐含的关系,比如说将上面的点集根据他们之间的距离分类为两个不同的集合。K-Means则是最广泛运用的聚类算法之一,接下来我们将会重点介绍它。

K-Means算法

以下图为例子:
在这里插入图片描述

假设我们想要将图上数据分类为两个簇,那么 我们首先要随机选取两个点作为聚类中心(一红一蓝),如下图所示:
在这里插入图片描述
接下来它们会重复做两件事:

  1. 簇分配
  2. 移动聚类中心

首先第一步是将各个点分配给簇。对于任意一个点,检查两个聚类中心和该点的距离,并且将点分配给距离较短的簇,分配的结果如下所示

接下来则是移动聚类中心,对于红聚类中心,我们计算所有红色点的横坐标平均值x1和纵坐标平均值y1,并且将红聚类中心移动到 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)处,对蓝聚类中心也进行同样的处理,可得到如下效果:

重复上述步骤若干次,会得到如下结果

此时所有数据都被分类完毕,而且再继续进行迭代,聚类中心也不会发生移动,此时我们认为K-Means已经聚合了。

接下来我们总结一下更加普遍的K-Means算法的执行流程:
输入:

  • 整数参数K:表示需要分为K个簇
  • 训练数据集 x ( 1 ) , x ( 2 ) , x ( 3 ) . . . x ( m ) , {x^{(1)},x^{(2)},x^{(3)}...x^{(m)},} x(1),x(2),x(3)...x(m),
  1. 随机初始化K个聚类中心 μ 1 , μ 2 . . . μ K \mu_1,\mu_2...\mu_K μ1,μ2...μK
  2. 重复迭代如下步骤:
    • 对于 x ( i ) , i ∈ ( 1 , m ) x^{(i)},\:i\in(1,m) x(i),i(1,m),求离 x ( i ) x^{(i)} x(i)最近的聚类中心 μ ( j ) \mu^{(j)} μ(j),并且将点 x ( i ) x^{(i)} x(i)归为簇 c ( j ) c^{(j)} c(j)
    • 对于 μ ( k ) , k ∈ ( 1 , K ) \mu^{(k)},\:k\in(1,K) μ(k),k(1,K),求簇 c ( k ) c^{(k)} c(k)中所有点的均值,并且将 μ ( k ) \mu^{(k)} μ(k)移动到该点

有意思的是,哪怕某个数据集中的数据没有明显的边界,聚类算法依旧能进行一定的划分,比如对于衣服尺寸和身高的数据集

K-Means的优化目标函数

优化目标函数能够确保K-Means算法最终得到的结果最佳,确保算法运行正确,也可以用于帮助K-Means避免局部最优解,开始之前,我们先规定几个符号:

  • c ( i ) c^{(i)} c(i):表示实例 x ( i ) x^{(i)} x(i)所属的簇
  • μ ( k ) \mu^{(k)} μ(k):表示第k个簇的聚类中心
  • μ c ( i ) \mu_c^{(i)} μc(i):表示实例 x ( i ) x^{(i)} x(i)所属的聚类中心

那么其优化目标函数为:
J ( c ( 1 ) . . . c ( m ) , μ 1 . . . μ k ) = 1 m ∑ i = 1 m ∣ ∣ x ( i ) − μ c ( i ) ∣ ∣ 2 J(c^{(1)}...c^{(m)},\mu_1...\mu_k)=\frac{1}{m}\sum_{i=1}^{m} ||x^{(i)}-\mu_c^{(i)}||^2 J(c(1)...c(m),μ1...μk)=m1i=1m∣∣x(i)μc(i)2
式子后面的 ∣ ∣ x ( i ) − μ c ( i ) ∣ ∣ 2 ||x^{(i)}-\mu_c^{(i)}||^2 ∣∣x(i)μc(i)2表示的是实例 x ( i ) x^{(i)} x(i)到其所属的簇的聚类中心的距离的平方
而我们需要做的是改变 c ( 1 ) . . . c ( m ) c^{(1)}...c^{(m)} c(1)...c(m) μ 1 . . . μ k \mu_1...\mu_k μ1...μk的值,使得 J ( c ( 1 ) . . . c ( m ) , μ 1 . . . μ k ) J(c^{(1)}...c^{(m)},\mu_1...\mu_k) J(c(1)...c(m),μ1...μk)最小

随机初始化

在初始化聚类中心的时候,上文只提到了随机选取若干个点作为聚类中心

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

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

相关文章

关于Docker的基本概念和使用

关于Docker的基本概念和使用 一、Docker 概述1、Dcker的概念2、容器的优势3、Docker与虚拟机的区别4、容器在内核中支持2种重要技术5、Docker核心概念 二、安装 Docker1、安装依赖包2、设置阿里云镜像源3、安装 Docker-CE并设置为开机自动启动3、查看 docker 版本信息4、docker…

AI智能化技术对项目管理的挑战与应对︱腾讯CSIG能源行业总经理王磊

腾讯CSIG能源行业总经理王磊先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;AI智能化技术对项目管理的挑战与应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 自从DALLE、Midjourney、…

linux升级mysql

linux升级mysql 一.介绍二.下载三.文件配置1.查找删除mysql2.解压配置 四.修改配置五.初始化mysql服务六.启动mysql七.配置数据库七.测试 一.介绍 由于最近业务需要&#xff0c;不得不将之前的mysql5.7.26升级到mysql8.0加了 Linux安装mysql&#xff08;5.7.26&#xff09;&…

flask结合mysql实现用户的添加和获取

1、数据库准备 已经安装好数据库&#xff0c;并且创建数据库和表 create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE TABLE admin( id int not null auto_increment primary key, username VARCHAR(16) not null, password VARCHAR(64) not null…

初识 Spring (存储和获取 bean)

目录 初识 Spring总结 DI&#xff08;依赖注入&#xff09;Spring 项目的创建创建一个 Maven 项目添加 Spring 框架支持添加启动类 存储 bean 对象创建 bean将 bean 注册到容器中 获取并使用 bean 对象获取 bean 的方法一获取 bean 的方法二获取 bean 的方法三 ApplicationCont…

(Chrome Ext)谷歌扩展程序-谷歌插件渗透测试方法记录

文章目录 前言一、本地获取谷歌插件/扩展程序源码二、工具化信息收集总结 前言 在工作岗位变更之后&#xff0c;越来越多“奇奇怪怪”的东西要去渗透和测试&#xff0c;在我之前干安服的时候&#xff0c;最多的就是测一下web&#xff0c;极少情况下测测app&#xff0c;但是现在…

根据UIL下载图片/视频、根据URL自动下载图片/视频、GUI自动下载想要的图片

1&#xff0c;根据UIL下载图片/视频 def downForInterface(file_path):count 1value_rows []with open(file_path, encodingUTF-8) as file:f_csv csv.reader(file)for r in f_csv:value_rows.append(r)for file_path in value_rows:cunmulu if . in file_path[0]:print(cu…

网页生成PDF表格诡异多出空白

环境&#xff1a; axios: 0.27.0 egg: 2.35.0 pdf-lib: 1.17.1 puppeteer-core: 17.1.3 node: 16.20.0 element-plus: 2.3.2 vue: 3.2.47 背景&#xff1a; 一个报告页面含有多个统计表格和描述文字&#xff0c;生成PDF用于下载查看&#xff0c;页面使用vue3element-plus…

用 Node.js 手写 WebSocket 协议

目录 引言 从 http 到 websocekt 的切换 Sec-WebSocket-Key 与 Sec-WebSocket-Accept 全新的二进制协议 自己实现一个 websocket 服务器 按照协议格式解析收到的Buffer 取出opcode 取出MASK与payload长度 根据mask key读取数据 根据类型处理数据 frame 帧 数据的发…

多种语言示例采集数据【淘宝天猫1688拼多多API系列】可高并发线程

长话短说&#xff0c;节约彼此宝贵时间&#xff0c;我们以淘宝商品详情数据为例&#xff1a; 请求方式&#xff1a;HTTPS POST GET 请求地址&#xff1a;https://o0b.cn/anzexi taobao.item_get 公共参数 名称类型必须描述技术交流18179014480keyString是调用key&#xf…

rust学习-智能指针

适用场景 有一个在编译时未知大小的类型&#xff0c;想在需要确切大小的上下文使用该类型值 示例1 无意义的例子&#xff1a;将一个单独的值存放在堆上并不是很有意义&#xff0c;b更应该放到栈上 fn main() {let b Box::new(5);// box 在 main 的末尾离开作用域时&#x…

[论文阅读笔记24]Social-STGCNN: A Social Spatio-Temporal GCNN for Human Traj. Pred.

论文: 论文地址 代码: 代码地址 作者在这篇文章中直接用GNN对目标的轨迹时空特征进行建模, 并用时序CNN进行预测, 代替了训练难度较大和速度较慢的RNN类方法. 0. Abstract 行人轨迹预测是一个比较有挑战性的任务, 有着许多的应用. 一个行人的轨迹不仅是由自己决定的, 而且受…

产品设计思考:如何平衡用户习惯和用户体验

在产品设计领域&#xff0c;平衡用户习惯与用户体验之间的关系是一个重要而复杂的任务。 用户习惯是指用户在长期使用产品过程中逐渐形成的一种行为模式&#xff0c;而用户体验则是用户在与产品交互时所感受到的整体感受。 在追求良好的用户体验的同时&#xff0c;还需要考虑用…

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题二 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑…

进阶级!美创暗数据发现和分类分级系统获中国信通院权威测评

近日&#xff0c;美创科技暗数据发现和分类分级系统顺利通过中国信通院“数据分类分级能力检验进阶级”认证&#xff0c;获颁数据安全产品检验证书。 数据分类分级进阶级评测通过主动探测识别率、被动探测识别率、用户相关数据识别准确率、分级标识准确率等技术指标的检测&…

AMEYA360代理线:ROHM开发出EcoGaN™减少服务器和AC适配器等的损耗和体积!

全球知名半导体制造商ROHM&#xff08;总部位于日本京都市&#xff09;面向数据服务器等工业设备和AC适配器等消费电子设备的一次侧电源*1&#xff0c;开发出集650V GaN HEMT*2和栅极驱动用驱动器等于一体的Power Stage IC“BM3G0xxMUV-LB”&#xff08;BM3G015MUV-LB、BM3G007…

【C++】继承

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

了解Unity编辑器之组件篇Video(二)

Video Player组件&#xff1a;用于在游戏中播放视频的组件。它提供了一系列属性来控制视频的播放、显示和交互。 1.Source&#xff08;视频源&#xff09;&#xff1a;用于指定视频的来源。可以选择两种不同的视频源类型&#xff1a; &#xff08;1&#xff09;Vieo Clip&#…

RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎,全网唯一)

全新RDIFramework.NET V6.0 CS敏捷开发框架发布&#xff0c;全网唯一支持.NET6&#xff0c;Framework双引擎&#xff0c;降低开发成本&#xff0c;提高产品质量&#xff0c;提升用户体验与开发团队稳定性&#xff0c;做软件就选RDIFramework.NET开发框架。 1、RDIFramework.NET…

《网络是怎样连接的》(二.1)

(83条消息) 《网络是怎样连接的》&#xff08;一&#xff09;_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第二章。 目录 &#xff08;1&#xff09;创建套接字 &#xff08;2&#xff09;连接服务器 &#xff08;3&#xff09;收发数据 &#xf…