1 目的和思想
SVM 模型的目的:二分类和多分类
SVM 的整体思想:用多个面,将其分为多个部分
2 模型原理
模型实现:
- 通过训练数据,拟合,得到模型的参数值
3 模型推导
- 二维线性可分离模型是
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=+1,iswT+b≥0 if y i = − 1 , is w T + b < 0 \text{if}\quad y_i=-1,\text{is}\quad w^T+b < 0 ifyi=−1,iswT+b<0 - 模型是线性可分离的,可以得到基本模型
y i ( w T + b ) ≥ 0 y_i(w^T+b) \geq 0 yi(wT+b)≥0 - 通过 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) (aw,ab) 也满足基本模型
2)矢量到平面的距离
d = ∣ w T + b ∣ ∣ ∣ w ∣ ∣ d = \tfrac{|w^T+b|}{||w||} d=∣∣w∣∣∣wT+b∣ - 根据 2 和 3 ,推导了SVM的基本模型
m i n 1 2 ∣ ∣ w ∣ ∣ 2 min \quad \tfrac{1}{2}||w||^2 min21∣∣w∣∣2 s . t . y i ( w T + b ) ≥ 1 s.t. \quad y_i(w^T+b) \geq 1 s.t.yi(wT+b)≥1 - 在支持向量机的线性基本形式的基础上,将其改进为非线性解。 需在目标函数添加一个正则项并将低维
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) - 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 min21∣∣w∣∣2+Ci=1∑Nξ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 ξi≥0 - 通过将原始函数转换为对偶函数的原理,将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{21∣∣w∣∣2−Ci=1∑Nξi+i=1∑Nβiξi+i=1∑Nαi[1+ξi−yiwTφ(x2)−yib]} s . t . α i ≥ 0 ( i = 1 ∼ N ) s.t.\quad \alpha_i\geq 0 \quad (i=1\sim N) s.t.αi≥0(i=1∼N) β i ≥ 0 \beta_i\geq 0 βi≥0 - 通过对
ω
,
ξ
,
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=1∑Nαi−21i=1∑Nj=1∑NαiαjyiyjK(xi,yi) s . t . 0 ≤ α i ≥ C s.t. \quad0\leq \alpha_i \geq C s.t.0≤αi≥C ∑ i = 1 N α i y j = 0 \sum_{i=1}^N \alpha_iy_j =0 i=1∑Nαiyj=0 - 最优化求解,得到
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=1∑NαiyiK(xi,x) - 通过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=yi1−yi∑i=1NαiyiK(xi,x) - 模型测试,输入样本,可得到结果
∑ 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=1∑NxiyiK(xi,x)+b≥0⇒y=+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=1∑NxiyiK(xi,x)+b<0⇒y=−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))