<支持向量机算法(SVM:Support Vector Machine)>——《机器学习算法初识》

news2024/9/27 12:07:31

目录

一、⽀持向量机(SVM)算法

1 SVM算法导⼊

2 SVM算法定义

2.1 定义

2.2 超平⾯最⼤间隔介绍

2.3 硬间隔和软间隔

2.3.1 硬间隔分类

2.3.2 软间隔分类

3 ⼩结

 二、 SVM算法api初步使⽤

三、 SVM算法原理

 1 定义输⼊数据

2 线性可分⽀持向量机

3 SVM的计算过程与算法步骤

3.1 推导⽬标函数

3.2 ⽬标函数的求解

3.2.1 拉格朗⽇乘⼦法

3.2.2 对偶问题

3.2.3 整体流程确定

 4 举例

5 ⼩结

四、 SVM的损失函数

1 SVM的主要三种损失函数

2 ⼩结

五、 SVM的核⽅法

1 什么是核函数

1.1 核函数概念

1.2 核函数举例

1.2.1 核⽅法举例1:

1.2.2 核⽅法举例2:

 2 常⻅核函数

2.1 常⻅核函数介绍

2.2 核函数指导选用规则

3 ⼩结

六、SVM回归

七、 SVM算法api再介绍

1 SVM算法api综述

2 SVC

 3 NuSVC

4 LinearSVC

5 ⼩结

八、 SVM总结

1 SVM基本综述

2 SVM优缺点


一、⽀持向量机(SVM)算法

  • 了解什么是SVM算法
  • 掌握SVM算法的原理
  • 知道SVM算法的损失函数
  • 知道SVM算法的核函数
  • 了解SVM算法在回归问题中的使⽤
  • 应⽤SVM算法实现⼿写数字识别器

1 SVM算法导⼊

引例:
⽤⼀根棍子分开两种颜⾊的球,要求:尽量在放更多球之后,仍然适⽤。
首先很容易区分两种颜色的球
然后继续增多球的数量
此时,已经有 ⼀个球无法使用一根棍子直接隔开,那么该如何做呢?
SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能⼤的间隙。
把区分使用的棍子变粗!
现在即使放了更多的球,棍仍然是⼀个好的分界线。
但是遇到其他情况呢?
从低维上升到高维!
把上⾯的物体起了别名:
—— data 」数据
棍⼦ —— classifier 」分类
最⼤间隙 —— optimization 」最优化
低维到高维—— kernelling 」核⽅法
高维中区分的平面—— hyperplane 」超平⾯
SVM直观感受:

2 SVM算法定义

2.1 定义

SVM SVM 全称是 supported vector machine (⽀持向量机),即寻找到⼀个超平⾯使样本分成两类,并且间隔最 ⼤。
SVM 能够执⾏线性或⾮线性分类、回归,甚⾄是异常值检测任务。它是机器学习领域最受欢迎的模型之⼀。 SVM 特别适⽤于中⼩型复杂数据集的分类。

2.2 超平⾯最⼤间隔介绍

上左图显示了三种可能的线性分类器的决策边界:
虚线所代表的模型表现⾮常糟糕,甚⾄都⽆法正确实现分类。其余两个模型在这个训练集上表现堪称完美,但是 它们的 决策边界与实例过于接近,导致在⾯对新实例时,表现可能不会太好
右图中的实线代表 SVM 分类器的决策边界 ,不仅分离了两个类别,且 尽可能远离最近的训练实例

2.3 硬间隔和软间隔

2.3.1 硬间隔分类
在上⾯我们使⽤超平⾯进⾏分割数据的过程中,如果我们严格地让所有实例都不在最⼤间隔之间,并且位于正确的⼀边,这就是硬间隔分类。
硬间隔分类有两个问题 ,⾸先,它只在 数据是线性可分离的时候才有效 ;其次, 它对异常值⾮常敏感
当有⼀个额外异常值的鸢尾花数据:左图的数据根本找不出硬间隔,⽽右图最终显示的决策边界与我们之前所看到的⽆异常值时的决策边界也⼤不相同,可能⽆法很好地泛化。
2.3.2 软间隔分类
 要避免这些问题,最好使⽤更灵活的模型。 ⽬标是尽可能在保持最⼤间隔宽阔和限制间隔违例(即位于最⼤间隔之上, 甚⾄在错误的⼀边的实例)之间找到良好的平衡 ,这就是软间隔分类。
