svm算法原理_机器学习——分类算法(1)

c85e7b9afda9dff75b5e3d89e88c3cd0.png

一、 K近邻

KNN算法的基本思想就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

其中在计算距离时采用欧氏距离或曼哈顿距离:

b1c300b231ee14bbe16fd43bd5bb17c0.png

k值的选择:当k值较小时,预测结果对近邻的实例点非常敏感,容易发生过拟合;如果k值过大模型会倾向大类,容易欠拟合;通常k是不大于20的整数

优点:精度高,对异常值不敏感

缺点:k值敏感,空间复杂度高(需要保存全部数据),时间复杂度高(平均O(logM),M是训练集样本数)

二、感知机

PLA全称是Perceptron Linear Algorithm,即线性感知机算法,属于一种最简单的感知机(Perceptron)模型。它是支持向量机和神经网络的基础。感知机模型是机器学习二分类问题中的一个非常简单的模型。它的基本结构如下图所示:

4ac96a33a622d687f95390c027559355.png

假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数据集正实例点和负实例点完全正确分开的分离超平面。如果是非线性可分的数据,则最后无法获得超平面。所以感知机的目标函数为一条直线或者一个超平面,其输出为:

cabe830dc8c6efd9e9935483a1ca9cbd.png

其中wx+b表示空间中的一点的坐标,我们的目标取找到合适的w和b,使得f(x)和真实的y值相符合,当然不可能达到完全符合,所以应当是尽可能多的点被正确分类。换句话说就是让那些分错类的点越接近边界线越好。这时我们就可以用距离来定义损失函数了:损失值=错误的点到边界的距离的总和。优化的对象便是让这个距离之和最小。

由点到平面的距离公式我们可以得到任意一点距离我们上面定义的模型的距离为:

ea2ff4c22dbffc29f9168b3bb56a5010.png

有了计算距离的方式,我们来看看损失函数究竟怎么定义。这里需要注意的是我们的目标是那些分错类的点,而不是所有点,因此不能直接将距离作为损失函数,所以我们需要找出那些分错类的点,建立他们的损失函数。这里正好可以利用绝对值来进行区分正确点和错误点。对于模型来说,在分类错误的情况下,若wxi+b>0,去掉绝对值不变,则实际的yi应该是等于-1,为了使原式保持正值,则添加一个负号。而当wxi+b<0时,去掉绝对值加负号,此时yi等于1,上式为正值。因此由这个特性我们可以去掉上面的绝对值符号,将公式转化为:

2c3864007ecba781261a010f7b0fba93.png

去掉||w||后得到最终的损失函数为:

57fcfeb63be6103dc2dc43e5be09fb85.png

这里求最小值采用的是随机梯度下降算法,因为我们每次取一个点来判断他是不是错误点,然后才能带入优化。

三、支持向量机SVM

支持向量机与感知机相似。他的目的也是取寻找一条直线或一个超平面将数据进行二分类。只不过感知机的原理是到边界的距离最小,而SVM的原理则是“间隔最大化”。

f19b95c46d24c8f0c4258df9343da593.png

从上图可以看出,如果数据集线性可分,那么这样的直线又无数条,但是我们的目标是找到一条容忍度最好的直线,即黄色的那条。

  1. 为什么要间隔最大呢?

一般来说,一个点距离分离超平面的远近可以表示分类预测的确信度,如图中的A B两个样本点,B点被预测为正类的确信度要大于A点,所以SVM的目标是寻找一个超平面,使得离超平面较近的异类点之间能有更大的间隔,即不必考虑所有样本点,只需让求得的超平面使得离它近的点间隔最大

9f9ee408b5b12fd9386421163bedcefa.png

2. 怎么计算间隔

f(x)=wTx+b 表示空间中一点的坐标。当f(x) 等于0的时候,x便是位于超平面上的点,而f(x) 大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点。这里的y=1和-1都是可以随意指定的,相当于两种label,为了方便计算就取1和-1了。

根据上述原理我们可以总结为一个表达式:

d6039f0d74d8c0ec373fa53971d5b04f.png

实际上该公式等价于yi(WTxi+b)≥ +1。这就是最大间隔假设

3. 什么是支持向量

距离超平面最近的这几个样本点满足yi(WTxi+b)=1,它们被称为“支持向量”。虚线称为边界,两条虚线间的距离称为间隔(margin)所谓的支持向量,就是使得上式等号成立,即最靠近两条虚边界线的向量。如果WTxi+b>1,那就说明更加支持了。

