2016-11-29 91 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