在tune svm中获得交叉验证的概率预测(e1071)

时间:2016-11-29 11:12:41

标签: r svm

我正在使用svm在R中使用e1071软件包进行多类分类。

我希望对每个类和训练集中的每个数据点进行交叉验证的概率预测。即我想要N x K交叉验证概率矩阵。

有人可以告诉我该怎么做吗?

1 个答案:

答案 0 :(得分:0)

几点:

(1)通过交叉验证,您可以在保留的数据集上而不是整个数据集上测量模型(在训练数据集上训练)的准确性。

(2)您需要在计算矩阵之前选择超参数(C,gamma)的值。

(3)你可以使用插入符号包计算所需的概率矩阵,但由于它是多类分类问题,你需要在计算矩阵之前选择要计算概率的类。

在虹膜上使用以下代码,虹膜有150个数据点,其中15个点将被随机选为每个折叠的验证数据。让我们找到预测类是setosa的概率并计算150x11矩阵,其中最后一列是二进制列,表示数据点的实际类是否为setosa。

K <- 10 # number of folds        
set.seed(123)        
library(caret)
library(reshape2)  
trctl <- trainControl(method = "cv", number = K, savePredictions = TRUE, classProbs = TRUE)
res <- train(Species ~ ., data = iris, method="svmRadial", trControl = trctl)
res.C1 <- subset(res$pred, C==1)
head(res.C1) 

       pred        obs        setosa  versicolor   virginica rowIndex    sigma C Resample
31     setosa     setosa 0.980011940 0.009115859 0.010872201       17 1.421405 1   Fold01
32     setosa     setosa 0.872285443 0.051664831 0.076049726       23 1.421405 1   Fold01
33     setosa     setosa 0.983836684 0.007452339 0.008710978       35 1.421405 1   Fold01
34     setosa     setosa 0.956874365 0.018767699 0.024357936       38 1.421405 1   Fold01
35     setosa     setosa 0.979355342 0.009425609 0.011219049       39 1.421405 1   Fold01
36 versicolor versicolor 0.009445829 0.935110658 0.055443514       55 1.421405 1   Fold01

cbind.data.frame(round(dcast(res.C1, rowIndex~Resample, value.var = 'setosa'),2), setosa=res.C1$obs=='setosa')

    rowIndex Fold01 Fold02 Fold03 Fold04 Fold05 Fold06 Fold07 Fold08 Fold09 Fold10 setosa
1          1     NA     NA     NA     NA     NA     NA     NA     NA     NA   0.99   TRUE
2          2     NA     NA     NA     NA     NA     NA     NA     NA   0.98     NA   TRUE
3          3     NA     NA     NA     NA     NA   0.98     NA     NA     NA     NA   TRUE
4          4     NA     NA     NA     NA     NA     NA   0.98     NA     NA     NA   TRUE
5          5     NA     NA     NA   0.99     NA     NA     NA     NA     NA     NA   TRUE
6          6     NA   0.98     NA     NA     NA     NA     NA     NA     NA     NA  FALSE
7          7     NA     NA     NA     NA   0.97     NA     NA     NA     NA     NA  FALSE
8          8     NA     NA   0.99     NA     NA     NA     NA     NA     NA     NA  FALSE
9          9     NA   0.96     NA     NA     NA     NA     NA     NA     NA     NA  FALSE
10        10     NA   0.98     NA     NA     NA     NA     NA     NA     NA     NA  FALSE
#         ...   ...
145      145     NA     NA     NA     NA     NA     NA     NA     NA   0.01     NA  FALSE
146      146     NA     NA     NA   0.01     NA     NA     NA     NA     NA     NA  FALSE
147      147     NA     NA     NA   0.01     NA     NA     NA     NA     NA     NA  FALSE
148      148     NA     NA     NA     NA     NA     NA     NA     NA     NA   0.01  FALSE
149      149     NA     NA     NA     NA     NA     NA     NA     NA   0.02     NA  FALSE
150      150     NA     NA     NA     NA     NA     NA     NA   0.01     NA     NA  FALSE