SVM算法原理

article/2025/10/1 3:29:14
简介

支持向量机(support vector machines)是一个二分类的分类模型(或者叫做分类器)。如图:

它分类的思想是,给定给一个包含正例和反例的样本集合,svm的目的是寻找一个超平面来对样本根据正例和反例进行分割。
各种资料对它评价甚高,说“ 它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中


SVM之线性分类器

如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,以此类推。
如果不关注空间的维数,这种线性函数就是前言中所说的那个统一的名称——超平面(Hyper Plane)!
在样本空间中,划分超平面可通过如下线性方程来描述:


假设它已经完成了对样本的分隔,且两种样本的标签分别是{+1,-1},那么对于一个分类器来说,g(x)>0和个g(x)<0就可以分别代表两个不同的类别,+1和-1。
但光是分开是不够的,SVM的核心思想是尽最大努力使分开的两个类别有最大间隔,这样才使得分隔具有更高的可信度。而且对于未知的新样本才有很好的分类预测能力(在机器学习中叫泛化能力)
那么怎么描述这个间隔,并且让它最大呢?SVM的办法是:让离分隔面最近的数据点具有最大的距离。
为了描述离分隔超平面最近的数据点,需要找到两个和这个超平面平行和距离相等的超平面:
H1: y = wT+ b=+1 和 H2: y = wT+ b=-1
如图所示:

在这两个超平面上的样本点也就是理论上离分隔超平面最近的点,是它们的存在决定了H1和H2的位置,支撑起了分界线,它们就是所谓的支持向量,这就是支持向量机的由来
有了这两个超平面就可以顺理成章的定义上面提到的间隔(margin)了
二维情况下 ax+by=c1和ax+by=c两条平行线的距离公式为:


可以推出H1和H2两个超平面的间隔为2/||w||,即现在的目的是要最大化这个间隔。
所以support vector machine又叫Maximum margin hyper plane classifier
等价于最小化||w||
为了之后的求导和计算方便,进一步等价于最小化

假设超平面能将样本正确分类,则可令:

两个式子综合一下有:

这就是目标函数的约束条件。现在这个问题就变成了一个最优化问题:

而且这是一个凸二次规划问题,一般的解决方法有两种1是用现成的优化工具包直接求解,2是使用Lagrange Duality找到一种更有效的方法求解。
其中方法2具有两个优点:
a、更好解
b、可以自然地引入核函数,推广到非线性分类
所以这里选用了第二种方法。


对偶优化问题

对于上述的最优化问题先需要构造拉格朗日函数:

分别对w和b求导得到:

然后再代入拉格朗日函数后得到原问题的对偶问题:


现在已经完成了对这个问题的建模过程。
当要对一个数据点分类是,只需要把待分类的数据点带入g(x)中,把结果和正负号对比。又由上面计算得到的w,带入g(x)得到:

这个式子表示:对x的预测只需要求它与训练点的内积,这是用kernal进行线性推广的基本前提。并且并不是灭个训练点都要用到,只需要用到支持向量,非支持向量的系数a为0。
到这里剩下的是怎么解目前这个最优化问题。
但是目前这分类器还是比较若的分类器,只适合线性的情况,而且没什么容错性。
所以现在先不急着求解,先讨论容错性和非线性情况的推广(泛化)


核函数

前述方法对线性不可分的样本集无能为力。
但是一个低维的样本集映射到高维则可以变成线性可分(如图所示),那样才能使用SVM工作。
》》》》 

设映射函数为Φ(•),则映射后的空间分类函数变成

但是,如果拿到低维数据直接映射到高维的话,维度的数目会呈现爆炸性增长。
所以这里需要引入核函数(kernal function)。
核函数的思想是寻找一个函数,这个函数使得在低维空间中进行计算的结果和映射到高维空间中计算内积<Φ(x­1), Φ(x2)>的结果相同。
这样就避开直接在高维空间中进行计算,而最后的结果却是等价的。
现在,分类函数就变成了这样:

其中k就是核函数

由于对任意数据集找到它合适的映射是困难的且没有必要,所以通常会从常用核函数中选择。
常用核函数例如:
  • 多项式核函数
  • 高斯核核函数
  • 线性核函数
  • 字符串核函数
上述方法叫做核方法。事实上,任何将计算表示为数据点内积的方法都可以用核方法进行非线性扩展


容错性: Outliers

由于噪音的存在,有可能有偏离正常位置很远的数据点存在,甚至类别1出现杂了类别2的区域中这样的异常值叫outliers. 
为处理这种情况,SVM允许数据点在一定程度上偏离超平面,约束就变成了:

其中,称为松弛变量(slack variable)
这就引入了容错性

如果任意大的话,那任意的超平面都是符合条件的了
所以需要在原目标函数中加入损失函数,可以用
 或者  
