r - 交叉验证插入符号和 svm 的预测

标签 r machine-learning svm r-caret kernlab

调整模型时产生的 ROC/Sens/Spec 与模型在同一数据集上做出的实际预测之间似乎存在差异。我正在使用插入符号,它使用 kernlab 的 ksvm。我在使用 glm 时没有遇到这个问题。

data(iris)
library(caret)
iris <- subset(iris,Species == "versicolor" | Species == "setosa") # we need only two output classess
iris$noise <- runif(nrow(iris)) # add noise - otherwise the model is too "perfect"
iris$Species <- factor(iris$Species)
fitControl <- trainControl(method = "repeatedcv",number = 10, repeats = 5, savePredictions = TRUE, classProbs = TRUE, summaryFunction = twoClassSummary)

ir <- train(Species ~ Sepal.Length + noise, data=iris,method = "svmRadial", preProc = c("center", "scale"), trControl=fitControl,metric="ROC")
confusionMatrix(predict(ir), iris$Species, positive = "setosa")
getTrainperf(ir) # same as in the model summary

这种差异的根源是什么?哪些是“真实的”交叉验证后预测?

最佳答案

看来函数getTrainPerf给出了在重复交叉验证折叠中平均的最佳调整参数的平均性能结果。

以下是 getTrainPerf 的工作原理:

getTrainPerf(ir) 
#  TrainROC TrainSens TrainSpec    method
#1   0.9096     0.844     0.884 svmRadial

通过以下方式实现:

ir$results
#      sigma    C    ROC  Sens  Spec      ROCSD    SensSD    SpecSD
#1 0.7856182 0.25 0.9064 0.860 0.888 0.09306044 0.1355262 0.1222911
#2 0.7856182 0.50 0.9096 0.844 0.884 0.08882360 0.1473023 0.1218229
#3 0.7856182 1.00 0.8968 0.836 0.884 0.09146071 0.1495026 0.1218229
ir$bestTune
#      sigma   C
#2 0.7856182 0.5
merge(ir$results, ir$bestTune)
#      sigma   C    ROC  Sens  Spec     ROCSD    SensSD    SpecSD
#1 0.7856182 0.5 0.9096 0.844 0.884 0.0888236 0.1473023 0.1218229

这也可以从交叉验证折叠的性能结果中获得(10 次折叠,5 次重复,每个性能指标的 10*5=50 总值)。

colMeans(ir$resample[1:3])
#     ROC   Sens   Spec 
#  0.9096 0.8440 0.8840 

因此,getTrainPerf仅给出了使用最佳调整参数(sigma)在不同时间(而不是整个训练数据集)进行验证的数据折叠上的交叉验证性能的摘要,C)。

但是,如果您想对整个训练数据集进行预测,则需要将 predict 函数与调整后的模型结合使用。

关于r - 交叉验证插入符号和 svm 的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171045/

相关文章:

r - ggplot2:在单个条形图中混合简单条形图和分组条形图

r - R 中有符号 ODE 求解器吗? (ODE = 常微分方程)

r - f# Rprovider 与 TTR 包相关的问题

r - ggplot2 没有轴、图例等的图

scikit-learn - scikit-learn(sklearn) : TypeError: 'KFold' object is not iterable 中的 GridSearchCV

machine-learning - WEKA LibSVM 成本权重参数

machine-learning - 如何在 Sklearn 中将 fit_params 用于带有 VotingClassifier 的 RandomizedSearch?

python - imblearn smote+enn 采样了多数类

python - 如何重写 tensorflow 图以使用 CPU 进行所有操作

machine-learning - 用于查找具有非文本属性的相似客户的相似性匹配技术