Используйте показатель F1 вместо точности для оптимизации параметров SVM - PullRequest
1 голос
/ 29 января 2020

Я использую функцию «настройки» e1071 для оптимизации модели SVM. Я хотел бы использовать F1 вместо точности в качестве значения для оптимизации. Я нашел на этом посте: Оптимизация F-счета в пакете e1071 , что мне нужно, чтобы определить новый error.fun. Проблема, с которой я столкнулся, заключается в том, что функция, показанная в этом посте, в конечном итоге не показала себя как решение, и она не работает для меня. Если бы я знал имена переменных для прогнозов на каждой итерации мелодии, я мог бы написать функцию для вычисления F1, но я не знаю, как получить эти значения. Как я могу рассчитать F1 и использовать его для оптимизации параметров модели, используя 'tune' в e1071? Мой код выглядит следующим образом:

tuned = tune.svm(PriYN~.,  data = dataset, kernel = "radial", probability=TRUE,  gamma = 10^(-5:-1), cost = 10^(-3:1), tunecontrol=tune.control(cross=10))

1 Ответ

0 голосов
/ 29 января 2020

Используя {caret}:

ctrl <- trainControl(method = "repeatedcv", # choose your CV method 
                     number = 5, # according to CV method
                     repeats = 2, # according to CV method
                     summaryFunction = prSummary, # TO TUNE ON F1 SCORE
                     classProbs = T,
                     verboseIter = T
                     #sampling = "smote" # you can try 'smote' resampling method
)

Затем настройте свою модель

set.seed(2202)
svm_model <- train(target ~., data = training,
                   method = "svmRadial",
                   #preProcess = c("center", "scale"),
                   tuneLength = 10,
                   metric = "F", # The metric used for tuning is the F1 SCORE
                   trControl = ctrl)
svm_model
...