Используйте показатель F1 вместо точности для оптимизации параметров SVM
Я использую функцию настройки 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 ответ
Использование {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