library(e1071)
data(iris)
model<-svm(Species~.,data=iris) #使用所有的变量作为特征变量,直接利用函数建模
#将特征向量和结果向量分别提取出来,特征向量用矩阵表示,结果向量用向量表示
fix(iris)
x<-iris[,1:4];y<-iris[,5]
model_1<-svm(x,y,kernel="radial",gamma=if(is.vector(x)) 1 else 1/ncol(x))
pre<-predict(model_1,x)
set.seed(1234)#随机抽样时设定随机种子复现结果
print(pre[sample(1:150,8)])
table(pre,y) #查看精度
综合建模:
library(e1071)
attach(iris)
x <- subset(iris, select = -Species)
y <- Species
type <- c("C-classification","nu-classification","one-classification")
kernel <- c("linear","polynomial","radial","sigmoid")
pred <- array(0,dim = c(150,3,4))
accuracy <- matrix(0,3,4)
yy <- as.integer(y)
for(i in 1:3){
for(j in 1:4){
pred[,i,j] <- predict(svm(x,y,type=type[i],kernel=kernel[j]),x)
if (i>2) {
accuracy[i,j] <- sum(pred[,i,j]!=1)
} else {
accuracy[i,j] <- sum(pred[,i,j]!=yy)
}
}
}
dimnames(accuracy)=list(type,kernel)
accuracy
pred<- predict(svm(x,y.type=type[1],kernel="polymial"),x)
model_1<-svm(x,y,kernel="radial",gamma=if(is.vector(x)) 1 else 1/ncol(x))
pre<-predict(model_1,x)
set.seed(1234)#随机抽样时设定随机种子复现结果
print(pre[sample(1:150,8)])
table(pre,y) #查看精度
table(pred, y)
plot(cmdscale(dist(iris[,-5])),
col=c("lightgray","black","gray")[as.integer(iris[,5])],
pch=c("o","+")[1:150 %in% model$index + 1])
legend(2,-0.8,c("setosa","versicolor","virginica"),col = c("lightgray","black","gray"),lty=1)
dev.new()
data(iris)
model <- svm(Species~., data = iris)
plot(model, iris, Petal.Width~Petal.Length,fill = FALSE,
symbolPalette = c("lightgray","black","grey"),svSymbol = "+")
legend(1,2.5,c("setosa","versicolor","virginica"),col = c("lightgray","black","gray"),lty=1)
wts <- c(1,1,1)#优化
names(wts) <- c("setosa","versicolor","virginica")
model1 <- svm(x,y,class.weights = wts)
wts <- c(1,100,100)
names(wts) <- c("setosa","versicolor","virginica")
model2 <- svm(x,y,class.weights = wts)
pred2 <- predict(model2,x)
table(pred2,y)
wts <- c(1,500,500)
names(wts) <- c("setosa","versicolor","virginica")
model3 <- svm(x,y,class.weights = wts)
pred3 <- predict(model3,x)
table(pred3,y)
ind<-sample(2,nrow(iris),replace=TRUE,prob=c(0.7,0.3)) #70%为训练集 30%为测试集
train<-iris[ind==1,]
test<-iris[ind==2,]