美文网首页
日常复习SVM

日常复习SVM

作者: FFFeiYee | 来源:发表于2019-07-22 15:14 被阅读0次

            支持向量机(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)提高惩罚,使支持向量减少,会很有效的提高速度且减少内存开销。

    相关文章

      网友评论

          本文标题:日常复习SVM

          本文链接:https://www.haomeiwen.com/subject/vvfwlctx.html