SVM 分类

1 目的和思想

SVM 模型的目的:二分类和多分类
SVM 的整体思想:用多个面,将其分为多个部分

2 模型原理

模型实现:

  1. 通过训练数据,拟合,得到模型的参数值

3 模型推导

  1. 二维线性可分离模型是 w T + b = 0 w^T+b=0 wT+b=0,训练集可以如下线性划分:
    if y i = + 1 , is w T + b ≥ 0 \text{if}\quad y_i=+1,\text{is}\quad w^T+b \geq 0 ifyi=+1iswT+b0 if y i = − 1 , is w T + b < 0 \text{if}\quad y_i=-1,\text{is}\quad w^T+b < 0 ifyi=1iswT+b<0
  2. 模型是线性可分离的,可以得到基本模型
    y i ( w T + b ) ≥ 0 y_i(w^T+b) \geq 0 yi(wT+b)0
  3. 通过 1) 和 2) , 得到 ∣ ∣ w ∣ ∣ ||w|| w 越小, d d d 越大
    1) w T + b = 0 w^T+b=0 wT+b=0 a w T + a b = 0 aw^T+ab=0 awT+ab=0 是同一个面,如果 ( w , b ) (w,b) (w,b) 满足基本模型,那么 ( a w , a b ) (aw,ab) (awab) 也满足基本模型
    2)矢量到平面的距离
    d = ∣ w T + b ∣ ∣ ∣ w ∣ ∣ d = \tfrac{|w^T+b|}{||w||} d=wwT+b
  4. 根据 2 和 3 ,推导了SVM的基本模型
    m i n 1 2 ∣ ∣ w ∣ ∣ 2 min \quad \tfrac{1}{2}||w||^2 min21w2 s . t . y i ( w T + b ) ≥ 1 s.t. \quad y_i(w^T+b) \geq 1 s.t.yi(wT+b)1
  5. 在支持向量机的线性基本形式的基础上,将其改进为非线性解。 需在目标函数添加一个正则项并将低维 x x x 转换为高维 φ ( x ) \varphi(x) φ(x),得到
    K ( x i , y i ) = φ ( x i ) T φ ( y i ) K(x_i,y_i)=\varphi(x_i)^T\varphi(y_i) K(xi,yi)=φ(xi)Tφ(yi)
  6. SVM非线性原函数如下
    m i n 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 N ξ i min \quad \tfrac{1}{2}||w||^2+C\sum_{i=1}^N \xi_i min21w2+Ci=1Nξi s . t . y i ( w T x i + b ) ≥ 1 − ξ i s.t. \quad y_i(w^Tx_i+b) \geq 1-\xi_i s.t.yi(wTxi+b)1ξi ξ i ≥ 0 \xi_i \geq 0 ξi0
  7. 通过将原始函数转换为对偶函数的原理,将SVM非线性转换为对偶问题
    m a x θ ( α , β ) = i n f { 1 2 ∣ ∣ w ∣ ∣ 2 − C ∑ i = 1 N ξ i + ∑ i = 1 N β i ξ i + ∑ i = 1 N α i [ 1 + ξ i − y i w T φ ( x 2 ) − y i b ] } max \quad \theta(\alpha, \beta)=inf\{\tfrac{1}{2}||w||^2-C\sum_{i=1}^N \xi_i+\sum_{i=1}^N \beta_i\xi_i+\sum_{i=1}^N \alpha_i[1+\xi_i-y_iw^T\varphi(x_2)-y_ib]\} maxθ(α,β)=inf{21w2Ci=1Nξi+i=1Nβiξi+i=1Nαi[1+ξiyiwTφ(x2)yib]} s . t . α i ≥ 0 ( i = 1 ∼ N ) s.t.\quad \alpha_i\geq 0 \quad (i=1\sim N) s.t.αi0(i=1N) β i ≥ 0 \beta_i\geq 0 βi0
  8. 通过对 ω , ξ , b \omega,\xi,b ω,ξ,b分别求导,得到
    m a x θ ( α ) = ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , y i ) max \quad \theta(\alpha)=\sum_{i=1}^N \alpha_i- \tfrac{1}{2}\sum_{i=1}^N \sum_{j=1}^N \alpha_i\alpha_j y_i y_jK(x_i,y_i) maxθ(α)=i=1Nαi21i=1Nj=1NαiαjyiyjK(xi,yi) s . t . 0 ≤ α i ≥ C s.t. \quad0\leq \alpha_i \geq C s.t.0αiC ∑ i = 1 N α i y j = 0 \sum_{i=1}^N \alpha_iy_j =0 i=1Nαiyj=0
  9. 最优化求解,得到
    w T φ ( x ) = ∑ i = 1 N α i y i K ( x i , x ) w^T\varphi(x)=\sum_{i=1}^N \alpha_iy_iK(x_i,x) wTφ(x)=i=1NαiyiK(xi,x)
  10. 通过KKT条件后,求出 b b b 的值
    b = 1 − y i ∑ i = 1 N α i y i K ( x i , x ) y i b=\frac{1-y_i\sum_{i=1}^N \alpha_iy_iK(x_i,x)}{y_i} b=yi1yii=1NαiyiK(xi,x)
  11. 模型测试,输入样本,可得到结果
    ∑ i = 1 N x i y i K ( x i , x ) + b ≥ 0 ⇒ y = + 1 \sum_{i=1}^N x_iy_iK(x_i,x)+b \geq 0 \quad \Rightarrow \quad y=+1 i=1NxiyiK(xi,x)+b0y=+1 ∑ i = 1 N x i y i K ( x i , x ) + b < 0 ⇒ y = − 1 \sum_{i=1}^N x_iy_iK(x_i,x)+b < 0 \quad \Rightarrow \quad y=-1 i=1NxiyiK(xi,x)+b<0y=1

4 SVM 总结

SVM 分类时训练数据如果非常大,时间消耗就会很大,同时对多分类问题效果不算太好

5 SVM 函数使用

5.1 输入

特征值+目标值

data = [[5.5, 4.7, 1.3, 0],
        [3.2, 7.2, 1.8, 0],
        [6.9, 11.7, 10.3, 1],
        [5.2, 7.8, 4.5, 0],
        [8.8, 9.9, 10.1, 1],
        [3.4, 7.5, 8.4, 1]]
data=np.array(data)

5.2 函数及参数

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import numpy as np

x, y = np.split(data,
                (3,),    # 前 3列作为特征值
                axis=1)  # 1: 以列的方式  0: 以行的方式
                
x_train, x_test, y_train, y_test = train_test_split(x, y,
                                                    random_state=2,  # 用于洗牌,打乱数据
                                                    train_size=0.5)  # 训练样本占比
                                                    
model = SVC(C=0.6,         # 误差上限, 默认 0.5
          kernel='rbf',  # 指定核函数
          gamma=10)      # 核系数
model.fit(x_train, y_train.ravel())  # ravel():将二维转为一维

5.3 输出及应用

print(model.score(x_train, y_train))  # 精确度
y_predict = model.predict(x_test)     # 测试集预测
print(y_predict)
print(model.score(x_test, y_test))

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值