接着svm原理其一,讲():

svm 线性支持向量机

python SLIC代码实现 python lssvm_公式推导


如图,有直线L1,L2来划分两个类别,但是L2出现了一个样本分类错误,根据线性可分支持向量机可知,我们是按距离一个分割面最近的样本点(如上图的d1,d2这里d1=d2,我们可以调节直线的平行位置来使得d1=d2,如果有其他的样本点的值也等于d1或者d2那么这些样本点也需要取出来)的距离比距离其他分割面最近的样本点的距离都要大,那么这个分割面就是最好的。 来选最优分割面的,但很明显L2除了一个样本分错了外,比L1更符合要求。那么这时候我们就用到了线性支持向量机了。

1.线性支持向量机的思想

线性支持向量机的思想和线性可分支持向量机是差不多的,只不过比可分向量机多了一个参数python SLIC代码实现 python lssvm_支持向量机_02,这个参数的名字叫做“松弛因子”,且ζ>=0

2.基于线性可分支持向量机的数学公式推导

首先我们要知道松弛因子有什么用,其最终目的是让这个分割平面具有容错的能力。我们已知对于每一个样本有一个函数距离,我们要用这个函数距离来体现容错这一特性。
在线性可分支持向量机中有一个约束条件:
python SLIC代码实现 python lssvm_公式推导_03>=1
我们把它变成下式:
python SLIC代码实现 python lssvm_公式推导_03>=1python SLIC代码实现 python lssvm_公式推导_05
那么
每一个样本的函数距离就不一定大于1了,so,就有样本容错能力了
新的目标函数为:python SLIC代码实现 python lssvm_svm_06
新目标函数等价为:python SLIC代码实现 python lssvm_python SLIC代码实现_07
这里的C是python SLIC代码实现 python lssvm_支持向量机_02的参数,C>0
约束条件:
python SLIC代码实现 python lssvm_公式推导_03>=1python SLIC代码实现 python lssvm_公式推导_05
ζi>=0
则拉格朗日函数为:
python SLIC代码实现 python lssvm_约束条件_11-1python SLIC代码实现 python lssvm_python SLIC代码实现_12
对w,b,python SLIC代码实现 python lssvm_支持向量机_02求偏导:
python SLIC代码实现 python lssvm_svm_14

python SLIC代码实现 python lssvm_python SLIC代码实现_15

python SLIC代码实现 python lssvm_svm_16
这一个的过程和可分的一样,将上面三个式子带回去就可得:
python SLIC代码实现 python lssvm_python SLIC代码实现_17
约束条件为:
python SLIC代码实现 python lssvm_约束条件_18
python SLIC代码实现 python lssvm_公式推导_19

αi>=0

μi>=0

到了这一步,让后用SMO优化方法对上面的式子进行求解
至于SMO算法内容有点复杂,还在学习中

3.损失函数
1.0/1损失

样本分对了就令其y值为0,也就是没损失

分错了令其y值为1,有损失

python SLIC代码实现 python lssvm_支持向量机_20

2.Logistic损失函数

公式:

python SLIC代码实现 python lssvm_python SLIC代码实现_21

横轴代表python SLIC代码实现 python lssvm_svm_22

python SLIC代码实现 python lssvm_公式推导_23


这个知道一下就好

3.Hinge损失

即使是分对了也会有损失

python SLIC代码实现 python lssvm_约束条件_24


只有在虚线两边的没有损失

这里有一个参数python SLIC代码实现 python lssvm_支持向量机_02,Hinge图是根据这个参数来画的

python SLIC代码实现 python lssvm_约束条件_26


到目前为止我不知道这个损失函数有什么用

非线性支持向量机

1.核函数

可以使用核函数,将原始输入空间映射到新的特征空间,从而,使得原本线性不可分的样本可能在核空间可分
多项式核函数:python SLIC代码实现 python lssvm_svm_27python SLIC代码实现 python lssvm_公式推导_28为常数
高斯核函数RBF:python SLIC代码实现 python lssvm_约束条件_29
Sigmoid核:python SLIC代码实现 python lssvm_svm_30python SLIC代码实现 python lssvm_svm_31为常数
在实际应用中,往往依赖已经得到的结论或交叉验证等方案才能选择有效的核函数(没有任何东西作为借鉴的时候,用高斯核函数)