R语言使用支持向量机完成数据分类(SVM)
来源:互联网 发布:做数据与嵌入式 编辑:程序博客网 时间:2024/05/21 06:32
说明
libsvm和SVMLite都是非常流行的支持向量机工具,在R语言中,e1071包提供了libsvm的实现,klap包提供了对SVMLite的实现。
继续使用telecom churn数据集做为输入数据源来训练向量机
导入e1071包
library(e1071)
使用svm函数训练支持向量机,trainset数据集作为输入数据集,churn是分类类别。
model = svm(churn ~.,data = trainset,kernel = "radial",cost = 1,gamma = 1/ncol(trainset))
使用summary( )得到model所有信息
Call:svm(formula = churn ~ ., data = trainset, kernel = "radial", cost = 1, gamma = 1/ncol(trainset))Parameters: SVM-Type: C-classification SVM-Kernel: radial cost: 1 gamma: 0.05882353 Number of Support Vectors: 691 ( 394 297 )Number of Classes: 2 Levels: yes no
说明
支持向量机构建了一个超平面(或者一组超平面),使得高维度空间内两个类的边缘间隔最大化。定义这些超平面的向量就被称为支持向量,
支持向量机首先要构建一个超平面能够最大化距离,然后将定义扩展到非线性可分问题上,最后将数据映射到一个高维度空间,使得数据能够更容易被边界分开。
SVM的优势在于利用了面向工程问题的核函数,能够提供准确率非常高的分类模型,同时可以借助正则项避免模型的过度适应,用户不用担心局部最优与多重共线性问题。svm的算法的主要弊端是对模型进行训练和测试的速度很慢,模型处理需要很长的时间。SVM的结果也很难解释,如何确定合适的核函数是一个难点,而正则化也是用户需要考虑的问题。
本例中通过训练函数SVM,用户可以确定核函数,成本函数的gamma,对于核函数的选择,默认选择radial(径向函数),用户还可以选择线性核函数,多项式函数,径向基函数和sigmod核函数。gamma函数确定了分离平面的形状,默认为函数维数的倒数(1/数据维度),提高gamma的值通常会增加支持向量的数量。考虑到成本函数,默认值通常为1,此时正则式也是常数,正则式越大,边界越小。
选择支持向量机的惩罚因子
支持向量机能够通过最大化边界得到一个优化的超平面以完成对训练数据的分离,不过有时算法也允许被错误分类样本的存在,惩罚因子能实现SVM对分类数误差及分离的控制。如果惩罚因子比较小,分类间隔会比较大(软间隔),将产生比较多的被错分样本,相反当加大惩罚因子,会缩小分类间隔(硬间隔),从而减小错分样本。
调用subset函数获得iris数据集中的species值为setosa和virginica,选择样例在Sepal.Width,Sepal.Width,Species列的投影。
调用plot函数绘制散点图
iris.subet = subset(iris,select = c("Sepal.Length","Sepal.Width","Species"),Species %in% c("setosa","virginica"))> plot(x = iris.subet$Sepal.Length,y = iris.subet$Sepal.Width,col = iris.subet$Species,pch = 19)
iris数据集子集散点图
将惩罚因子设置为1,利用iris.subset数据集训练SVM,将支持向量用蓝色的圈注标出来。
svm.model = svm(Species ~ .,data = iris.subet,kernel = "linear",cost = 1,scale = FALSE)plot(x = iris.subet$Sepal.Length,y = iris.subet$Sepal.Width,col = iris.subet$Species,pch = 19)points(iris.subet[svm.model$index,c(1,2)],col = "blue",cex = 2)
加分隔线:
w = t(svm.model$coefs) %*% svm.model$SVb = -svm.model$rhoabline(a = -b/w[1,2],b=-w[1,1]/w[1,2],col = "red",lty = 5)
将惩罚因子设置为10000,重新训练一个SVM模型
plot(x = iris.subet$Sepal.Length,y = iris.subet$Sepal.Width,col = iris.subet$Species,pch = 19)svm.model = svm(Species ~ .,data = iris.subet,kernel = "linear",cost = 10000,scale = FALSE)points(iris.subet[svm.model$index,c(1,2)],col = "blue",cex = 2)w = t(svm.model$coefs) %*% svm.model$SVb = -svm.model$rhoabline(a = -b/w[1,2],b=-w[1,1]/w[1,2],col = "red",lty = 5)
惩罚因子原理
本节讨论了惩罚因子大小对SVM分类器的影响。我们首先选择了一个小的惩罚因子cost = 1来训练SVM,该分类器允许存在部分错分样本,分隔边界属于软间隔,支持向量均用蓝色圆圈进行标注,不同类别之间也增加了一条分隔线,出于选择了一个小的惩罚因子,造成图中有一个绿点(virginica)被错误的划分到其它分类(setosa)
- R语言使用支持向量机完成数据分类(SVM)
- R语言svm支持向量机分类与参数优化
- 使用支持向量机(SVM)对数据分类
- R语言支持向量机SVM
- 在R中使用支持向量机(SVM)进行数据挖掘(上)
- 在R中使用支持向量机(SVM)进行数据挖掘(下)
- R - SVM 支持向量机
- R--SVM支持向量机
- R语言svm支持向量机多元回归预测
- 数据挖掘笔记-分类-支持向量机SVM-1
- 数据挖掘---分类算法之支持向量机SVM
- 数据挖掘---分类算法之支持向量机SVM
- R语言中使用支持向量机
- 基于R语言的支持向量机(SVM)+k均值(K-means)简单实现
- 数据挖掘学习------------------4-分类方法-7-支持向量机(SVM)
- 使用支持向量机(SVM)
- SVM支持向量机(SMO算法)的R实现
- 支持向量机SVM算法原理及应用(R)
- Word 2007 删除页眉横线
- 批处理 for循环
- 关于javamail 调用 office 365 发邮件的个人见解
- 上班第一天
- Android开发工具入过的坑
- R语言使用支持向量机完成数据分类(SVM)
- 部署上线的最常用的linux指令及步骤
- 非常规最短路(HDU 5335,Walk Out)
- android textView调整字体的间距和行间距
- python 判断字符串是否为整数或负数
- 关于setdrawerlistener过时的解决办法
- 深度学习 —— LSTM
- iOS11中Siri将内置翻译功能,说话语气更自然
- L1-002. 打印沙漏