R中交叉验证和调整的径向SVM分类

R中交叉验证和调整的径向SVM分类,r,svm,cross-validation,r-caret,R,Svm,Cross Validation,R Caret,我正在创建一个径向SVM分类模型,我想对其执行5倍CV并对其进行调整。我已经看到了其他人是如何做到这一点的。但是,我的代码不希望实现我的调优网格。此外,我不明白为什么在明确训练模型时无法获得精度或F1值 具有5倍CV library(caret) set.seed(500) ctrl <- trainControl(method = "repeatedcv", number = 5, repeats =

我正在创建一个径向SVM分类模型,我想对其执行5倍CV并对其进行调整。我已经看到了其他人是如何做到这一点的。但是,我的代码不希望实现我的调优网格。此外,我不明白为什么在明确训练模型时无法获得精度或F1值

具有5倍CV

library(caret)
set.seed(500)
ctrl <- trainControl(method = "repeatedcv",
                      number = 5,
                      repeats = 3, 
                      classProb=T,
                      summaryFunction = twoClassSummary
                     )
sigma<-c(2^-15,2^-13,2^-11,2^-9,2^-7,2^-5,2^-3,2^-1,2^1,2^2,2^3)
C<-c(2^-5,2^-3,2^-1,2^1,2^2,2^3,2^5,2^7,2^9,2^11,2^13)
tuninggrid<-data.frame(expand.grid(sigma,C))

mod <- train(x = iris[-5], y=iris$Species,
             method = "svmRadial", 
             trControl = ctrl,
             metric=c('ROC'),
             tunegrid=tuninggrid
库(插入符号)
种子集(500)

ctrl代码中有几个小错误:

  • 如果您想使用ROC下的面积作为度量,您需要像以前那样指定
    twoClassSummary
    ,但是您的响应变量也应该是二进制的。例如:
    train(..., y = factor(ifelse(iris$Species=="setosa", "setosa", "other")), ...)
    
  • 如果要使用精度作为度量,请使用
    defaultSummary
    而不是
    twoClassSummary

  • 如果
    查看(tuninggrid)
    您将看到它的列名是Var1和Var2,而它们应该是C和sigma。您可以修复其定义:

    tuninggrid <- expand.grid(sigma=sigma,C=C)
    

    乍一看,你看过str(mod)和summary(mod)了吗?还有,我记得这是怎么回事,你要求简历做5次,而不是你创造了5倍的简历。那么,你会如何解决这个问题呢?如果你没有得到答案,我会尝试稍后给出更多细节。然而,如果你用谷歌搜索相关术语,你会发现网上有很多插入符号文档。老实说,为了你自己的启发,这是最好的程序。我建议你阅读,你所有的问题都应该得到回答。如果仍有疑问,请发布问题的更新。但是,您如何同时获得准确度、ROC和F1?或者你只能做一个或另一个?你优化的目标函数应该是一维的。否则,您将如何决定哪个选项在(Acc=0.81,AUC=0.95,F1=0.87)和(Acc=0.95,AUC=0.87,F1=0.81)之间最好?所以最好是选择其中一个,如果真的有必要,你仍然可以建立自己的性能指标。好的。这是有道理的。因此,如果我想最大限度地提高准确性,我不会定义twoClassSummary部分。但我想一定有办法获得AUC和F1?现在我更了解你的评论。。。我已经编辑了回答。为了跟进,我在培训中选择的指标是“AUC”,而不是“ROC”,在
    视图(mod$results)
    中,我假设我使用的是AUC值,而不是它产生的ROC值?