要避免这些问题,最好使⽤更灵活的模型。⽬标是尽可能在保持间隔宽阔和限制间隔违例之间找到良好的平衡,这就是软间隔分类。
Scikit-Learn SVM 类中,可以通过超参数 C 来控制这个平衡: C 值越⼩,则间隔越宽,但是间隔违例也会越多。上图显示了在⼀个⾮线性可分离数据集上,两个软间隔SVM 分类器各⾃的决策边界和间隔。
左边使⽤了⾼ C 值,分类器的错误样本(间隔违例)较少,但是间隔也较⼩。
右边使⽤了低 C 值,间隔⼤了很多,但是位于间隔上的实例也更多。看起来第⼆个分类器的泛化效果更好,因为⼤多数间隔违例实际上都位于决策边界正确的⼀边,所以即便是在该训练集上,它做出的错误预测也会更少。

3 ⼩结

  • SVM算法定义
                寻找到⼀个超平⾯使样本分成两类,并且间隔最⼤。
  • 硬间隔和软间隔
        硬间隔
                只有在数据是线性可分离的时候才有效
                对异常值⾮常敏感
       软间隔
                尽可能在保持最⼤间隔宽阔和限制间隔违例之间找到良好的平衡

 二、 SVM算法api初步使⽤

>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='scale', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
在拟合后 , 这个模型可以⽤来预测新的值 :
>>> clf.predict([[2., 2.]])
array([1])

三、 SVM算法原理

  • 知道SVM中线性可分⽀持向量机
  • 知道SVM中⽬标函数的推导过程
  • 了解拉格朗⽇乘⼦法、对偶问题
  • 知道SVM中⽬标函数的求解过程

 1 定义输⼊数据

2 线性可分⽀持向量机

⼜⽐如说这样:

3 SVM的计算过程与算法步骤

3.1 推导⽬标函数

3.2 ⽬标函数的求解

到这⼀步,终于把⽬标函数给建⽴起来了。
那么下⼀步⾃然是去求⽬标函数的最优值 .
因为⽬标函数带有⼀个约束条件,所以 我们可以⽤拉格朗⽇乘⼦法求解
3.2.1 拉格朗⽇乘⼦法
拉格朗⽇乘⼦法 (Lagrange multipliers) ⼀种寻找多元函数在⼀组约束下的极值的⽅法 .
通过引⼊拉格朗⽇乘⼦,可将有 d 个变量与 k 个约束条件的最优化问题转化为具有 d + k 个变量的⽆约束优化问题求解。
这里希望通过⼀个直观简单的例⼦尽⼒解释拉格朗⽇乘⼦法和 KKT 条件的原理。
下⾯我们⽤拉格朗⽇乘⼦来求解这个最优解。
3.2.2 对偶问题
我们要将其转换为 对偶问题 ,变成极⼤极⼩值问题:
变为:
3.2.3 整体流程确定
我们⽤数学表达式来说明上⾯的过程:

 4 举例

5 ⼩结

 

四、 SVM的损失函数

  • 了解SVM的损失函数
  • 知道SVM中的Hinge损失函数

SVM的主要三种损失函数

2 ⼩结

SVM的损失函数

  • 0/1损失函数
  • Hinge损失函数
  • Logistic损失函数

五、 SVM的核⽅法

  • 知道SVM的核⽅法
  • 了解常⻅的核函数
SVM + 核函数】 具有极⼤威⼒。
核函数并不是 SVM 特有的,核函数可以和其他算法也进⾏结合,只是核函数与 SVM 结合的优势⾮常⼤。

1 什么是核函数

1.1 核函数概念

