* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * PAGE * 理解支持向量机 * 《R语言数据分析与挖掘(微课版)》 PAGE * 软边界、核函数 * 《R语言数据分析与挖掘(微课版)》 支持向量机还有另外两个关键名词:软边界、核函数。 (1)软边界(Soft Margin):在线性不可分情况下就要考虑软边界了。软边界可以破例允许个别样本跑到其他类别地盘去。但要使用参数来权衡两端,一个是要保持最大边缘的分离,另一个要使这种破例不能太离谱。这种参数就是对错误分类的惩罚程度C。 (2)核函数(Kernel Function):为了解决完美分离的问题,SVM还提出一种思路,就是将原始数据映射到高维空间中去,直觉上可以感觉高维空间中的数据变的稀疏,有利于“分清敌我”。那么映射的方法就是使用“核函数”。如果“核函数”选择得当,高维空间中的数据就变得容易线性分离了。而且可以证明,总是存在一种核函数能将数据集映射成可分离的高维数据。常用的核函数有如下种类: ①Linear:线性支持向量机,效果基本等价于Logistic回归。但它可以处理变量极多的情况,例如文本挖掘。 ②polynomial:多项式核函数,适用于图像处理问题。 ③Radial basis,高斯核函数,参数包括了sigma,其值若设置过小,会有过度拟合出现。 ④sigmoid:反曲核函数,多用于神经网络的激活函数。 支持向量机的目的是寻找一个超平面来对样本进行分割,分割的原则是边界最大化,最终转化为一个凸二次规划问题来求解。模型包括: (1)当训练样本线性可分时,通过硬边界(Hard Margin)最大化,学习一个线性可分支持向量机。 (2)当训练样本近似线性可分时,通过软边界(Soft Margin)最大化,学习一个线性支持向量机。 (3)当训练样本线性不可分时,通过核技巧和软边界最大化,学习一个非线性支持向量机。 支持向量机的R语言实现 * 04 PAGE * 支持向量机的R语言实现 * 《R语言数据分析与挖掘(微课版)》 libsvm和SVMlight都是非常流行的支持向量机算法。在R语言中,来自维也纳理工大学统计系的e1071扩展包提供了libsvm的R语言接口;来自多特蒙德工业大学统计系的klaR扩展包提供了SVMlight的一个接口。 e1071包 R语言的 e1071扩展包提供了libsvm的接口。使用e1071扩展包中svm()函数可以得到与libsvm相同的结果。write.svm()函数更是可以把训练得到的结果保存为标准的Libsvm格式,以供其他环境下libsvm的使用。 kernlab包 kernlab是R语言中实现基于核技巧机器学习的扩展包,可以通过install.packages(“kernlab”)命令进行在线安装。kernlab的算法群可以解决机器学习中分类、回归、奇异值检测、分位数回归、降维等诸多任务。kernlab扩展包还包括支持向量机,谱聚类、和主成分分析(KPCA)和高斯过程等算法。 PAGE * 基于支持向量机进行类别预测-线性可分 * 《R语言数据分析与挖掘(微课版)》 选取鸢尾花数据集iris中的变量Species因子水平为setosa或versicolor的样本,将利用e1071扩展包中的svm()函数建立自变量为Sepal.Width、Petal.Length对因变量Species的分类模型。 > # 构建数据子集 > X <- iris[iris$Species!= 'virginica',2:3] # 自变量:Sepal.Width, Petal.Length > y <- iris[iris$Species != 'virginica','Species'] # 因变量 > # 构建支持向量机分类器 > library(e1071) > svm.model <- svm(x = X,y = y,kernel = 'linear',degree = 1,sc