r - 使用 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))
解决方案
使用 {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
推荐阅读
- sql - PostgreSQL 中的循环
- python - dask categorize() 方法后重置 index() 错误
- html - 如何使用 HTML 和 CSS 在网站中添加不同的部分?
- html - 如何修复 ahref 未链接到 id
- python - Supervisord 发送即时 SIGKILL
- android - 如何在不初始化的情况下声明 ArrayAdapter
- php - 使用 cURL 发送 json 不会回显结果,为什么?
- java - Integer.toString() 给出不正确的转换
- c++ - 为 QtWebEngineProcess 设置参数
- tableau-api - 在样品超市,如何让顾客只买家具而不买办公用品或技术