核函数,是将原始输⼊空间映射到新的特征空间,从⽽,使得原本线性不可分的样本可能在核空间可分
下图所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时该如何把这两类数据分开呢?

1.2 核函数举例

1.2.1 核⽅法举例1:
1.2.2 核⽅法举例2
  • 下⾯这张图位于第⼀、⼆象限内。我们关注红⾊的⻔,以及北京四合院这⼏个字和下⾯的紫⾊的字⺟。
  • 我们把红⾊的⻔上的点看成是“+”数据,字⺟上的点看成是“-”数据,它们的横、纵坐标是两个特征。
  • 显然,在这个⼆维空间内,“+”“-”两类数据不是线性可分的。
(前后轴为x轴,左右轴为y轴,上下轴为z轴)
  • 绿⾊的平⾯可以完美地分割红⾊和紫⾊,两类数据在三维空间中变成线性可分的了。
  • 三维中的这个判决边界,再映射回⼆维空间中:是⼀条双曲线,它不是线性的
  • 核函数的作⽤就是⼀个从低维空间到⾼维空间的映射,⽽这个映射可以把低维空间中线性不可分的两类点变成线性可分的。

 2 常⻅核函数

2.1 常⻅核函数介绍

 

  • 线性核和多项式核:
        这两种核的作⽤也是⾸先在属性空间中找到⼀些点,把这些点当做base ,核函数的作⽤就是找与该点距离和⻆度满⾜某种关系的样本点。
        当样本点与该点的夹⻆近乎垂直时,两个样本的欧式⻓度必须⾮常⻓才能保证满⾜线性核函数⼤于0 ;⽽当样本点与base 点的⽅向相同时,⻓度就不必很⻓;⽽当⽅向相反时,核函数值就是负的,被判为反类。即,它在空间上划分出⼀个梭形,按照梭形来进⾏正反类划分。
  • RBF核:
        ⾼斯核函数就是在属性空间中找到⼀些点,这些点可以是也可以不是样本点,把这些点当做base ,以这些base为圆⼼向外扩展,扩展半径即为带宽,即可划分数据。
        换句话说,在属性空间中找到⼀些超圆,⽤这些超圆来判定正反类。
  • Sigmoid核:
        同样地是定义⼀些base,
        核函数就是将线性核函数经过⼀个tanh 函数进⾏处理,把值域限制在了 -1 1 上。
 
总之,都是在定义距离,⼤于该距离,判为正,⼩于该距离,判为负。⾄于选择哪⼀种核函数,要根据具体的样本分布情况来确定。
  

2.2 核函数指导选用规则

1 ) 如果 Feature 的数量很⼤,甚⾄和样本数量差不多时,往往线性可分,这时选⽤ LR 或者线性核 Linear
2 ) 如果 Feature 的数量很⼩,样本数量正常,不算多也不算少,这时选⽤ RBF 核;
3 ) 如果 Feature 的数量很⼩,⽽样本的数量很⼤,这时⼿动添加⼀些 Feature ,使得线性可分,然后选⽤ LR 或者线性核Linear
4 ) 多项式核⼀般很少使⽤,效率不⾼,结果也不优于 RBF
5 Linear 核参数少,速度快; RBF 核参数多,分类结果⾮常依赖于参数,需要交叉验证或⽹格搜索最佳参数,⽐较耗时;
6 )应⽤最⼴的应该就是 RBF 核,⽆论是⼩样本还是⼤样本,⾼维还是低维等情况, RBF 核函数均适⽤。

3 ⼩结

  • SVM的核⽅法
        将原始输⼊空间映射到新的特征空间,从⽽,使得原本线性不可分的样本可能在核空间可分。
  • 常⻅核函数
        线性核
        多项式核
        RBF核
        Sigmoid核

六、SVM回归

SVM 回归 是让尽可能多的实例位于预测线上,同时限制间隔违例(也就是不在预测线距上的实例)。
线距的宽度由超参数 ε 控制。

七、 SVM算法api再介绍

