Радиальная классификация SVM с перекрестной проверкой и настройкой в ​​R - PullRequest
1 голос
/ 10 мая 2019

Я нахожусь в процессе создания модели Radial SVM Classification, и я хотел бы выполнить 5-кратное резюме и настроить его.Я видел, как другие здесь и следовали этим инструкциям .Однако мой код не хочет реализовывать мою настройку сетки.Кроме того, я не понимаю, почему я не могу получить Точность или значение 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

РезультатыПросто сигма держалась постоянной.Почему он не использует мою сетку настройки?

Во-вторых, когда я настраиваю метрику от 'ROC' до 'Accuracy', он говорит, что точность недоступна.Это я понимаю из-за моей итоговой функции в trainControl.. Если я ее удаляю, я могу получить точность, но не ROC.В конечном счете, я хотел бы получить и значение F1, но я не могу найти документацию по этому вопросу.Как бы я написал что-то, что дало бы мне оба одновременно?

Наконец, вывод train().Чтобы получить вес, он просто использует мод $ finalModel @ coef правильно?

1 Ответ

2 голосов
/ 20 мая 2019

В вашем коде есть несколько мелких ошибок:

  1. Если вы хотите использовать область под ROC в качестве метрики, вам нужно указать twoClassSummary, как вы это сделали, но ваша переменная ответа также должна быть двоичной. Например:
    train(..., y = factor(ifelse(iris$Species=="setosa", "setosa", "other")), ...)
    
  2. Если вы хотите использовать точность в качестве метрики, используйте defaultSummary вместо twoClassSummary

  3. Если вы View(tuninggrid), вы увидите, что имена его столбцов - Var1 и Var2, тогда как они должны быть C и сигма. Вы можете исправить его определение:

    tuninggrid <- expand.grid(sigma=sigma,C=C)
    
  4. В вызове train(...) есть опечатка: правильное имя аргумента tuneGrid (R чувствителен к регистру)

Устранение этих проблем решит вашу проблему: View(mod$results)

РЕДАКТИРОВАТЬ: если вы хотите оптимизировать точность (вычисляется в defaultSummary), но также отображать AUROC (от twoClassSummary) и / или F (от prSummary), вы можете определить свою собственную метрическую функцию, которая объединяет все и использует его в trainControl:

combinedSummary <- function(data, lev = NULL, model = NULL) {
  c(
    defaultSummary(data, lev, model),
    twoClassSummary(data, lev, model), 
    prSummary(data, lev, model)
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...