82e53a8a6b159be1902f177ae8949296.png

所以我们在计算最大间隔的时候,其实关注的是支持向量到超平面的距离。

749921e658ed030a412ab310f9a13158.png

e7cba8fff2eac1b02f2ea51593363368.png

e9599fac4369b147b7384a84fe2889d9.png

由上述两式联立可得

3f3fc34b2ac48042fea4f8e3536b9099.png

对于支持向量,WTxi+b=1或-1,所以最大间隔变为:

012473304b2fd61787b8ddbe2409e818.png

这样我们们便确定了目标函数

3a143481e65fcccaa16dbab020b8d11c.png

等价于:

43e5e8ac833976a86b498fe0c990c4cd.png

SVM函数的求解属于凸二次规划问题,采用拉格朗日乘数法求解。添加拉格朗日乘子 αi≥0,则整个拉格朗日函数可写成:

5d557fb5cae0e685596b20baa360064f.png

4. 非线性支持向量机与核函数技

对于非线性分类问题,显然无法用一个线性分离超平面来把不同的类别的数据点分开,那么可以用以下思路解决这个问题:

  • 首先使用一个变换 z=ϕ(x)将非线性特征空间x映射到新的线性特征空间z
  • 在新的z特征空间里使用线性SVM学习分类的方法从训练数据中学习分类模型

但是,这里有一个问题: ϕ(xi)⋅ϕ(xj)计算起来要分两步,先映射x到z空间,然后在z空间(一般是较高维度)作高维度的內积zi⋅zj。

为了简化这个运算过程,如果我们找到一个核函数K(xi,xj), 即K是关于x的函数,其运算在低维空间上进行,然后使得K(xi,xj)=ϕ(xi)⋅ϕ(xj),那么只需要计算一个比较好计算的核函数K(xi,xj),就可以避免先映射,再在高维空间內积的复杂运算。

常见的核函数有:二次多项式核、高斯核

5. 软间隔

我们一直假设训练样本在样本空间或特征空间食线性可分的,即存在一个超平面能将不同类的样本完全划分开。然而,在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分;退一步说,即便恰好找到了某个核函数使训练样本在特征空间中线性可分,也很难断定这个貌似线性可分的结果不是由于过拟合造成的缓解该问题的一个方法是允许支持向量机在一些样本上出错,为此要引入“软间隔”的概念。当然我们还要限制这些分错的样本个数应当越少越好

1cecd3c9711e9e06e167c9e96f5c28e9.png

之前做了一个最大间隔的假设,即所有样本都满足:

eecfed608fc26088e34db290dff9dc59.png

也就是说所有的样本都得被分对,这称之为“硬间隔”,而软间隔则允许某些样本不满足约束条件,于是,目标函数可写为

8c888afdbc62c97b87b559ffaeab6c1c.png

其中C是常数,L0/1是0/1的损失函数:

f592dc1c6759fa8dabc0ad6d02be449a.png

当C越大,模型的容忍程度就越小,边界越瘦,C越小,边界越胖,越多的样本被分错,所以C为无穷大时迫使所有样本都得满足约束

直接使用0/1的损失函数求解不好求,一般都是将其变为hinge损失函数:

c69c307a6c24f8c3077ffd71bfd9d4a4.png

此时,我们的优化目标函数也就变成了:

c1140e2500ec8434153a9e6693ff3e61.png

引入一个变量ξn=1− yi(Wx+b),我们成为“松弛因子”,如果yi(Wx+b)<1,带入hinge损失中,损失值大于0,说明样本被分错,因此ξn代表犯了多少错。优化的目标函数最终变为:

e31a9f4f1ef0da8773219dbd677fbe61.png

5. LR和SVM不同点

  • LR采用log损失,SVM采用合页(hinge)损失

逻辑回归方法基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值(基于统计的,其损失函数是人为设定的凸函数) 。支持向量机基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面.(有严格的推导)

  • LR对异常值敏感,SVM对异常值不敏感

支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用,虽然作用会相对小一些)。LR模型找到的那个超平面,是尽量让所有点都远离他,而SVM寻找的那个超平面,是只让最靠近中间分割线的那些点尽量远离,即只用到那些支持向量的样本。

  • 对非线性问题的处理方式不同

