1. 支持向量机
1.1 原理
支持向量机(Support Vector Machine)通过最大化间隔思想 解决分类或回归任务的方法
1.1.1 支持向量分类
支持向量分类(SVC)通过最大化距离分类超平面最近样本点之间的间隔求解分类模型,分为硬间隔分类和软间隔分类,其中距离分类决策面最近的样本点称为支持向量
假设给定一个大小为 n n n的数据集:
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . , ( x n , y n ) } \boldsymbol{D} = \{ (\pmb{x_1},y_1), (\pmb{x_2}, y_2),.....,(\pmb{x_n}, y_n) \} D={
(x1x1x1,y1),(x2x2x2,y2),.....,(xnxnxn,yn)}
则SVC的线性分类决策面函数为:
f ( x i ) = w T x i + b f(\pmb{x_i}) = \pmb{w}^T\pmb{x_i}+b f(xixixi)=wwwTxixixi+b
根据最大化样本硬间隔可得学习表达式:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , 3 , . . . , n (1) \begin{aligned} & \underset{\boldsymbol{w,b}} {\min } \quad \frac{1}{2} ||\boldsymbol w||^2\\ &s.t. \quad y_i(\pmb{w}^T\pmb{x_i}+b) \ge1, \quad i=1,2,3,...,n\\ \tag{1} \end{aligned} w,bmin21∣∣w∣∣2s.t.yi(wwwTxixixi+b)≥1,i=1,2,3,...,n(1)
然而对于部分异常点和噪声点导致支持向量硬间隔分类模型难以线性可分或鲁棒性差,严重影响分类模型的预测效果,对此引入了软间隔分类,即对每个样本 ( x i , y i ) (\pmb {x_i}, y_i) (xixixi,yi)引入松弛变量 ξ ≥ 0 \xi\ge0 ξ≥0,使得几何间隔加上松弛变量大于等于1
- ξ = 0 \xi=0 ξ=0 时,样本正确分类
- 0 < ξ < 1 0<\xi <1 0<ξ<1 时,样本在集合间隔和超平面之间
- ξ = 1 \xi=1 ξ=1 时,样本在超平面上
- ξ > 1 \xi>1 ξ>1 时,样本错误分类
对于 ξ > 0 \xi>0 ξ>0的样本都称为支持向量
则式(1)可改写为:
min w , b , ξ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ i s . t . y i ( w T x i + b ) ≥ 1 − ξ i ξ i ≥ 0 , i = 1 , 2 , 3 , . . . , n \begin{aligned} & \underset{\boldsymbol{w,b, \xi}} {\min } \quad \frac{1}{2} ||\boldsymbol w||^2 + C\sum_{i=1}^{n}\xi_i\\ &s.t. \quad y_i(\pmb{w}^T\pmb{x_i}+b) \ge1 -\xi_i\\ & \quad \quad \text { } \xi_i \ge 0, \quad i=1,2,3,...,n \end{aligned} w,b,ξmin21∣∣w∣∣2+Ci=1∑nξis.t.yi(wwwTxixixi+b)≥1−ξi ξi≥0,i=1,2,3,...,n
其中 C > 0 C>0 C>0为正则化惩罚系数(超参数),用于协调 w \pmb w www和 ξ \xi ξ两者之间的关系
1.1.2 支持向量回归
支持向量回归(SVR)通过引入容忍区域并且最大化容忍区域的间隔同时最小化总损失求解回归模型,分为硬间隔回归和软间隔回归,其中通过人为设定ε偏差控制最大化容忍区域的间隔
- 容忍区域内的样本点不计入损失
- 容忍区域外的样本点需要计入损失
对于容忍区域内的样本点都称为支持向量
假设给定一个大小为 n n n的数据集:
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . , ( x n , y n ) } \boldsymbol{D} = \{ (\pmb{x_1},y_1), (\pmb{x_2}, y_2),.....,(\pmb{x_n}, y_n) \} D={
(x1x1x1,y1),(x2x2x2,y2),.....,(xnxnxn,yn)}
则SVR的线性回归决策面函数为:
f ( x i ) = w T x i + b f(\pmb{x_i}) = \pmb{w}^T\pmb{x_i}+b f(xixixi)=wwwTxixixi+b
根据最大化容忍区域的硬间隔同时最小化总损失可得学习表达式:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 0 n l ε ( f ( x i ) − y i ) , i = 1 , 2 , 3 , . . . , n (2) \begin{aligned} & \underset{\boldsymbol{w,b}} {\min } \quad \frac{1}{2} ||\boldsymbol w||^2 + C\sum_{i=0}^{n}l_ε(f(\pmb {x_i}) - y_i), \quad i=1,2,3,...,n \tag{2} \end{aligned} w,bmin21∣∣w∣∣2+Ci=0∑nlε(f(xixixi)−yi),i=1,2,3,...,n(2)
其中 C > 0 C>0 C>0为正则化惩罚系数(超参数)用来控制容忍程度; l ε l_ε lε为损失函数,定义如下:
l ε ( f ( x i ) − y i ) = { 0 , ∣ f ( x i ) − y i ∣ ≤ ε ∣ f ( x i ) − y i ∣ − ε , ∣ f ( x i ) − y i ∣ > ε l_ε(f(x_i) - y_i)= \begin{cases} 0, & |f(\pmb {x_i}) - y_i| \leε \\ |f(\pmb{x_i}) - y_i|-ε, & |f(\pmb{x_i}) - y_i|\gtε \end{cases} lε(f(xi)−yi)={
0,∣f(xixixi)−yi∣−ε,∣f(xixixi)−yi∣≤ε∣f(xixixi)−yi∣>ε
同样对于部分异常点和噪声点导致支持向量硬间隔回归模型难以确定合适ε保证大部分数据在容忍区域内,严重影响回归模型的预测效果,对此引入了软间隔回归,即对每个样本 ( x i , y i ) (\pmb {x_i}, y_i) (xixixi,yi)引入松弛变量 ( ξ ′ , ξ ) ≥ 0 (\xi',\xi) \ge0 (ξ′,ξ)≥0,扩大容忍区域范围,其中 ξ ′ \xi' ξ′和 ξ \xi ξ可为不同值
则式(2)可改写为:
min w , b , ξ ′ , ξ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ( ξ i ′ + ξ i ) s . t . y i − f ( x i ) ≤ ε + ξ i ′ f ( x i ) − y i ≤ ε + ξ i ξ i ′ ≥ 0 , ξ i ≥ 0 , i = 1 , 2 , 3 , . . . , n \begin{aligned} & \underset{\boldsymbol{w,b, \xi', \xi}} {\min } \quad \frac{1}{2} ||\boldsymbol w||^2 + C\sum_{i=1}^{n}(\xi'_i+\xi_i)\\ &s.t. \quad y_i - f(\pmb{x_i}) \leε +\xi'_i\\ & \quad \text{ } \quad f(\pmb{x_i}) - y_i \leε +\xi_i\\ & \quad \quad \text { } \xi'_i \ge 0, \text{ }\xi_i \ge 0,\quad i=1,2,3,...,n \end{aligned} w,b,ξ′,ξmin21∣∣w∣∣2+Ci=1∑n(ξi′+ξi)s.t.yi−f(xixixi)≤ε+ξi′ f(xixixi)−yi≤ε+ξi ξi′≥0, ξi≥0,i=1,2,3,...,n
其中 C > 0 C>0 C>0为正则化惩罚系数(超参数),用于协调 w \pmb w www和( ξ ′ , ξ \xi',\xi ξ′,ξ)两者之间的关系
1.1.3 核方法
核方法通过将输入空间中线性不可分的数据映射到一个高维的特征空间内,使得输入数据在高维特征内线性可分以解决输入数据线性不可分的情况,其中映射函数定义为 ϕ ( x ) \phi(\pmb x) ϕ(xxx)
根据对支持向量求解凸二次规划的最优化算法,可知在求解项中存在 x i T x j \pmb{x_i}^T \pmb{x_j} xixixiTxjxjxj,通过映射函数将输入数据映射到高维空间解决线性不可分任务,即 x i T x j ⇒ ϕ ( x i ) T ϕ ( x j ) \pmb{x_i}^T \pmb{x_j} \Rightarrow \phi(\pmb {x_i})^T\phi(\pmb {x_j}) xixixiTxjxjxj⇒ϕ(xixixi)Tϕ(xjxjxj)
为了避免映射函数导致维度爆炸式增大带来计算困难的问题,核方法定义相关核函数:
κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) \kappa(\pmb{x_i}, \pmb {x_j})= \phi(\pmb {x_i})^T\phi(\pmb {x_j}) κ(xixixi,xjxjxj)=ϕ(xixixi)Tϕ(xjxjxj)
因此 x i \pmb {x_i} xixixi和 x j \pmb {x_j} xjxjxj在特征空间的内积映射由原输入空间内通过核函数 κ ( x i , x j ) \kappa(\pmb{x_i}, \pmb {x_j}) κ(xixixi,xjxjxj)计算完成,避免了高维特征空间的内积
常见的核函数有:
(1)线性核函数(Linear Kernel)
κ ( x i , x j ) = x i T x j \kappa(\pmb{x_i}, \pmb {x_j})= \pmb{x_i}^T \pmb{x_j} κ(xixixi,xjxjxj)=xixixiTxjxjxj
即针对线性可分任务
(2)径向基核函数(Radial Basis Function),即高斯核函数(Gaussian Kernel)
κ ( x i , x j ) = e x p ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) \kappa(\pmb{x_i}, \pmb {x_j})= exp{(-\gamma||\pmb {x_i}-\pmb {x_j}||^2)}= exp(-\frac{||\pmb {x_i}-\pmb {x_j}||^2}{2\sigma^2}) κ(xixixi,xjxjxj)=exp(−γ∣∣xixixi−xjxjxj∣∣2)=exp(−2σ2∣∣xixixi−xjxjxj∣∣2)
其中 γ , σ > 0 \gamma,\sigma>0 γ,σ>0
(3)多项式核函数(Polynomial Kernel)
κ ( x i , x j ) = ( γ x i T x j + b ) d \kappa(\pmb{x_i}, \pmb {x_j})= (\gamma\pmb{x_i}^T \pmb{x_j}+b)^d κ(xixixi,xjxjxj)=(γxixixiTxjxjxj+b)d
其中 d ≥ 1 d\ge1 d≥1为多项式的次数, γ > 0 \gamma>0 γ>0
(4)Sigmoid核函数(Sigmoidl Kernel)
κ ( x i , x j ) = t a n h ( γ x i T x j + b ) \kappa(\pmb{x_i}, \pmb {x_j})= tanh(\gamma\pmb{x_i}^T \pmb{x_j}+b) κ(xixixi,xjxjxj)=tanh(γxixixiTxjxjxj+b)
其中 t a n h tanh tanh为双曲正切函数, γ > 0 \gamma \gt 0 γ>0
1.2 sklearn实现
参考官方文档:点击查看
支持向量分类可通过sklearn库中svm下的SVC类实现
有关参数:
- C:反向控制正则化惩罚项的权重,数值越大,正则化程度越小
- kernel:核函数的类型,可自定义函数或输入预计算结果
- degree:多项式核函数中的多项式次数d
- gamma:核函数中的γ系数
- coef0:核函数中的b系数
- shrinking:迭代过程是否使用收缩启发式
- probability:是否使用概率估计
- tol:求解过程中的残差(当小于该值时停止计算)
- cache_size:内核缓存大小
- class_weight:各类别的权重
- verbose:是否启用详细输出
- max_iter:求解器内的硬性限制
- decision_function_shape:决策函数的类型,one-vs-rest(‘ovr’)或one-vs-one(‘ovo’)
- break_ties:是否打破决策函数中各类别的相互关系,仅适用于’ove’类型且类别数大于2
- random_state:用于控制伪随机数生成器的种子,对数据进行随机排列方便进行概率估计
有关属性:
- class_weight_:各类别的权重
- classes_:各类别的标签
- coef_:线性决策函数中各特征的权重值
- dual_coef_:用于计算决策函数中各权重值的对偶系数(计算方法:点击查看)
- fit_status_:拟合情况,0代表正确,其余代表警告
- intercept_:决策函数中的常数项
- n_features_in_:自变量(特征值)的个数
- feature_names_in_:自变量的名称,仅当输入自变量有(字符)名称时可用
- n_iter_:所有类满足残差要求时的迭代次数
- support_:支持向量在输入数据的索引
- support_vectors_:支持向量
- n_support_:每个类别的支持向量个数
- probA_:使用概率估计时的参数A
- probB_:使用概率估计时的参数B
- shape_fit_:训练数据的维度
有关方法:
- decision_function:计算输入数据在决策函数上的预测值
- fit:拟合支持向量机模型
- get_params:获取对应模型参数
- predict:预测类别
- predict_log_proba:预测类别概率的对数
- predict_proba:预测类别概率
- score:获取给定数据集的平均准确度
- set_params:设置对应模型参
使用案例
>>> import numpy as np
>>> from sklearn.svm import SVC
>>> clf = SVC(kernel='linear') #实例化支持向量分类模型对象
>>> X = np.array([[1, 1], [3, 2], [4, 7], [2, 5]]) #数据
>>> y = np.array([1, 1, 0, 0]) #类别
>>> clf.fit(X, y) #拟合求解
>>> reg.classes_
[0, 1]
>>> clf.coef_
[0.2, -0.6]
>>> clf.dual_coef_
[-0.2, 0.2]
>>> clf.intercept_
1.6
>>> clf.n_features_in_
2
>>> clf.support_vectors_
[[2, 5], [3, 2]]
>>> clf.decision_function(X)
[1.2, 1.0, -1.8, -1]
>>> clf.predict([[1, 3], [5, 2]])
[1, 1]
>>> clf.score(X, y)
1.0
另外svm下的分类模型还有LinearSVC类以及NuSVC类,对应的分类决策面函数,点击查看;
对于回归模型,svm下通过SVR类,LinearSVR类以及NuSVR类实现,对应的回归决策模型,点击查看