用前者的话,叫一阶软间隔分类器;用后者的话就叫二阶软间隔分类器。
还需要一个惩罚因子C(cost),它代表了对离群点带来的损失的重视程度,它的值越大,对目标函数的损失越大,意味着你非常不愿意放弃这些点。
它是由使用者指定的一个值(libsvm中的参数C),是参数调优的重点所在。
原来的优化问题就变成了下面这样:

同样用Lagrange方法得到对偶问题:

这才是一个可以处理线性和非线性情况并能容忍噪音和outlier的SVM!


SVM用于多类分类

svm本身是一种典型的二分类器,那如何处理现实中的多分类问题呢?
常用的有三种方法:

一、一对多
也就是“一对其余”(One-against-All) 的方式,就是每次仍然解一个两类分类的问题。
这样对于n个样本会得到n个分类器。
但是这种方式可能会出现分类重叠现象或者不可分类现象
而且由于“其余”的数据集过大,这样其实就人为造成了“数据偏斜”的问题

二、一对一
每次选择一个类作为正样本,负样本只用选其余的一个类,这样就避免了数据偏斜的问题。
很明显可以看出这种方法训练出的分类个数是k*(k-1)/2,虽然分类器的个数比上面多了,但是训练阶段所用的总时间却比“一类对其余”方法少很多。
这种方法可能使多个分类器指向同一个类别,所以可以采用“投票”的方式确定哪个类别:哪个分类器获得的票数多就是哪个分类器。
这种方式也会有分类重叠的现象,但是不会有不可分类的情况,因为不可能所有类别的票数都是0。
但是也很容易发现这种方法是分类器的数目呈平方级上升。

