SVM支持向量机原理及核函数

原文链接:SVM支持向量机原理及核函数

转载请注明出处

支持向量机原理

大距离分类算法

1、名词解释:

  • 分割超平面:如下图所示,构造一个分割线把圆形的点和方形的点分开,这个线称为分割超平面

  • 支持向量:离分割超平面最近的点

  • 间距:支持向量到分割超平面距离的两倍

SVM算法的原理就是找到一个分割超平面,它能把数据正确的分类,并且间距最大!

2、计算间距

在而为空间里,可以使用方程w1x1+w2x2+b=0来表示分割超平面。针对高纬度空间,可以写成一般化的向量形式,即wTx+b=0。这里画出与分割线超平面平行的两条直线,分别穿过两个类别的支持向量。这两条直线的方程分别为wTx+b=1wTx+b=1。如下图所示:

根据点到直线的距离公式,可以算出支持向量A到分割超平面的距离为:

d=wTA+bw

由于点A在直线wTx+b=1wTx+b=1在,代入可的支持向量A到分割超平面的距离为d=1w。为了使间距最大,只需找到合适的参数wb,使1w最大即可。||w||使向量wL2范数,计算公式为:

w=i=1nw2i

1w的最大值即使求||w||2的最小值:

w2=i=1nw2i

其中n为限量w的纬度。除了间距最大,分割超平面更能用来解决分类问题!回到上图,针对方形点x,必须满足wTx+b1的约束条件。针对圆形的点必须满足wTx+b<=1的约束条件。
类别是离散的值,分别使用-1表示圆点类别,1表示方点类别,即y\in \left\(-1,1 \right\)。针对数据集中的所有样本x(i),y(i),只要满足以下约束条件,则由以下参数w和参数b定义的分割超平面进行分类:

y(i)(wTx(i)+b)1

一句话概括:求解SVM算法,就是在满足约束条件y(i)(wTx(i)+b)1的前提下,求解||w||2的最小值。

松弛系数

针对现行不可分的数据集,上面的方法就不能用了。解决这个问题的办法就是引入一个参数ϵ,称为松弛系数。然后把优化的目标函数变为:

argminw2+Ri=1mϵi

其中m为数据集的个数,R为算法参数,其约束条件变为:

y(i)(wTx(i)+b)1ϵi

理解松弛系数:

可以把εi理解为样本x(i)违反一大间距规则的程度。针对大多数满足约束条件的样本ε=0。而对部分违反最大间距规则的样本ε>0。参数R则表示对违反约束的样本的”惩罚”。R越大对违反约束的点“惩罚力度”越大反之越小 。这样模型就会倾向于允许部分点违反最大间距规则

y(i)(wTx(i)+b)作为横坐标,违反约束条件的代价Ji作为纵坐标画图:

上图可以看出,针对哪些没有违反约束条件的样本,其成本为0。违反了约束条件的样本其成本与ε成正比,斜线的斜率为R

因此,引入松弛系数类似于逻辑回归的成本函数引入正则项,目的是为了纠正过拟合问题,让SVM对噪声数据由更强的忍耐性。如上上图所示,当出现违反大间距规则的噪声样本出现时,仍能让分割超平面是原来的样子,这就是松弛系数的作用。

核函数

核函数是特征转换函数。

最简单的核函数

回顾上面内容,我们的任务是找出合适的参数w,b,使得分割超平面间距最大,且能正确对数据进行分类。间距最大是我们的优化目标。真确地对数据分类是约束条件。即在满足约束条件y(i)(wTx(i)+b)1的前提下,求解||w||2的最小值。

拉格朗日乘子法是解决约束条件下求函数极值的理想方法。其方法是引入非负系数α来作为约束条件的权重:

L=12w2i=1mαi(y(i)(wTx(i)+b)1)

由于极值的偏导数为0,因此这需要让Lw求导使之为0得到wα对关系:

w=i=1maiy(i)x(i)

接着继续求 Lb对偏导数得出:
i=1my(i)αi=0

把这两个式子代入 L通过数学运算得出:
L=i=1mai12i=1mj=1maiajy(i)y(j)x(i)Tx(j)

这个公式中 m是数据集个数,a是拉格朗日乘子法引入的一个系数,针对数据集中的每个样本 x(i),都有对应的 ai x(i)是数据集中地 i个样本的输入,它是一个向量,y(i)是对应的输出标签,值为 y\in \left\( -1,1 \right\)

