zdyy001
最近在写一个svm的程序,使用kernlab package下的ksvm函数,涉及到画roc curve的问题,我的想法是根据test集上数据点到超平面的距离,将其从离超平面距离最远的正例样本排序到离超平面最远的负例样本,然后从第一个样本开始,当做正例样本进行预测,然后画出roc曲线。
现在遇到的问题是,不知道怎么输出超平面的向量参数或者test集上样本到超平面的距离,大家在绘制roc曲线的时候,都是怎么做的?
下面是简化了的程序。
china<-read.csv("china.csv")
west<-read.csv("west.csv")
data<-rbind(china,west)
bg<-data[,1]
biomarker<-data[,-1]
##################引用包
library(pROC) #ROC
library(kernlab) #SVM
#筛选出非零比例大于90%的数据
######计算非零概率
p0<-numeric()
for (i in 1:ncol(biomarker)){
iszero<-biomarker[,i]==0
p0<-(nrow(biomarker)-sum(iszero))/nrow(biomarker)
}
######计算均值,选出非0>90%种
b<-p0>0.9
biomarker<-biomarker[,b==TRUE]
class<-factor(bg,labels=c(1,-1))
x<-cbind(class,biomarker)
n<-nrow(x)
sam<-sample(c(0,1),n,replace = TRUE,prob = c(0.2,0.8))
train<-x[sam==1,]
test<-x[sam==0,]
pretestclass<-test$class
a<-ksvm(class~ .,data=train,type="C-svc",kernal="rbfdot",kpar=list(sigma=0.1),C=1,prob.model=TRUE)
testclass<-predict(a,test[,2:ncol(test)])#预测