支持向量机及其R实现

本文分为三个部分:

第一部分为原理及概念说明;第二部分为方法评价;第三部分为R实现及参数说明


一、原理及概念说明
    支持向量机(SVM)是一种线性和非线性数据的分类方法,它使用非线性映射将原始数据映射到高维空间,在该空间内搜索最佳分离超平面。在线性可分的情况下,存在这样的超平面把空间中的类分开,并且该超平面与类的距离最大即最大边缘超平面,它等价于求解约束的凸二次最优化问题 ( 在此不详述,请参考 Reference),此时是在原输入空间 (n ) 内寻找最大边缘超平面;在线性不可分的情况下,可以允许个别样本分类错误,但需要借助非线性映射把原输入数据变换到高维空间,在该空间搜索最大边缘超平面 ( 此时是线性的,可用二次最优化求解 ) ,将该超平面对应到原输入空间的非线性超平面。然而这个过程中的点积计算量极大,幸而二次最优化求解中含有训练元组的点积等价于核函数应用于原输入数据,这些核函数在原输入空间上产生非线性分类器,利用核函数不仅可以省略变换后数据元组上的点积计算,也避免了这种映射,此时仍在原输入空间计算,因此与非线性映射后的维度相比降低了不少。
    软边缘(Soft Margin):即线性不可分情况下,允许个别样本跑到其它类别之中。但要使用参数来权衡两端, 一个是要保持最大边缘的分离,另一个要使这种破例不能太离谱 这种参数就是对错误分类的惩罚程度C。

    分离超平面(separating hyperplane):即将类进行分离的超平面,这样的超平面很多,而从超平面到其边缘的两侧距离最短且相等的超平面即为最大边缘超平面(Maximal Margin Hyperplane,MMH),此时MMH到类的最近的训练元组即为支持向量(support vector)

    支持向量是最难分类(临界)的训练元组,给出了最多的分类信息,它定义了边缘及最大边缘超平面。因此,学习后的分类器的复杂度由支持向量数而不是数据维度刻画,SVM也不太容易过分拟合。过拟合的原因与不稳定性密切相关,改动一个或两个训练元组会引起大范围的决策边界的变化,但决策最大边缘超平面则相对比较稳定,只有当被增加或去除的训练元组是支持向量时,边缘才会变动。过度拟合的起因是边缘过分拟合。而支持向量通常只是训练元组中的极小部分,几乎不会发生过分拟合。

    即使数据维度很高,具有少量支持向量的SVM可以具有很好的泛化性能。利用支持向量数可计算SVM分类器的期望误差率的上界,同样独立于数据维度。

    支持向量机回归(SVR):是由SVM发展出来的回归方法,同样也有线性可分与不可分情况。与SVM的区别在于,目标是使预测误差最小化同时函数平面度最大化这种权衡是通过设置参数C来控制。参数ε是在回归函数周围定义的一个管道,管道内的误差将被忽略。如果所有的训练元组都在宽度为2ε的管道内,算法输出一个位于最平的管道中央的函数,这个管道包含所有训练元组,这种情况下总误差为0。因此,ε控制了函数与训练元组的拟合程度。支持向量即在管道外或管道边缘的训练元组。

二、方法评价

    SVM训练速度较慢;SVM能够对复杂的非线性边界建模,不容易过分拟合;SVM总能发现全局最优解

    在实践中,不可能事先判定一个数据集是否线性可分,因此可以先假设数据可分并验证,如果不成立再假设数据不可分。

    如前所述,支持向量机可用于回归、分类和异常检验,前者即为支持向量机回归,后者为支持向量机分类。支持向量机应用在许多领域,包括手写数字识别、对象识别、演说人识别,以及基准时间序列预测检验。

    SVM的研究目标主要是提高训练和检验速度,使得SVM可以成为超大型数据集更可行的选择。其他问题包括,为给定的数据集确定最佳核函数,为多类问题找出更有效的方法。

三、R实现及参数说明
    kernlab包:
    函数ksvm()通过.Call接口,使用bsvm和libsvm库中的优化方法。对于分类,有C-SVM分类算法和v-SVM分类算法,同时还包括C分类器的有界约束的版本;对于回归,提供了ε-SVM回归算法和v-SVM回归算法;对于多类分类,有一对一(one-against-one)方法和原生多类分类方法。
    e1071包:
    使用libsvm库中的优化方法,多分类通过一对一的投票机制(one-against-one voting scheme)实现。e1071包的tune()函数在指定的范围内选取合适的参数。
    klaR包:
    klaR对库SVMlight进行了简单的包装,提供了函数svmlight()以分类,可视化。Svmlight()支持C-SVM进行分类,ε-SVM进行回归。以一对所有(one-against-all)进行多类分类。SVMlight支持高斯核,多项式,线性和sigmoid核。Svmlight()的参数形式为字符串形式。
    svmpath包:
    svmpath包里的函数可用来选取支持向量机的cost参数C
     rminer包

    核函数:
Linear:使用它的话就成为线性向量机,效果基本等价于Logistic回归。但它可以处理变量极多的情况,例如文本挖掘。
polynomial:多项式核函数,适用于图像处理问题。
Radial basis,高斯核函数,最流行易用的选择。参数包括了sigma,其值若设置过小,会有过度拟合出现。
Sigmoid:反曲核函数,多用于神经网络的激活函数。
实践中,核函数的选择一般并不导致结果准确率的很大差别(也有特例!)。

    软边缘参数C:
cost


    R代码实现参见:   点击打开链接




还需要加深理解的地方:

1,凸二次最优化问题

2,惩罚函数

3,支持向量回归




Reference:
复杂数据统计方法——基于R的应用

数据挖掘:概念与技术

数据挖掘:实用机器学习技术

http://www.dataguru.cn/article-3354-1.html
http://xccds.github.io/2012/07/blog-post_06.html/ 
http://www.cnblogs.com/zgw21cn/archive/2009/03/16/1413656.html
http://www.cnblogs.com/zgw21cn/archive/2009/04/14/1435877.html2808079
http://www.tuicool.com/articles/MJFFNn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值