@TOC
1 工具准备
R中有直接写好的包,可以直接使用
install.packages("e1071")
library(e1071)
2 划分样本
对训练集和测试集进行划分
index=sample(1:nrow(iris),100)
train=iris[index,]
test=iris[-index,]
3 模型建立
用工具包中的方法建立模型
model1=svm(Species~.,data=train,kernel="linear")
model1
summary(model1)
p1=predict(model1,test)
table(test$Species,p1)
4 交叉验证
cross参数是交叉验证比例
#num-fold cross validation
model2=svm(Species~.,data=train,kernel="linear",cross=7)
summary(model2)
5 软间隔选择
cost是划分软间隔的距离
model3=svm(Species~.,data=train,kernel="linear",cross=5,cost=50)
model3$accuracies
model3$tot.accuracy
编写软间隔方法,直接使用软间隔
acc=function(cost){
model=svm(Species~.,data=train,kernel="linear",cross=5,cost=cost)
p=predict(model,test)
A=as.matrix(table(test$Species,p))
acc=(sum(diag(A))/sum(A))
return(acc)
}
acc(10)
创建等差数列选择最优软间隔
C=seq(0.01,100,length=100)
Acc=NULL
for (i in 1:length(C)) {
model=svm(Species~.,data=train,kernel="linear",cross=5,cost=C[i])
p=predict(model,test)
A=as.matrix(table(test$Species,p))
Acc[i]=(sum(diag(A))/sum(A))
}
Acc
which(Acc==max(Acc))
plot(C,Acc)
6 非线性核函数参数
使用gamma参数调整核函数
#kernel function
model4=model3=svm(Species~.,data=train,kernel="radial",cross=5,cost=5,gamma=0.1)
summary(model4)