LR主要靠特征构造,必须组合交叉特征,特征离散化。SVM也可以这样,还可以通过kernel(因为只有支持向量参与核计算,计算复杂度不高)。(由于可以利用核函数,。SVM则可以通过对偶求解高效处理。LR则在特征空间维度很高时,表现较差。)

  • 正则化不同

SVM的损失函数就自带正则(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因,而LR必须另外在损失函数上添加正则项

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

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

相关文章

svn复制出来的java_从svn下载的项目(或从别处拷贝来的)报错的可能情况以及解决经验...

1、sdk版本不符合。举个栗子&#xff1a;如果svn上的项目是用sdk10的&#xff0c;但是你电脑上最低sdk是14的&#xff0c;那么这时候就会报错。解决办法&#xff1a;a、鼠标点击项目&#xff0c;b、快捷键“altenter”&#xff0c;c、左侧点击“Android”&#xff0c;右侧选中一…

spring揭秘_被问到了! Spring 和 Spring Boot 之间到底有啥区别?

相信很多小伙伴和我一样&#xff0c;常用Spring 和Spring Boot 但是就是没有研究二者之间到底有什么区别&#xff1f;今天就来大揭秘 ↓概述对于 Spring和 SpringBoot到底有什么区别&#xff0c;我听到了很多答案&#xff0c;刚开始迈入学习 SpringBoot的我当时也是一头雾水&am…

sql 删除最低分数_软件测试从业者:必备SQL语句21天打卡,前10天

一、价值&#xff1a;1. 根据这些年的经验&#xff0c;帮软件测试从业者精选出&#xff1a;1)日常工作中&#xff0c;需要用到的SQL语句&#xff1b;2)软测面试中&#xff0c;笔试 / 面试 &#xff0c;需要用到的 SQL问题 & 答案 &#xff1b;2. SQL这种硬技能 &#xff0c…

php两个手机号正则表达式_php 手机号码验证正则表达式

php 手机号码验证正则表达式比较简洁的代码一&#xff1a;$str ;$isMatched preg_match(/^0?(13|14|15|17|18)[0-9]{9}$/, $str, $matches);var_dump($isMatched, $matches);代码二//正则表达式$tel "15558530459"; //作者的手机号码,如果有疑问可以电话联系我,或…

ssms没有弹出服务器验证_使用SSMS扫描和查找SQL Server数据库的潜在安全漏洞

SQL Server Management Studio 17.4或更高版本的SSMS中提供了SQL Server漏洞侦测(VA)功能&#xff0c;此功能允许SQL Server扫描您的数据库以查找潜在的安全漏洞&#xff0c;并且可以针对SQL Server 2012或更高版本运行。如果您还没有使用SSMS上的较新版本&#xff0c;请不要担…

驱动api_消费者驱动契约已死?

吐槽文一篇。契约的一些问题在实践前后端分离的这些年来&#xff0c;已经诞生了一些技术与工具让前后端进行沟通&#xff1a;契约的 Mock 服务&#xff08;Mock Server&#xff09;。用于模拟一个服务器&#xff0c;为特定的接口返回特定的值。契约测试。对前后端协定的 API 进…

php表单提交邮箱_最全实现dede订单表单提交发送到指定邮箱(附前台设置)

打造销售型网站的订单系统。不是所有销售都有权限登陆网站后台查看订单&#xff0c;特别是外地出差时&#xff0c;用户下了订单后不能及时服务用户&#xff0c;可能会造成订单丢失。但dedecms默认的订单提交后只能在后台看到的&#xff0c;每次都要登陆到后台去查看很麻烦。以下…

php ckeditor 配置,Laravel5.6框架使用CKEditor5相关配置详解

本文实例讲述了Laravel5.6框架使用CKEditor5相关配置。分享给大家供大家参考&#xff0c;具体如下&#xff1a;Laravel 相关配置文件的上传与存储参考文档&#xff1a;创建符号链接php artisan storage:linkproject/public/storage -> project/storage/app/public修改配置文…

udp怎么保证不丢包_在 Flink 算子中使用多线程如何保证不丢数据?

分析痛点笔者线上有一个 Flink 任务消费 Kafka 数据&#xff0c;将数据转换后&#xff0c;在 Flink 的 Sink 算子内部调用第三方 api 将数据上报到第三方的数据分析平台。这里使用批量同步 api&#xff0c;即&#xff1a;每 50 条数据请求一次第三方接口&#xff0c;可以通过批…

堆排序时间复杂度_图解堆结构、堆排序及堆的应用

前言这次我们介绍另一种时间复杂度为 O(nlogn) 的选择类排序方法叫做堆排序。我将从以下几个方面介绍&#xff1a;堆的结构堆排序优化的堆排序原地堆排序堆的应用堆的结构什么是堆&#xff1f;我给出了百度的定义&#xff0c;如下&#xff1a;堆(Heap)是计算机科学中一类特殊的…

恶意软件分析沙箱在网络安全策略中处于什么位置?

恶意软件分析沙箱提供了一种全面的恶意软件分析方法&#xff0c;包括静态和动态技术。这种全面的评估可以更全面地了解恶意软件的功能和潜在影响。然而&#xff0c;许多组织在确定在其安全基础设施中实施沙箱的最有效方法方面面临挑战。让我们看一下可以有效利用沙盒解决方案的…

php websocket 帧封装,swoole websocket封装类和调用

上代码 ws.php/*** ws 优化 基础类库* User: singwa* Date: 18/3/2* Time: 上午12:34*/class Ws {CONST HOST "0.0.0.0";CONST PORT 9512;public $ws null;public function __construct() {$this->ws new swoole_websocket_server("0.0.0.0", 9512)…

夸克浏览器怎么安装脚本_广告看烦了?别砸手机!这五款浏览器能拯救你

哈喽大家好&#xff0c;欢迎来到黑马公社。随着各种良莠不齐的内容开始泛滥&#xff0c;黑马发现自己很难通过网络第一时间找到自己想要的内容。在电脑上&#xff0c;黑马为自己的每个浏览器都安装了不下三个广告屏蔽插件&#xff0c;而在手机上&#xff0c;很难。先不说手机浏…

php 今天 明天 后天 显示10天,【微信小程序】实现含有今天,明天,后天的日期组件...

封面图.JPG前言做过微信小程序的前端er都知道&#xff0c;小程序有个日期组件&#xff0c;叫picker&#xff0c;但是&#xff0c;需求方要求日期和时间都要显示的&#xff0c;用picker组件的话&#xff0c;那就用到两个picker&#xff0c;date和time&#xff0c;就是说要让用户…

php数组实例,php常用数组函数实例小结

本文实例总结了php常用数组函数。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1. array array_merge(array $array1 [, array $array2 [, $array]])函数功能&#xff1a;将一个或多个数组的单元合并起来&#xff0c;一个数组中的值附加在前一个数组的后面。返回结果的…

手机连接投影机的步骤_投影机安装过程详解

投影机安装过程详解一 投影机的安装方式1、桌面摆放桌面投影虽然看起来不是很美观&#xff0c;但可以省去那些繁琐的步骤&#xff0c;只需要准备一张桌子&#xff0c;还可以购买一些专门用来摆放投影机的可移动小车架&#xff0c;把投影机往上一放&#xff0c;连接上线缆就可以…

php memcached close,PHP连接Memcached安装及数据库操作

memcached介绍Memcached是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的Hash表,所以支持任意存储类型的数据。很多网站通过使用 Memcached提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站。Memcached是典…

坏道修复是不是硬盘东西全部都没有了_硬盘有坏道就不能用了吗?别再吃哑巴亏了,今天跟大家再说一次...

硬盘是电脑的存储硬件&#xff0c;是电脑中核心的硬件之一&#xff0c;目前市场上主要使用的是固态硬盘与机械硬盘两种&#xff0c;固态硬盘的读写速度较快&#xff0c;容量小&#xff0c;价格贵&#xff0c;机械硬盘读写速度慢&#xff0c;容量大价格便宜&#xff0c;现在的电…

html5+php调用android手机图片,html5+exif.js+canvas+php实现手机上传图片,图片损坏无法打开...

上传图片&#xff0c;图片损坏无法打开&#xff0c;图片路径也是正确的&#xff0c;function selectFileImage(fileObj) {var file fileObj.files[0];//图片方向角 added by lzkvar Orientation null;if (file) {console.log("正在上传,请稍后...");var rFilter /…

word 编辑域中的汉字_15条Word常用操作教程,简单实用,纯干货分享,收藏备用!...

点击蓝字关注我们1. 去除页眉横线在页眉插入信息的时候经常会在下面出现一条横线&#xff0c;如果这条横线影响你的视觉。这时你可以采用下述的两种方法去掉&#xff1a;用第一种的朋友比较多&#xff0c;即选中页眉的内容后&#xff0c;选取“格式”选项&#xff0c;选取“边框…