这个公式的最小值求解这里就不说明了。最后求出的a有个明显的特点。即大部分ai=0。因为只有那些支持向量所对应的样本直接决定了间隙的大小。实际上以上推导出这个公式就是为了引入支持向量机的另外一个核心概念:核函数:

K(x(i),x(j))=x(i)Tx(j)

L里的x(i)Tx(j)部分,其中x(i)是一个特征向量,所以x(i)Tx(j)是一个数值,就是两个输入特征向量的内积。预测函数为:

wTx+b=i=1maiy(i)x(i)Tx+b

wTx+b>0,预测函数为类别1,当wTx+b<0,预测类别为-1。注意到预测函数里也包含式子x(i)Tx。我们把K(x(i),x(j))=x(i)Tx(j)称为核函数。 x(i)Tx(j)是两个向量内积,它的物理含义是衡量两个向量的相似性。典型地,当两个向量相互垂直是,即完全线性无关,此时x(i)Tx(j)=0。引入核函数后预测函数为:

wTx+b=i=1maiy(i)K(x(i),x)+b

相似性函数

假设数据集已有一个数图特征,如下图,如何进行分类。

解决这个问题的方式是:用一定规则把这些无法进行线性分割的样本映射到更高纬度的空间里,然后找出超平面

SVM的核函数就是为了实现这种相似性映射。最简单的核函数是K(x(i),x(j))=x(i)Tx(j),它衡量的是两个输入特征向量的相似性。可以通过定义和函数K(x(i),x(j))来重新定义相似性,从而得到想要的映射。例如在基因测试领域,我们需要根据DNA分子的特征来定义相似性函数,即和函数。在文本处理领域,也可以自己定义和函数来衡量两个词之间的相似性。

怎么把低维度的空间映射到高纬度的空间呢?

举个例子:联想下利用多项式解决线性回归欠拟合问题的方法。如果输入特征是一维的[x1]变量,我们把它变成二维的一个方法是把输入特征转化为[x1,2x21],定义这种特征映射的函数就称之为相似性函数Φ(x)。这样在原来低维度计算相似性的运算x(i)Tx(j),就可以转换为高纬度空间里进行相似性运算Φ(x(i))TΦ(x(i))

核函数K(x(i),x(j))和相似性函数Φ(x)的关系:

相似性函数是特征的映射函数,起到转换的作用。而核函数是特征向量的内积。经过相似性函数转换后,核函数变成K(x(i),x(j))=Φ(x(i))TΦ(x(i))

常用核函数

核函数一般和应用场景相关,在不同领域所应用的核函数可能也不相同。但是实际上也有一些通用核函数“万金油”,一般有两种:多项式核函数高斯核函数

1、多项式核函数:

2、高斯核函数:

K(x(i),x(j))=exp(x(i)x(j))22σ2

如果输入的特征是一维的标量,那么高斯核函数对应的形状就是一个反钟形的曲线,其参数σ控制反钟形的宽度。如下图所示:

由于K(x(i),x(j))=Φ(x(i))TΦ(x(i)),经过合适的数学变换,可得高斯核函数对应的特征转换函数为:

Φ(x)=i=0exp(x2)2ii!xi

前面无限多项的累加器,其物理意义就是把特征向量转换到无限多维向量空间里,即 高斯函数可以吧输入特征扩展到无限多维空间里。公式的推导公式会用到 泰勒公式

=i=1maiy(i)K(x(i),x)+b

其中 K(x(i),x(j))是高斯核函数, ai只在支持向量对应的样本出不为0.由此可知, 预测函数时中心点在支持向量机处的高斯函数的线性组合,其线性组合的系数为 aiy(i)。因此,高斯核函数也称为 RBF核函数,即反钟形函数的线性组合。

核函数的对比

线K(x(i),x(j))=x(i)Tx(j)


K(x(i),x(j))=exp(x(i)x(j))22σ2

1、 线性核函数:这是最简单的核函数,它直接计算两个输入特征向量的内积。
- 优点:简单高效,结果易解释,总能生成一个最简洁的线性分割超平面
- 缺点:只适用线性可分的数据集

