日常复习SVM

2019-07-22  本文已影响0人  FFFeiYee

        支持向量机(supot vector machine)是机器学习中非常重要的一种算法,在神经网络普及之前,SVM在数据分类领域一直占据着主导地位。特点是对于训练数据集的数量要求不多,并且能够得出很好的效果。


1 线性SVM过程

        决策边界:作为分类数据的边界,如公式1.1所示,W^t作为x(数据)的法向量存在,应与输入数据的维度一致。

  F(X) = W^T ∙ X + B  公式1.1

图1 图片来源百度百科

        支持向量:一个标准的SVM模型,决定其分类效果的主要因素是决策边界。如图1所示,一个理想的SVM模型,其决策边界要与其支持向量保持最大距离,而上文所提到的支持向量就是距离决策边界最近的向量集合。

        优化目标:首先找到一组支持向量,如公式1.2所示。根据找到的支持向量,结合点到超平面的距离公式,继而选出一组W与b的值,可以使决策边界与支持向量的距离最大化,如公式1.3所示。

Min_i (y_i∙x_i+b)    公式1.2

Argmax_{w,b} \frac{Min_i(y_i∙x_i+b)}{||W||}    公式1.3

        根据公式1.1.2,我们可以使用放缩变换使其值大于等于1,所以支持向量到决策边界的距离就为1,故此优化目标可以简化到公式1.4所示。

Max_W,_b \frac{1}{||W||}     公式1.4

        求解过程:由公式1.1.4转化成极小值公式Min_{w,b}  \frac{ ||W||^2}{2},使用拉格朗日乘子法进行求解,其简化方程如公式1.5所示。

L(W,b,a)=\frac{||W||^2-\sum\nolimits_{{i = 1}}^n  a_i[y_i(y_i∙x_i + b) - 1]}{2}      公式1.5

        对W与b求偏导,得到条件:Min_{w,b} Max_a L(w,b,a),根据KKT定义,将其转换成如公式1.6所示条件。

Max_a Min_{w,b} L(w,b,a)     公式1.6

        将求出的偏导分别代入公式5,转换为求极小值公式,得出公式1.7。

Min_a\frac{1}{2}  \sum\nolimits_{i = 1}^m \sum\nolimits_{j = 1}^m a_i a_j y_i y_j x_i x_j  - \sum\nolimits_{i = 1}^m a_i,且\left\{  \sum\nolimits_{i = 1}^m a_iy_i=0; a_i\geq 0\right\}    公式1.7

        最终模型:接下来,我们仅需要将训练数据一一代入公式1.7中,计算得出一组a的值,并将其代入至公式1.8中,得出我们的模型数据。

W=\sum\nolimits_{i = 1}^m a_i y_i x_n    公式1.8

2 非线性SVM过程

        非线性变换:在原本维度的线性不可分数据往往在更高的维度上变得线性可分,SVM就是利用这一特点将线性不可分数据进行分类的。首先,对数据集做非线性变换Φ,利用核函数将其特征映射到更高的维度,得出修改公式1.3为公式2.1,后续求解过程一致不变。

Argmax_{w,b} [\frac{1}{||W||} Min_i (y_i∙Φ(x_i )+b) ]    公式2.1

        函数:是对数据做非线性变换的一系列算法,包括多项式核函数、高斯核函数等。

        多项式核函数:     k(x,x_i )=(x^T x_i+C)^d

        高斯核函数:        

        Sigmoid:            

3 实验与对比

        数据集采用Kaggle数据集:泰坦尼克

        数据文件:train.csv、test.csv

       整体数据集包含891条训练集和418条测试集,每条包含十一位信息,其中有部分缺失。

       求解:补全测试集中的所有是否生存。

图2 数据集信息分布

本文测试用例:

              船票等级    2     Pclass                 891

              性别            4     Sex                     891

              年龄             5     Age                    714

              亲友数量    6,7  SibSp,Parch      891

              船票价格    9     Fare                     891

              登录港口    11   Embarked            889

年龄缺失的均补充为27,登录港口缺失均映射为0。

   Sklearn中创建SVM实例:

      from sklearn.svm import SVC

      model = SVC(kernel,C,gamma)

      kernel:String

        linear  :线性核函数

        poly  :多项式核函数

        rbf     :径像核函数/高斯核

        sigmod  :sigmod核函数

        precomputed:核矩阵

C:Float

      错误项的惩罚系数,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力会降低。

基于高斯核函数不同惩罚系数对数据集的精度影响(Y轴为测试集上的精度,X轴为惩罚系数)    

gamma: float

             核函数系数,仅对‘rbf’,‘poly’,‘sigmod’有效

基于高斯核函数不同gamma值对数据集的精度影响(Y轴为测试集上的精度,X轴为gamma值)


4 参考代码

5 问题与思考

1、SVM的主要应用场景是什么?

2、如何选取合适的核函数?

3、SVM在什么情况下容易产生过拟合问题?过拟合的根本原因是什么?

4、神经网络算法是否可以替代传统的SVM(SVM的关键优势是什么)?

5、如何在尽量不损失召回率的情况下提高SVM的速度?

参考答案:

1、SVM的核心思想就是找到不同类别之间的分界面,使得两类样本尽量落在面的两边,而且离分界面尽量远。相对来说,SVM更擅长处理样本数量偏少且特征较多的数据。

2、选自吴恩达:如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM;如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel; 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

3、数据样本有脏点(噪声),因为SVM约束条件就是对于每个样本要正确分类,至于间隔最大是在这个约束条件的基础上进行的,所以如果约束条件成立就已经导致模型非常复杂,所以容易导致过拟合。

4、SVM是结构风险最小化,优化目标是最大化间隔,超参数很少,不容易过拟合,适合小样本。而反观神经网络,神经网络是需要海量数据去训练的,且其非线性表征更强、数据量更大使其在小样本方面的效果并不理想。

5、提高SVM速度分为两方面:

(1)选取适当的核函数,样本数量较多且非线性一般的情况下可采取多项式核函数,注意控制好多项式的维度。

(2)提高惩罚,使支持向量减少,会很有效的提高速度且减少内存开销。

上一篇 下一篇

猜你喜欢

热点阅读