1 SVM算法api综述

  • SVM⽅法既可以⽤于分类(⼆/多分类),也可⽤于回归和异常值检测。
  • SVM具有良好的鲁棒性,对未知数据拥有很强的泛化能⼒,特别是在数据量较少的情况下,相较其他传统机器学习算法具有更优的性能。
使⽤SVM作为模型时,通常采⽤如下流程:
1. 对样本数据进⾏归⼀化
2. 应⽤核函数对样本进⾏映射 (最常采⽤和核函数是 RBF Linear ,在样本线性可分时, Linear 效果要⽐ RBF 好)
3. cross-validation grid-search 对超参数进⾏优选
4. ⽤最优参数训练得到模型
5. 测试
sklearn中⽀持向量分类主要有三种⽅法:
SVC NuSVC LinearSVC ,扩展为三个⽀持向量回归⽅法: SVR 、 NuSVR、 LinearSVR
  • SVCNuSVC⽅法基本⼀致,唯⼀区别就是损失函数的度量⽅式不同
            NuSVC中的nu 参数和 SVC 中的 C 参数;
  • LinearSVC是实现线性核函数的⽀持向量分类,没有kernel参数。

2 SVC

 class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3,coef0=0.0,random_state=None)
  • C: 惩罚系数,⽤来控制损失函数的惩罚系数,类似于线性回归中的正则化系数。
            C越⼤,相当于惩罚松弛变量,希望松弛变量接近 0 ,即 对误分类的惩罚增⼤ ,趋向于对训练集全分对的情况,这样会出现训练集测试时准确率很⾼,但泛化能⼒弱,容易导致过拟合。
            C值⼩,对误分类的惩罚减⼩ ,容错能⼒增强,泛化能⼒较强,但也可能⽋拟合。
  • kernel: 算法中采⽤的核函数类型,核函数是⽤来将⾮线性问题转化为线性问题的⼀种⽅法。
            参数选择有RBF, Linear, Poly, Sigmoid或者⾃定义⼀个核函数。
                      默认的是"RBF",即径向基核,也就是⾼斯核函数;
                      ⽽Linear指的是线性核函数,
                      Poly指的是多项式核,
                      Sigmoid指的是双曲正切函数tanh核;。
  • degree:
        当指定kernel 'poly' 时,表示选择的多项式的最⾼次数,默认为三次多项式;
 

        若指定kernel 不是 'poly' ,则忽略,即该参数只对 'poly' 有⽤。
                    多项式核函数是将低维的输⼊空间映射到⾼维的特征空间。
  • coef0: 核函数常数值(y=kx+b中的b)
        只有‘poly’ ‘sigmoid’ 核函数有,默认值是 0

 3 NuSVC

class sklearn.svm.NuSVC(nu=0.5)
nu 训练误差部分的上限和⽀持向量部分的下限,取值在( 0 1 )之间,默认是 0.5

4 LinearSVC

class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, C=1.0)
  • penalty:正则化参数,
                L1和L2 两种参数可选,仅 LinearSVC 有。
  • loss:损失函数,
                有hinge和 squared_hinge 两种可选,前者⼜称 L1 损失,后者称为 L2 损失,默认是 squared_hinge
                其中hinge是 SVM 的标准损失, squared_hinge hinge 的平⽅
  • dual:是否转化为对偶问题求解,默认是True
  • C:惩罚系数,
                ⽤来控制损失函数的惩罚系数,类似于线性回归中的正则化系数。

5 ⼩结

  • SVM的核⽅法
        将原始输⼊空间映射到新的特征空间,从⽽,使得原本线性不可分的样本可能在核空间可分。
  • SVM算法api
        sklearn.svm.SVC
        sklearn.svm.NuSVC
        sklearn.svm.LinearSVC

八、 SVM总结

1 SVM基本综述

  • SVM是⼀种⼆类分类模型。
  • 它的基本模型是在特征空间中寻找间隔最⼤化的分离超平⾯的线性分类器。
        1)当训练样本线性可分时,通过硬间隔最⼤化,学习⼀个线性分类器,即线性可分⽀持向量机;
        2)当训练数据近似线性可分时,引⼊松弛变量,通过软间隔最⼤化,学习⼀个线性分类器,即线性⽀持向量机;
        3)当训练数据线性不可分时,通过使⽤核技巧及软间隔最⼤化,学习⾮线性⽀持向量机。