2、多项式核函数:通过多项式来作为特征映射函数
- 优点:可以拟合出复杂的分割超平面。
- 缺点:参数太多。有γ,c,n三个参数要选择,选择起来比较困难;另外多项式的阶数不宜太高否则会给模型求解带来困难。

3、高斯核函数:
- 优点:可以把特征映射到无限多维,并且没有多项式计算那么困难,参数也比较好选择。
- 缺点:不容易解释,计算速度比较慢,容易过拟合。

核函数的选择

1、最一般的选择原则是针对数据量很大的时候,可以选择复杂一点的模型。虽然复杂模型容易过拟合,但由于数据量很大,可以有效弥补过拟合问题。如果数据集较小选择简单点的模型,否则很容易过拟合,此时特别要注意模型是否欠拟合,如果欠拟合可以增加多项式纠正欠拟合。

2、根据样本量m和特征量n进行选择:
- 特征相比样本较大(如m=10~1000,n=10000):选逻辑回归或者线性函数SVM
- 特征较少,样本量中(如m=10~10000,n=1~1000):选择高斯SVM
- 特征量少,样本多(如m=50000+,n=1~1000):选多项式或高斯SVM

原文链接:SVM支持向量机原理及核函数

转载请注明出处!

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

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

相关文章

SQL对Xml字段的操作

转&#xff1a;http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一、前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型。用户可以创建这样的表&#xff0c;它在关系列之外还有一个或多个 XML 类型的列&#xff1b;此外&#xff0c;…

URL 路径长度限制(错误:指定的文件或文件夹名称太长)

本节讨论 URL 的构成、SharePoint 2010 构建 URL 的方式、URL 的编码和加长以及作为其他 URL 中的参数传递的方式。 SharePoint URL 的构成 SharePoint URL 的总长度等于文件夹或文件路径的长度&#xff0c;包括协议和服务器名称和文件夹或文件名称&#xff0c;以及作为 URL 的…

sklearn线性回归详解

图片若未能正常显示&#xff0c;点击下面链接&#xff1a; http://ihoge.cn/2018/Logistic-regression.html 在线性回归中&#xff0c;我们想要建立一个模型&#xff0c;来拟合一个因变量 y 与一个或多个独立自变量(预测变量) x 之间的关系。 给定&#xff1a; 数据集 {(x…

DateOnly和TimeOnly类型居然不能序列化!!! .Net 6下实现自定义JSON序列化

前言.Net 6引入了DateOnly和TimeOnly结构&#xff0c;可以存储日期和时间。但在实际使用时&#xff0c;发现一个很尴尬的问题&#xff0c;DateOnly和TimeOnly居然不能被序列化&#xff1a;var builder WebApplication.CreateBuilder(args);var app builder.Build();app.MapGe…

使用插件创建 .NET Core 应用程序

使用插件创建 .NET Core 应用程序本教程展示了如何创建自定义的 AssemblyLoadContext 来加载插件。AssemblyDependencyResolver 用于解析插件的依赖项。该教程正确地将插件依赖项与主机应用程序隔离开来。将了解如何执行以下操作&#xff1a;构建支持插件的项目。创建自定义…

支持向量机SVC

原文&#xff1a; http://ihoge.cn/2018/SVWSVC.html 支持向量机(support vector machine)是一种分类算法&#xff0c;但是也可以做回归&#xff0c;根据输入的数据不同可做不同的模型&#xff08;若输入标签为连续值则做回归&#xff0c;若输入标签为分类值则用SVC()做分类&…

Beetlex官网迁移完成

由于beetlex.io域名无法指向国内&#xff0c;使用国内的服务器很多时候有抽风情况出现&#xff0c;所以把网站迁回国内&#xff1b;新的域名也申请完成并且申请备案通过&#xff0c;现在可以通过https://beetlex-io.com来访问Beetlex的官网.接下把涉及的费用和部署情况也说一下…

SVM支持向量机绘图

原文&#xff1a; http://ihoge.cn/2018/SVM绘图.html %matplotlib inline import matplotlib.pyplot as plt import numpy as np class1 np.array([[1, 1], [1, 3], [2, 1], [1, 2], [2, 2]]) class2 np.array([[4, 4], [5, 5], [5, 4], [5, 3], [4, 5], [6, 4]]) plt.f…

python列表生成多个号码_python遍历多个列表生成列表或字典

