感知机是SVM的基础,详细介绍请戳http://blog.csdn.net/akirameiao/article/details/79436859
一、原理
1. 线性可分支持向量机
问题的输入输出
X = {
x1,x2,...,xn x 1 , x 2 , . . . , x n }
Y = {+1, -1}
模型:
感知机的目的是找到一个可以正确分类数据的超平面S: ω⋅x+b=0 ω ⋅ x + b = 0 , 得到感知机模型 f(x)=sign(ω⋅x+b) f ( x ) = s i g n ( ω ⋅ x + b ) ,其中 ω⋅x+b>0 ω ⋅ x + b > 0 为正类, ω⋅x+b<0 ω ⋅ x + b < 0 为负类。SVM和感知机最大的差别就是SVM寻找的间隔最大的超平面,所谓间隔,可以理解为实例点到超平面最小的距离,所以SVM找的是把数据正确分隔的”最开”的超平面。
间隔
函数间隔:对于给定的训练数据集T和超平面( ω,b ω , b ), 定义超平面关于样本点( xi,yi x i , y i )的函数间隔为 γ̂ i=yi(ω⋅xi+b) γ ^ i = y i ( ω ⋅ x i + b )
几何间隔:对于给定的训练数据集T和超平面( ω,b ω , b ), 定义超平面关于样本点( xi,yi x i , y i )的几何间隔为 γi=1||ω||yi(ω⋅xi+b)=γ̂ i||ω|| γ i = 1 | | ω | | y i ( ω ⋅ x i + b ) = γ ^ i | | ω | |
所以我们可以建立模型:
输入: T={
(x1,y1),(x2,y2),⋯,(xi,yi)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x i , y i ) }
输出: 分离超平面: ω⋅x+b=0 ω ⋅ x + b = 0 决策函数: f(x)=sign(ω⋅x+b) f ( x ) = s i g n ( ω ⋅ x + b )
策略:
接下来的问题就是找到间隔最大的超平面,记超平面关于实例点的的几何间隔【 1||ω||yi(ω⋅xi+b)≥γi 1 | | ω | | y i ( ω ⋅ x i + b ) ≥ γ i 】, 定义超平面关于所有实例点的几何间隔为【 γ=maxγi γ = m a x γ i 】, 则问题就可以写成【 maxω,bγ m a x ω , b γ , s.t.yi(ω⋅xi+b)≥γi s . t . y i ( ω ⋅ x i + b ) ≥ γ i 】
有几何间隔和函数间隔的关系,问题可以改写为【 maxγ̂ ||ω|| m a x γ ^ | | ω | | 】【 s.t.yi(ω⋅xi+b)≥γ̂ ,i=1,2,⋯,N s . t . y i ( ω ⋅ x i + b ) ≥ γ ^ , i = 1 , 2 , ⋯ , N 】
由于同时成比例的改变 ω ω 和 b ,不会影响超平面的位置,也不会影响不等式约束和目标函数的优化,可以令【 γ̂ =1 γ ^ = 1 】,为了求解的方便,把优化目标改成: min12||ω||2 m i n 1 2 | | ω | | 2 ,约束条件改成 yi(ω⋅xi+b)−1≥0,i=1,2,⋯,N y i ( ω ⋅ x i + b ) − 1 ≥ 0 , i = 1 , 2 , ⋯ , N
算法:
原始算法:
输入:线性可分数据集 T={ (x1,y1),(x2,y2),⋯,(xn,yn)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) } ,其中, xi∈Rn,yi∈{ +1