分类分析--支持向量机SVM(调和参数)


分类分析--支持向量机

支持向量机(SVM)是一类可用于分类和回归的有监督机器学习模型。其流行归功于两个方面:一方面,他们可输出较准确的预测结果;另一方面,模型基于较优雅的数学理论。

SVM旨在在多维空间中找到一个能将全部样本单元分成两类的最优平面,这一平面应使两类中距离最近的点的间距(margin)尽可能大,在间距边界上的点被称为支持向量(support vector,它们决定间距),分割的超平面位于间距的中间。

SVM可以通过Rkernlab包的ksvm()函数和e1071包中的svm()函数实现。ksvm()功能更强大,但svm()相对更简单。如下代码给出了通过svm()函数对威斯康星州乳腺癌数据建立SVM模型的一个示例。

由于方差较大的预测变量通常对SVM的生成影响更大,svm()函数默认在生成模型前对每个变量标准化,使其均值为0、标准差为1。与随机森林算法不同的是,SVM在预测新样本单元时不允许有缺失值出现。

1)支持向量机

library(e1071)

set.seed(1234)

fit.svm <- svm(class~., data=df.train)

fit.svm

 

svm.pred <- predict(fit.svm, na.omit(df.validate))

svm.perf1 <- table(na.omit(df.validate)$class,

                    svm.pred, dnn=c("Actual", "Predicted"))

svm.perf1

 

结果分析:整体来看,验证集中的准确率达到了(126+70/205=96%

选择调和参数

svm()函数默认通过径向基函数(Radial Basis FunctionRBF)将样本单元投射到高维空间。一般来说RBF核是一个比较好的选择,因为它是一种非线性投影,可以应对类别标签与预测变量间的非线性关系。

在用带RBF核的SVM拟合样本时,两个参数可能影响最终结果:gamma和成本(cost)。gamma是核函数的参数,控制分割超平面的形状。gamma越大,通常导致支持向量越多。我们也可将gamma看作控制训练样本到达范围的参数,即gamma越大意味着训练样本到达范围越广,而越小则意味着到达范围越窄。gamma必须大于0

成本参数代表犯错的成本。一个较大的成本意味着模型对误差的惩罚更大,从而将生成一个更复杂的分类边界,对应的训练集中的误差也会更小,但也意味着可能存在过拟合问题,即对新样本单元的预测误差可能很大。较小的成本意味着分类边界更平滑,但可能会导致欠拟合。与gamma一样,成本参数也恒为正。

svm()函数默认设置gamma为预测变量个数的倒数,成本参数为1。不过gamma与成本参数的不同组合可能生成更有效的模型。在建模时,我们可以尝试变动参数值建立不同的模型,但利用格点搜索法可能更有效。可以通过tune.svm()对每个参数设置一个候选范围,tune.svm()函数对每一个参数组合生成一个SVM模型,并输出在每一个参数组合上的表现。如下代码给出了一个示例。

2)带RBF核的SVM模型

set.seed(1234)

tuned <- tune.svm(class~., data=df.train, gamma=10^(-6:1),cost=10^(-10:10))  #变换参数

tuned     #输出最优模型

结果分析:我们一共将尝试八个不同的gamma(从0.000 00110)以及21个成本参数(从0.011010)。总体来说,我们共拟合了1688×21)个模型,并比较了其结果。训练集中10折交叉验证误差最小的模型所对应的参数为gamm=0.1,成本参数为1

fit.svm <- svm(class~., data=df.train, gamma=.01, cost=1)      #基于这一参数值组合,我们对全部训练样本拟合出新的SVM模型

svm.pred <- predict(fit.svm, na.omit(df.validate))      #用这一模型对验证集中的样本单元进行预测

svm.perf <- table(na.omit(df.validate)$class, svm.pred, dnn=c("Actual", "Predicted"))

svm.perf

 

结果分析:整体来看,验证集中的准确率达到了(128+70/205=97%


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM