首页 > 解决方案 > 使用 F1 分数而不是准确率来优化 SVM 参数

问题描述

我正在使用 e1071 'tune' 功能来优化 SVM 模型。我想使用 F1 而不是 Accuracy 作为优化的值。我在这篇文章中发现:Optimize F-score in e1071 package我需要定义一个新的 error.fun。我遇到的问题是,该帖子中显示的功能并未最终成为解决方案,并且对我不起作用。如果我知道每个 tune 迭代中预测的变量名称,我可以编写一个函数来计算 F1,但我不知道如何获得这些值。如何计算 F1 并使用它在 e1071 中使用“tune”优化模型参数?我的代码如下:

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

标签: rmachine-learninge1071

解决方案


使用 {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

推荐阅读