2 SVM优缺点

  • SVM的优点:
        在⾼维空间中⾮常⾼效;
        即使在数据维度⽐样本数量⼤的情况下仍然有效;
        在决策函数(称为⽀持向量)中使⽤训练集的⼦集, 因此它也是⾼效利⽤内存的;
        通⽤性:不同的核函数与特定的决策函数⼀⼀对应;
  • SVM的缺点:
        如果特征数量⽐样本数量⼤得多,在选择核函数时要避免过拟合;
        对缺失数据敏感;
        对于核函数的⾼维映射解释⼒不强

 后记:
●本博客基于B站开源学习资源,是作者学习的笔记记录,仅用于学习交流,不做任何商业用途!  

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

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

相关文章

开源免费CasaOS:轻松打造高效便捷的家庭云生活新体验

一、引言 随着科技的不断发展,家庭云系统逐渐成为现代家庭生活中的重要组成部分。CasaOS作为一款简单易用的开源家庭云系统,受到了广大用户的青睐。其简洁明了的界面设计,使得即使没有任何技术背景的用户也能轻松上手。本文将详细介绍CasaOS…

Helm Chart部署最简SpringBoot到K8S(AWS EKS版)

目标 这里假设,我们已经基本会使用k8s的kubectl命令进行部署了,也已经会自己打docker镜像推送到AWS ECR上面去了。而且,已经在云上准备好了AWS ECR镜像库和AWS EKS的k8s集群了。 这个前提上面,我们今天使用Helm Chart项目准备k8s…

【镜像转存】利用交互式学习平台killercoda转存K8S镜像至Docker私人仓库

文章目录 1. 镜像转存需求2. 注册并登陆 killercoda URL3. 打开playground4. 在线拉取K8S镜像并打上标签5. 推送K8S镜像到Docker私有仓库6. 登陆Docker私有仓库查看 1. 镜像转存需求 因K8S镜像在不开代理的情况下,拉取超时、下载缓慢,导致镜像拉取不下来…

解决无法登录到 ArcGIS Server Administrator

目录 问题复现原因分析解决办法 问题复现 今天在访问arcgisserver后台准备设置arcgis api for js请求路径时,登录之后出现500错误。Services Directoryhttp://xxx.xxx.xxx.xxx:6080/arcgis/admin/system/handlers/rest/servicesdirectory 原因分析 我实在两台虚拟机…

HM v.16.22 顺序读源码day3---TEncTop.cpp

文章目录 TEncTop.cpp引言Void TEncTop::encode执行流程实现细节Class TEncTopVoid TEncTop::xGetNewPicBuffer ( TComPic*& rpcPic, Int ppsId ) TEncTop.cpp 引言 TEncTop类是第二层编码类,也是执行实际编码计算工作的最顶层编码类。 Void TEncTop::encode是…

Logstash 详细介绍、安装与使用

目录 1. Logstash 概述2. 工作原理3. 安装和配置1. 安装(两种方法)2. 测试运行3. 配置输入和输出 4. 使用 Grok 过滤器插件解析 Web 日志5. 使用 Geoip 过滤器插件增强数据6. 配置接收 Beats 的输入 1. Logstash 概述 Logstash 是一个具有实时管道功能的…

Rust 深度学习库 Burn

一、概述 Burn 它是一个新的综合动态深度学习框架,使用 Rust 构建的,以极高的灵活性、计算效率和可移植性作为其主要目标。 Rust Burn 是一个以灵活性、高性能和易用性为核心设计原则工具,主打就是灵活性 、高性能 及易用性。 二、Rust B…

C#,图论与图算法,图着色问题(Graph Coloring)的威尔士-鲍威尔(Welch Powell Algorithm)算法与源代码

