浅学支持向量机(含具体推导、核函数)
参考了西瓜书,《机器学习》周志华
背景
在超平面(比如三维立体,甚至更高维)上,找到一个分类面
看起来很陌生,其实直线方程和
使得分类面上方都是正例(
支持向量机
如果止步于此,就只是普通的线性模型罢了,而接下来引出支持向量最重要的特性——稀疏性
样本到分类面距离为
其中,分母的符号是向量二范数,即向量的欧几里得距离,也就是向量取模,另外注意这里的
同直线方程一样,参数等比例放缩时,方程本质不变,即所代表的分类面不变,那么不妨让距离分类面最近的点
注意这里
显然,我们要让样本离分类面尽可能远,
则问题就变成了
注意,系数
显然,该问题是凸优化问题,可以用现成的凸二次规划算法解决,但是还有一种性能更优的算法,需要以此引出对偶问题
拉格朗日乘数法
与线性判别分析 LDA 类似,对约束下的凸优化问题,采用拉格朗日乘数法
首先化成目标函数取最小,约束条件小于等于 0 的一般形式,然后左边乘上拉格朗日乘子
再次提醒,其中
仅此转化,问题还不等价,因为拉格朗日乘子法针对的是等式约束,而这里是不等式约束,还需要满足 KKT 条件:
最主要的就是第三个条件,要么
不难看出,这相当于我们找出了
这便是支持向量机最大的特点——稀疏性
偏导
接下来,将
注意这里
同理对
回代入原式得
对偶问题转化
inf 表示下确界 infimum,
注意最左边对于
可以理解为,对于一个二次函数,找到一条平行于 x-axis 的直线 y=b 不断向上移动,触碰到这个二次函数的最底部时,取得不等式的相等条件,即优化参数
解出
注意
但是解参数的过程中
SMO
类似线性方程组求解,超越方程求解的迭代法,求取一个近似解
首先确定一个初值
由
则原优化目标变成一个只与
直观来看,KKT条件违背的程度越大,则变量更新后可能导致的目标函数值减幅越大。于是,SMO 先选取违背 KKT 条件程度最大的变量,第二个变量应选择一个使目标函数值减小最快的变量,但由于比较各变量所对应的目标函数值减幅的复杂度过高,因此 SMO 采用了一个启发式:使选取的两变量所对应样本之间的间隔最大
此时,可解得
核函数
为了将问题拓展到非线性空间,总是可以通过增加维数(当然可以不增加,甚至减少,比如 LDA)来将非线性分类问题映射到更高维的空间,使得问题在这个更高维度的空间线性可分,比如对异或问题
最终,其实就是把样本
注意到,此时大部分公式基本无差,只是
这里,我们记
并称之为核函数,而对于每一对
显然,从物理意义上出发,两个参数是对称的,或者说可交换位置的,故核矩阵是对称的。以及,本身向量内积某种程度上反映了两个向量的相似程度,主对角线上元素显然是较大的。此外,核矩阵运算结果是半正定的。
事实上,对于一个半正定核矩阵,总能找到一个与之对应的
,换言之,任何一个核函数都隐式地定义了一个称为 Reproducing Kernel Hilbert Space 的特征空间
那么如何构造核函数?答案是比较困难,一般有几个现成的核函数,其中线性核(其实就是普通 SVM,没做任何变换)、高斯核最常用
那原来的
软间隔
分类问题中,也有可能出现无法分类的情况(本身就存在一定的交叉地带),此时我们则需要引入软间隔概念
软间隔的核心思想就是:让不满足分类条件的(即分类错误的、在分隔带上的)样本所带来的代价尽可能小
对每个样本带来的代价,引入损失函数
其中损失函数
注:这里的 hinge 函数与周志华老师书的 hinge 函数
那么接下来我们考虑 hinge 损失函数,则整个式子变为
同样地,使用拉格朗日乘子法
上式中,前三者为原函数变量,后二者为拉格朗日乘子,在研究对偶问题时请注意区别
KKT 条件
置偏导为 0 后
带入并化简对偶问题,得
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!