原博文 2017-03-10 18:30 − key[a,b,c,d] value[1,2,3,4] mydictdict(zip(key,value)) print mydict 输出结果&#xff1a; {a: 1, c: 3, b: 2, d: 4} 也可以用zip同时遍历多个列表&#xff0c;生成一个多维列表 key... 相关推荐 2019-12-18 21:27 − 一.zip函数描述和使用 zi…

NCC CAP 6.0 发布 —— 新增支持 OpenTelemetry

前言今天&#xff0c;我们很高兴宣布 CAP 发布 6.0 版本正式版&#xff0c;在这个版本中&#xff0c;我们主要致力于对 OpenTelemetry 提供支持&#xff0c;以及更好的适配 .NET 6。那么&#xff0c;接下来我们具体看一下吧。总览可能有些人还不知道 CAP 是什么&#xff0c;老规…

朴素贝叶斯--文档分类

原文&#xff1a;http://ihoge.cn/2018/MultinomialNB.html 把文档转换成向量 TF-IDF是一种统计方法&#xff0c;用以评估一个词语对于一份文档的重要程度。 TF表示词频&#xff0c; 即&#xff1a;词语在一片文档中出现的次数 词语总数IDF表示一个词的逆向文档频率指数&am…

Linux I/O 模型(待修改)

2019独角兽企业重金招聘Python工程师标准>>> 最近看到“服务器并发处理能力”章节&#xff0c;被里面的“I/O模型“搞得有点头晕&#xff0c;所以这里希望通过概念的辨析和对比&#xff0c;能更好的理解Linux的 I/O模型。 同步&#xff08;synchronous&#xff09;…

git代码提交流程

从master创建任务分支1.需要先将master分支代码更新到最新然后再切新分支&#xff1b;2.新需求和hotfix需要从master切分支&#xff0c;若是在QA测试阶段或者预发布阶段的bug&#xff0c;则需要再该功能分支上进行修改&#xff1b;提交代码到自己的任务分支commit之后一定要pus…

PCA主成分分析+SVM实现人脸识别

原文地址&#xff1a; http://ihoge.cn/2018/PCASVM人脸识别.html 加载数据 这里使用的测试数据共包含40位人员照片&#xff0c;每个人10张照片。也可登陆http://www.cl.cam.ac.uk/research/dtg/attarchive/facesataglance.html 查看400张照片的缩略图。 import time impo…

龙芯发布.NET 6.0.100开发者内测版

龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者内测版的新闻 &#xff0c;龙芯.NET基于上游社区 版本 适配支持龙芯平台架构。目前支持LoongArch64架构和MIPS64架构&#xff0c;LoongArch64架构的.NET-SDK-3.1已完成&#xff0c;安装包下载地址LoongArch64-.NET …

数据挖掘的9大成熟技术和应用

http://ihoge.cn/2018/DataMining.html 数据挖掘的9大成熟技术和应用 基于数据挖掘的9大主要成熟技术以及在数据化运营中的主要应用&#xff1a; 1、决策树 2、神经网络 3、回归 4、关联规则 5、聚类 6、贝叶斯分类 7、支持向量机 8、主成分分析 9、假设检验 1 决…

LVS:三种负载均衡方式与八种均衡算法

1、什么是LVS&#xff1f; 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西&#xff0c;其实它是一种集群(Cluster)技术&#xff0c;采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率&#xff0c;将请求均衡地转移到不同的服务器上执行&#xff0…

排查 .NET开发的工厂MES系统 内存泄漏分析

一&#xff1a;背景 1. 讲故事上个月有位朋友加微信求助&#xff0c;说他的程序跑着跑着就内存爆掉了&#xff0c;寻求如何解决&#xff0c;截图如下&#xff1a;从聊天内容看&#xff0c;这位朋友压力还是蛮大的&#xff0c;话说这貌似是我分析的第三个 MES 系统了&#xff0c…

DataGirdView 常用操作

1、将数据源的某列添加到已有DataGirdView的列 例如&#xff1a;将文件夹下所有文件名添加到DataGirdView 的文件名一列&#xff0c;图片如下&#xff1a; 首先在datagridview把文件名列的DATAPROPERTYNAME设为你要显示的数据列的名字.此处我绑定的是folder.Name,所以直接在DAT…