Welsh, D.J.A. and Powell, M.B. (1967) An Upper Bound for the Chromatic Number of a Graph and Its Application to Timetabling Problems. 《The Computer Journal》, 10, 85-86. 《The Computer Journal》 1 图着色算法概述 1967年,Welsh和Powell算法引入了…

bootstrap企业网站前端模板

介绍 企业网站前端模板 软件架构 前端所用技术html/css/js/jquery 前端框架bootstrap 安装教程 浏览器本地路径访问发布到服务器比如(tomcat/nginx等)云服务器/虚拟机 网站效果图 网站预览 点击预览 源码地址 https://gitee.com/taisan/company…

最新的yolov9,目标检测使用教程

1.克隆仓库,仓库地址: https://github.com/WongKinYiu/yolov9/tree/main 百度盘地址:https://pan.baidu.com/s/15v7XJIMDFG3XHJXfFs6ZDA 密码:1234 除了这两个模型,另外三个模型有问题...,下载ce模型即可 …

Jmeter+ant,ant安装与配置

1.ant含义 ant:Ant翻译过来是蚂蚁的意思,在我们做接口测试的时候,是可以用来做JMeter接口测试生成测试报告的工具 2.ant下载 下载地址:Apache Ant - Ant Manual Distributions download中选择ant 下载安装最新版zip文件 3.…

微服务分布式基于Springcloud的拍卖管理系统597wx

越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得信息,因此,设计一种安全高效的拍卖管理系统极为重要。 为设计一个安全便捷,并且使用户更好获取拍卖管理系统&#xff…

Annaconda环境下ChromeDriver配置及爬虫编写

Anaconda环境的chromedriver安装配置_anaconda 配置chromedriver-CSDN博客 Chromedriver驱动( 121.0.6167.85 ) - 知乎 下载好的驱动文件解压,将exe程序复制到Annaconda/Scripts目录以及Chrome/Application目录下 注意要提前pip install selenium包才能运行成功&a…

SpringBoot(自定义转换器+处理Json+内容协商)

文章目录 1.自定义转换器1.代码实例1.save.html2.编写两个bean1.Car.java2.Monster.java 3.WebConfig.java 配置类来自定义转换器4.测试 2.注意事项和细节1.debug查看转换器总数1.打断点2.执行到断点后,选左边的1923.可以看出,加上自定义的转换器一共125…

决策树 | 分裂算法:ID3,C4.5,CART

这里写目录标题 一. ID3算法1. 信息增益2. ID3算法特点 二. C4.5算法1. 信息增益率2. C4.5算法特点 三. CART算法1. Gini系数公式2. CART算法特点3. CART回归树的分裂评价指标 小节 在决策树算法逻辑篇中,我们讲解了决策树的构建方式,下面我们来聊一聊决…

边缘计算全面概述

什么是边缘计算? 边缘计算是一种分布式计算概念,将智能集成到边缘设备(边缘节点)中,使数据能够在数据采集源附近实时处理和分析。由于边缘计算在网络边缘本地处理数据,而不是在云端或集中式数据中心&#…

脑电信号处理的学习记录

【脑电信号处理与特征提取】https://www.bilibili.com/video/BV1Sg411775g?p6&vd_source77fb52274de00164fa71d28e4ce52cc5 滤波:对特定频率进行有效提取,并对提取部分进行特定的处理(增益、衰减、滤除)。 低通滤波&#x…

电商场景下 ES 搜索引擎的稳定性治理实践

继上文在完成了第一阶段 ES 搜索引擎的搭建后,已经能够实现对千万级别的商品索引的读写请求的支持。目前,单机房读流量在 500~1000 QPS 之间,写流量在 500 QPS 左右。 但随着业务的发展,问题也逐渐开始暴露&#xff0…

Python Web开发记录 Day9:Django part3 用户管理

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、数据库准备2、用户列表3、新建用户4、编辑用…

Linux之shell变量

华子目录 什么是变量?变量的名称示例 变量的类型变量的定义示例 自定义变量查看变量(自定义变量和全局变量) 环境变量定义环境变量(全局变量)法一法二法三env,printenv,export注意 C语言与shell…