- A+
一、SVM简介
在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类、以及回归分析。
SVM的主要思想可以概括为两点:
⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而 使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;
⑵它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。
SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题。
二、R语言实现简单SVM
我们采用iris数据集进行学习和测试,最后看看它的效果。
1、载入SVM算法包
- library(e1071)
2、划分训练和测试集
划分训练和测试集时,采用set.seed
函数设随机数种子,这能保证划分得到的训练和测试集与C5.0完全相同,方便后续测试效果的比较。
- set.seed(2016)
- train.indeces<-sample(1:nrow(iris), 100)
- iris.train<-iris[train.indeces, ]
- iris.test<-iris[-train.indeces, ]
3、建立SVM模型
采用svm
函数基于训练集iris.train
建立SVM模型:
- model <- svm(formula=Species ~ ., data = iris.train)
svm函数参数:
- formula:模型的方程
- data:训练集
4、测试数据
采用测试数据集iris.test进行测试:
- results <- predict(object = model, newdata = iris.test, type = "class")
采用predict泛型函数进行预测:
- object:svm类的模型对象
- newdata:测试集
- type:预测类型,type = “class”返回所属的类,type = “prob”返回概率值
5、查看预测效果
- res <- table(results, iris.test$Species)
- res
results/ | setosa | versicolor | virginica |
---|---|---|---|
setosa | 12 | 0 | 0 |
versicolor | 0 | 18 | 2 |
virginica | 0 | 0 | 18 |
可以看到SVM算法在测试集上的预测准确度为96%,仅有2个样本分类错误。
在这个数据集上,采用SVM算法效果最好,C5.0算法次之,K均值的表现相对较差。
支付宝打赏
微信打赏
赏