如何从e1071包中运行svm获取预测列表

时间:2010-01-18 06:10:37

标签: r

Q1: 我一直试图获得分类问题的AUC值,并一直试图在R中使用e1071和ROCR包。 ROCR有一个很好的例子“ROCR.simple”,它有预测值和标签值。

library(ROCR)
data(ROCR.simple)
pred<-prediction(ROCR.simpe$predictions, ROCR.simple$labels)
auc<-performance(pred,"auc")

这给出了AUC值,没问题。 我的问题是:如何获得上述示例中ROCR.simple$predictions给出的数据类型? 我运行我的分析,如

library(e1071)
data(iris)
y<-Species
x<-iris[,1:2]
model<-svm(x,y)
pred<-predict(model,x)

到这里我很好。 那么我如何得到ROCR.simpe$predictions给出的那种预测?

Q2:

有一个很好的例子涉及ROCR.xvals。这是10个交叉验证的问题。

他们跑

pred<-prediction(ROCR.xval$predictions,ROCR.xval$labels)
auc<-performance(pred,"auc")

这给出了所有10个交叉验证的结果。

我的问题是:

我如何使用

model<-svm(x,y,cross=10)     # where x and y are as given in Q1

并将预测和标签的所有10个结果放入ROCR.xvals中给出的列表中?

1 个答案:

答案 0 :(得分:4)

Q1。你可以用

pred<-prediction(as.numeric(pred), as.numeric(iris$Species))
auc<-performance(pred,"auc")

BUT。班级数不等于2。 ROCR目前仅支持二进制分类任务的评估(根据我得到的错误)

Q2。我不认为第二种可以按你想要的方式完成。我只能想到手工执行交叉验证,即

获取resample.indices(来自包peperr)

cv.ind <- resample.indices(nrow(iris), sample.n = 10, method = c("cv"))
x <- lapply(cv.ind$sample.index,function(x){iris[x,1:2]})
y <- lapply(cv.ind$sample.index,function(x){iris[x,5]})

然后为每个cv样本生成模型和预测

model1<-svm(x[[1]],y[[1]])
pred1<-predict(model1,x[[1]])

等。 然后你可以手动构建一个像ROCR.xval

这样的列表