、DAG SVM
假设有1、2、3、4、5五个类,那么可以按照如下方式训练分类器( 这是一个有向无环图,因此这种方法也叫做DAG SVM
这种方式减少了分类器的数量,分类速度飞快,而且也没有分类重叠和不可分类现象。
但是假如一开始的分类器回答错误,那么后面的分类器没有办法纠正,错误会一直向下累积。
为了减少这种错误累积,根节点的选取至关重要。


小结

本文从整个流程上理清了SVM是个什么东西

首先,支持向量机是一个十分流行的针对二分类线性分类器,分类的方式是找到一个最优的超平面把两个类别分开。定义“最优”的方式是使离分隔面最近的数据点到分隔面的距离最大,从而把这个问题转化成了一个二次优化问题

然后,我们选择了拉格朗日方法来对这个二次优化问题进行简化,即转化成它的对偶问题。虽然我们没有进一步讨论这个优化问题的解法,但这已经形成了SVM的初步模型

随后我们对这个简单的分类器进行泛华,用核方法把这个线性模型扩展到非线性的情况,具体方法是把低维数据集映射到高维特征空间。以及,讨论了怎么增强分类器的容错性能。

最后讨论了怎么把这个二分类器用于多分类问题。


参考文献

【2】Jasper的博客:http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html
【4】《机器学习 》,周志华著
【5】《统计学习方法》,李航著
【6】《机器学习实战》Peter Harrington著



http://chatgpt.dhexx.cn/article/qfOjxDPA.shtml

相关文章

svm原理详解,看完就懂(一)

&#xff08;一&#xff09;SVM的八股简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的&#xff0c;它在解决小样本、非线性及高维模式识别中表现出许多特有的优势&#xff0c;并能够推广应用到函数拟合等其他机器学习问题中[10]。 支持向量机方法…

SVM算法—原理讲解

原文作者&#xff1a;奔跑的前浪 原文地址&#xff1a;svm算法 最通俗易懂讲解 最近在学习svm算法&#xff0c;借此文章记录自己的学习过程&#xff0c;在学习时很多处借鉴了z老师的讲义和李航的统计&#xff0c;若有不足的地方&#xff0c;请海涵&#xff1b;svm算法通俗的理解…

SVM --从“原理”到实现

零. 本文所有代码均能在我 github上的 DML 找到&#xff0c;顺便求点Star 一.引入 从一开始接触机器学习&#xff0c;就感觉SVM&#xff08;支持向量机 Support Vector Machine&#xff09;就是高端大气上档次的代名词啊&#xff0c;在深度学习出来之前一直都力压ANN一头&…

SVM算法详解

Support Vector Machine 终于&#xff0c;我们来到了SVM。SVM是我个人感觉机器学习中最优美的算法&#xff0c;这次我们要来非常细致地介绍。SVM是一类有监督的分类算法&#xff0c;它的大致思想是&#xff1a;假设样本空间上有两类点&#xff0c;我们希望找到一个划分超平面&…

SVM简介

SVM 文章目录 SVM一. 什么是SVM1. 简介2.SVM分类 二. 详细介绍1. 线性可分SVM1.1 支撑点&#xff0c;支撑向量1.2 分割超平面与间隔最大化1.3 线性可分SVM的目标函数以及相关算法1.4 线性可分SVM的简单举例 2.线性SVM2.1 为什么需要线性SVM2.2 线性SVM相关理论2.3 线性SVM算法 …

Svm算法原理及实现

Svm&#xff08;support Vector Mac&#xff09;又称为支持向量机&#xff0c;是一种二分类的模型。当然如果进行修改之后也是可以用于多类别问题的分类。支持向量机可以分为线性核非线性两大类。其主要思想为找到空间中的一个更够将所有数据样本划开的超平面&#xff0c;并且使…

SVM 原理详解,通俗易懂

看了该作者的文章&#xff0c;瞬间膜拜了&#xff01;讲得太好了&#xff01; 转自&#xff1a;http://www.blogjava.net/zhenandaci/category/31868.html &#xff08;一&#xff09;SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的&…

机器学习笔记6:SVM基本原理

SVM的基本原理&#xff1a; 1、最大间隔原则 2、对偶表示 3、KKT条件 SVM(Support Vector Machine)&#xff0c;又称支持向量机&#xff0c;在分类问题上&#xff0c;除了logistic分类回归外&#xff0c;还有另一种实现方式&#xff0c;那就是使用SVM原则。那么什么是SVM 呢。…

SVM原理

我们先认识一下SVM&#xff1a; &#xff08;1&#xff09;支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种对数据进行二分类的广义线性分类器&#xff0c;其分类边界是对学习样本求解的最大间隔超平面。 &#xff08;2&#xff09;SVM使用铰链损失函数…

通俗易懂SVM原理介绍,适合小白食用

目录 1、SVM概念描述 2、SVM数学表达及相关计算 3、SVM优化问题定义 附&#xff1a;证明区 【证明1】 【计算1】 1、SVM概念描述 如图一所示&#xff0c;存在两个数据集&#xff0c;我们希望通过一个超平面将两个数据集分割开&#xff0c;并且我们希望这个超平面离两个数…

01-Hive创建表

声明&#xff1a;本实验环境是Apache hadoop-2.2.0&#xff0c;zookeeper-3.4.5&#xff0c;mysql Server version: 5.1.73作为元数据库&#xff0c;hive版本是apache-hive-0.9.0-bin&#xff0c;都是apache&#xff0c;不是CDH和其他。本实验集群3台&#xff0c;一个主节点(ha…

hive 中创建表的三种方式

官网地址&#xff1a;https://cwiki.apache.org/confluence/display/Hive/LanguageManualDDL 通常我们所使用的创建hive表有三种方式 1.create table 首先我们找到官网对创建表的描述如下&#xff1a; ’[]’ 表示可选&#xff0c;’|’ 表示几选一 CREATE [TEMPORARY] [EXT…

hive创建新表——基础

创建基础表 1、创建表&#xff1a; create table if not exists orders 创建一个名叫“orders”的表&#xff0c;“if not exists”可以写可不写&#xff0c;如果相同名字的表已经存在&#xff0c;则抛出异常&#xff0c;可以用 IF NOT EXIST 选项来忽略这个异常。 2、定义表…

HIVE的常用操作-建库和表-插入数据

hive的安装&#xff08;远程模式&#xff09; 点击打开链接 使用hive----------------------- 启动hadoop 启动hive 创建数据库&#xff1a; create database myhive; 查看数据库&#xff1a; hive (default)> show databases; OK database_name default myhive 数…

Hive三种建表语句详解

转载自&#xff1a;https://blog.csdn.net/qq_36743482/article/details/78383964 注&#xff1a;hive其他语法在hive官网有说明&#xff0c;建议初学者&#xff0c;去官网学习一手的资料&#xff0c; 官网&#xff1a;https://cwiki.apache.org/confluence/display/Hive/Home#…

关于hive建表查询语句小记

库相关操作 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)]; IF NOT EXISTS 也就是没有重复库就创建&#xff0c;有重复就不执行建库 保证了建库…

hive、pg库,建表语句及查询表结构语句

1、hive hive 建表语句 DROP TABLE IF EXISTS tmp_001; CREATE TABLE tmp_001 (etl_time timestamp comment , day_id double comment , subs_id string comment , msisdn int comment ) comment partitioned by…

3、Hive数据仓库——建表语句

文章目录 Hive基本操作Hive查看SQL解析计划Hive建表建表1&#xff1a;全部使用默认建表方式 Hive 内部表 &#xff08;Managed tables&#xff09;指定location (这种方式也比较常用)formatted 查看该表的结构化数据&#xff0c;但并不列出表中的数据将本地数据上传到HDfS上 Hi…

HIVE的三种建表方式

目录 一、直接建表二、as &#xff08;直接使用查询结果插入到一张新表&#xff09;三、like&#xff08;复制表结构&#xff09; 一、直接建表 中括号里面的均为可选项 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...…

Hive学习3:Hive三种建表语句详解

注&#xff1a;hive其他语法在hive官网有说明&#xff0c;建议初学者&#xff0c;去官网学习一手的资料&#xff0c; 官网&#xff1a;https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation Create Table 官网说明 Hive建表方式共有三种&#xff…