顺带说一句,在kernlab包中,可以自定义核函数。
Degree:多项式核的次数,默认为3
Gamma:除去线性核外,其他的核的参数,默认为1/数据维数
Coef0,:多项式核与sigmoid核的参数,默认为0
Cost:C分类的惩罚项C的取
Nu:nu分类,单一分类中nu的取
Cross:做K折交叉验证,计算分类正确性。r语言 支持向量机分类
由于svm的编程确实过于复杂,还涉及到不少最优化的内容,所以在第二部分我的分类都是使用svm函数完成的(偷一下懒),现将部分R代码展示如下:
dataSim的函数:
simData=function(radius,width,distance,sample_size)
{
aa1=runif(sample_size/2)
aa2=runif(sample_size/2)
rad=(radius-width/2)width*aa1
theta=pi*aa2
x=rad*cos(theta)
y=rad*sin(theta)
label=1*rep(1,length(x))
x1=rad*cos(-theta)rad
y1=rad*sin(-theta)-distance
label1=-1*rep(1,length(x1))
n_row=length(x)length(x1)
data=matrix(rep(0,3*n_row),nrow=n_row,ncol=3)
data[,1]=c(x,x1)
data[,2]=c(y,y1)
data[,3]=c(label,label1)
data
}
dataSim=simData(radius=10,width=6,distance=-6,sample_size=3000)
colnames(dataSim)<-c("x","y","label")
dataSim<-as.data.frame(dataSim)
Sigmoid核的分类预测:
m1<-svm(label~xy,data=dataSim,cross=10,type="C-classification",kernel="sigmoid")
m1
summary(m1)
pred1<-fitted(m1)
table(pred1,dataSim[,3])
核函数那一小节作图的各种东西:
linear.svm.fit<-svm(label~xy,data=dataSim,kernel='linear')
with(dataSim,mean(label==ifelse(predict(linear.svm.fit)>0,1,-1)))
polynomial.svm.fit<-svm(label~xy,data=dataSim,kernel='polynomial')
with(dataSim,mean(label==ifelse(predict(polynomial.svm.fit)>0,1,-1)))
radial.svm.fit<-svm(label~xy,data=dataSim,kernel='radial')
with(dataSim,mean(label==ifelse(predict(radial.svm.fit)>0,1,-1)))
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30141-4.html
真爱国绝不是动不动就喊打喊杀
很多大官有把柄给捏着的