Python svm原理其二

接着svm原理其一,讲(https://blog.csdn.net/qq_43372138/article/details/83934586):

svm 线性支持向量机

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

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

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

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

首先我们要知道松弛因子有什么用,其最终目的是让这个分割平面具有容错的能力。我们已知对于每一个样本有一个函数距离,我们要用这个函数距离来体现容错这一特性。
在线性可分支持向量机中有一个约束条件:
y i ⋅ ( w T ϕ ( x i ) + b ) y_i\cdot (w^T\phi(x_i)+b) yi(wTϕ(xi)+b)>=1
我们把它变成下式:
y i ⋅ ( w T ϕ ( x i ) + b ) y_i\cdot (w^T\phi(x_i)+b) yi(wTϕ(xi)+b)>=1 − ζ i -\zeta_i ζi
那么
每一个样本的函数距离就不一定大于1了,so,就有样本容错能力了
新的目标函数为: m a x w , b , ζ 1 − ζ i ∣ ∣ w ∣ ∣ \begin{array}{}max\\w,b,\zeta\end{array} \frac{1-\zeta_i}{||w||} maxwbζw1ζi
新目标函数等价为: m i n w , b , ζ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ζ i \begin{array}{}min\\w,b,\zeta\end{array} \frac{1}{2}||w||^2+C\sum_{i=1}^n\zeta_i minwbζ21w2+Ci=1nζi
这里的C是 ζ \zeta ζ的参数,C>0
约束条件:
y i ⋅ ( w T ϕ ( x i ) + b ) y_i\cdot (w^T\phi(x_i)+b) yi(wTϕ(xi)+b)>=1 − ζ i -\zeta_i ζi
ζ i > = 0 \zeta_i>=0 ζi>=0
则拉格朗日函数为:
L ( w , b , ζ , α , μ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ζ i − ∑ i = 1 n α i ( y i ⋅ ( w T ϕ ( x i ) + b ) L(w,b,\zeta,\alpha,\mu)=\frac{1}{2}||w||^2+C\sum_{i=1}^n\zeta_i-\sum_{i=1}^n\alpha_i(y_i\cdot (w^T\phi(x_i)+b) L(w,b,ζ,α,μ)=21w2+Ci=1nζii=1nαi(yi(wTϕ(xi)+b)-1 + ζ i ) − ∑ i = 1 n μ i ζ i +\zeta_i)-\sum_{i=1}^n\mu_i\zeta_i +ζi)i=1nμiζi
对w,b, ζ \zeta ζ求偏导:
ϑ L ϑ w = 0 ⟹ w = ∑ i = 1 n α i y i ϕ ( x i ) \frac{\vartheta L}{\vartheta w}=0\Longrightarrow w=\sum_{i=1}^n\alpha_iy_i\phi(x_i) ϑwϑL=0w=i=1nαiyiϕ(xi)

ϑ L ϑ b = 0 ⟹ 0 = ∑ i = 1 n α i y i \frac{\vartheta L}{\vartheta b}=0\Longrightarrow0=\sum_{i=1}^n\alpha_iy_i ϑbϑL=00=i=1nαiyi

ϑ L ϑ ζ = 0 ⟹ C − α i − μ i = 0 \frac{\vartheta L}{\vartheta \zeta}=0\Longrightarrow C-\alpha_i-\mu_i=0 ϑζϑL=0Cαiμi=0
这一个的过程和可分的一样,将上面三个式子带回去就可得:
m a x α ( ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j ϕ T ( x i ) ϕ ( x j ) ) \begin{array}{}max\\\alpha\end{array}(\sum_{i=1}^n \alpha_i-\frac{1}{2}\sum_{i,j=1}^n\alpha_i\alpha_jy_iy_j\phi^T(x_i)\phi(x_j)) maxα(i=1nαi21i,j=1nαiαjyiyjϕT(xi)ϕ(xj))
约束条件为:
∑ i = 1 n α i y i = 0 \sum_{i=1}^n\alpha_iy_i=0 i=1nαiyi=0
C − α i − μ i = 0 C-\alpha_i-\mu_i=0 Cαiμi=0
α i > = 0 \alpha_i>=0 αi>=0
μ i > = 0 \mu_i>=0 μi>=0
到了这一步,让后用SMO优化方法对上面的式子进行求解
至于SMO算法内容有点复杂,还在学习中

3.损失函数
1.0/1损失

样本分对了就令其y值为0,也就是没损失
分错了令其y值为1,有损失
在这里插入图片描述

2.Logistic损失函数

公式:
l n ( 1 + e i y ) / l e n ( 2 ) ln(1+e^y_i)/len(2) ln(1+eiy)/len(2)
横轴代表 y i y_i yi
在这里插入图片描述
这个知道一下就好

3.Hinge损失

即使是分对了也会有损失
在这里插入图片描述
只有在虚线两边的没有损失
这里有一个参数 ζ \zeta ζ,Hinge图是根据这个参数来画的
在这里插入图片描述
到目前为止我不知道这个损失函数有什么用

非线性支持向量机

1.核函数

可以使用核函数,将原始输入空间映射到新的特征空间,从而,使得原本线性不可分的样本可能在核空间可分
多项式核函数: K ( x 1 , x 2 ) = ( α ⋅ ∣ ∣ x 1 − x 2 ∣ ∣ a + r ) b K(x_1,x_2)=(\alpha \cdot ||x_1-x_2||^a+r)^b K(x1,x2)=(αx1x2a+r)b α , a , b , r \alpha,a,b,r α,a,b,r为常数
高斯核函数RBF: K ( x 1 , x 2 ) = e x p ( − ∣ ∣ x 1 − x 2 ∣ ∣ 2 2 σ 2 ) K(x_1,x_2)=exp(-\frac{||x_1-x_2||^2}{2\sigma^2}) K(x1,x2)=exp(2σ2x1x22)
Sigmoid核: K ( x 1 , x 2 ) = t a n h ( γ ⋅ ∣ ∣ x 1 − x 2 ∣ ∣ a + r ) K(x_1,x_2)=tanh(\gamma \cdot ||x_1-x_2||^a+r) K(x1,x2)=tanh(γx1x2a+r) γ , a , r \gamma,a,r γ,a,r为常数
在实际应用中,往往依赖已经得到的结论或交叉验证等方案才能选择有效的核函数(没有任何东西作为借鉴的时候,用高斯核函数)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值