2016-11-29 89 views
1

我使用SVM使用e1071包河获取跨验证概率预测

我想为每个类交叉验证的概率预测做多分类,并在训练的每个数据点组。即我想要N×K交叉验证概率矩阵。

谁能告诉我该怎么办呢?

回答

0

的几点:

(1)随着你衡量模型对持有了数据集中的精度(接受了有关训练数据集),而不是整个数据集的交叉验证。

(2)您需要在计算矩阵之前选择超参数(C,γ)的值。 (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