数值实验-高斯核函数 python/matlab 实现

6 篇文章 0 订阅
2 篇文章 0 订阅

支持向量机

  • 支持向量:支持平面把两类类别划分开的超平面的向量点
  • 机:一种算法
  • SVM 是一种二分类模型
  • 线性可分支持向量机:通过硬间隔最大化,学习一个线性分类器
  • 线性支持向量机:通过软间隔最大化,学习一个线性分类器
  • 非线性支持向量机:通过核技巧,学习一个非线性分类器

线性可分支持向量机

几何间隔

函数间隔

见 :Python机器学习笔记:SVM(2)——SVM核函数 - 知乎 (zhihu.com)

拉格朗日乘子法

第一种情况:最小值在可行区域内
g ( x ∗ ) < 0 ∇ x f ( x ∗ ) = 0 g(x^*)<0 \\ \nabla _x f(x^*) =0 g(x)<0xf(x)=0
第二种情况:最小值在可行区域外
g ( x ∗ ) = 0 − ∇ x f ( x ∗ ) = α ∇ x g ( x ∗ ) α > 0 g(x^*)=0 \\ -\nabla _x f(x^*) = \alpha \nabla_x g(x^*) \\ \alpha>0 g(x)=0xf(x)=αxg(x)α>0
著名的KKT条件,整合了上面两种情况的条件
∇ x L ( x ∗ , α ∗ ) = 0 α ∗ > 0 α ∗ g ( x ∗ ) = 0 g ( x ∗ ) ≤ 0 \nabla_xL(x^*, \alpha ^*)=0 \\ \alpha ^*>0\\ \alpha^*g(x^*)=0 \\g(x^*) \le 0 xL(x,α)=0α>0αg(x)=0g(x)0

SVM目标函数求解

  • 目标函数:

min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2  s.t.  1 − y ( i ) ( w ⋅ x ( i ) + b ) ≤ 0 , i = 1 , 2 , … , m \min _{w, b} \frac 1 2||w||^2 \\ \text { s.t. }\quad 1-y^{(i)}\left(w \cdot x^{(i)}+b\right) \leq 0, \quad \mathrm{i}=1,2, \ldots, \mathrm{m} w,bmin21w2 s.t. 1y(i)(wx(i)+b)0,i=1,2,,m

  • 构造拉格朗日函数:

L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 m α ( i ) y ( i ) ( w ⋅ x ( i ) + b ) + ∑ i = 1 m α ( i ) L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{m} \alpha^{(i)} y^{(i)}\left(w \cdot x^{(i)}+b\right)+\sum_{i=1}^{m} \alpha^{(i)} L(w,b,α)=21w2i=1mα(i)y(i)(wx(i)+b)+i=1mα(i)

  • 根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:

原 始 问 题 : min ⁡ w , b max ⁡ α L ( w , b , α ) 对 偶 问 题 : max ⁡ α min ⁡ w , b L ( w , b , α ) 原始问题:\qquad \qquad \min _{w, b} \max _{\alpha} L(w, b, \alpha) \\ 对偶问题:\qquad \qquad \max _ \alpha \min _{w,b} L(w, b, \alpha) :w,bminαmaxL(w,b,α):αmaxw,bminL(w,b,α)

线性支持向量机

非线性支持向量机

核技巧

原空间: x = ( x 1 , x 2 ) T x=(x_1,x_2)^T x=(x1,x2)T

新空间: z = ( z 1 , z 2 ) T z=(z_1,z_2)^T z=(z1,z2)T

设原空间到新空间的变换 z = ϕ ( x ) = ( x 1 2 + x 2 2 ) T z=\phi (x) =(x_1^2+x_2^2)^T z=ϕ(x)=(x12+x22)T

则把原空间中的椭圆 w 1 x 1 2 + w 2 x 2 2 + b = 0 w_1x_1^2+w_2 x_2^2+b=0 w1x12+w2x22+b=0 变换为新空间中的直线 w 1 z 1 + w 2 z 2 + b = 0 w_1z_1+w_2 z_2+b=0 w1z1+w2z2+b=0

高斯核公式:
k ( x , z ) = exp ⁡ ( − ∥ x − z ∥ 2 2 σ 2 ) k(x, z)=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) k(x,z)=exp(2σ2xz2)

def gauss_kernel(x,z,delta):
    m,n = np.shape(x)
    k = np.mat(np.zeros((m,1)))
    for i in range(m):
        delta_row=x[i,:] - z
        k[i] = delta_row * delta_row.T
    k = np.exp(k/(-2*delta)**2)
    return k

数值实验

在平面 R 2 R^2 R2 上取矩形 I = [ − 5 , 5 ] × [ − 5 , 5 ] I=[-5,5] \times [-5,5] I=[5,5]×[5,5] ,并在 I I I 中随机产生100个样本点,作为训练样本点,得到训练样本集 Ω = { ( x i , y i ) ∣ i = 1 , 2 , . . . , 100 } ⊂ I × { − 1 , + 1 } \Omega =\{(x_i,y_i)|i=1,2,...,100 \} \subset I \times \{-1,+1 \} Ω={(xi,yi)i=1,2,...,100}I×{1,+1} ,其中,如果 x i x_i xi 落在圆 t 1 2 + t 2 2 = 16 ( ( t 1 , t 2 ) ) ∈ R 2 t^2_1+t^2_2=16 ((t_1,t_2)) \in \bf R^2 t12+t22=16((t1,t2))R2内,则取 y i = − 1 y_i=-1 yi=1 , 否则取 y i = + 1 y_i=+1 yi=+1

​ 采用Gauss支撑向量机进行学习。Gauss核函数的参数选取及其分类效果,见表4.4.1.学习后的得到的分类曲线见图4.4.1

高斯核中的 σ 的值100个训练样本中SV的个数300个实验样本被误分的个数
0.199205
0.564103
20.03748
26.05224
28.05614
29.0559
30.0608
50.06252
200.06353
代码见 GitHub
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gouzy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值