【发布时间】:2017-04-13 08:45:59
【问题描述】:
我正在使用 svm 使用 R 中的 e1071 包进行多类分类。
我想要对训练集中的每个类和每个数据点进行交叉验证的概率预测。即我想要 N x K 交叉验证概率矩阵。
谁能告诉我怎么做?
【问题讨论】:
我正在使用 svm 使用 R 中的 e1071 包进行多类分类。
我想要对训练集中的每个类和每个数据点进行交叉验证的概率预测。即我想要 N x K 交叉验证概率矩阵。
谁能告诉我怎么做?
【问题讨论】:
几点:
(1) 通过交叉验证,您可以在保留数据集上测量模型(在训练数据集上训练)的准确性,而不是在整个数据集上。
(2) 在计算矩阵之前,您需要选择超参数(C,gamma)的值。
(3) 您可以使用 caret 包来计算所需的概率矩阵,但由于它是多类分类问题,您需要在计算矩阵之前选择要计算概率的类。
在 iris 上使用以下代码,它有 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
【讨论】: