我正在尝试使用R中的e1071软件包来实现一个类SVM。有人可以指点一下如何使用网格搜索来优化F分数吗?
我尝试过tune.svm功能,但它只会导致高灵敏度或高特异性。
我试图预测的阳性分类百分比在一般人群中约为1-2%。
我得到的结果具有很高的准确度,但F分数非常低:
Reference
Prediction members Not members
members 1 4
Not members 12 983
Accuracy : 0.984
95% CI : (0.9741, 0.9908)
No Information Rate : 0.987
P-Value [Acc > NIR] : 0.83691
Kappa : 0.1046
Mcnemar的测试P值:0.08012
Sensitivity : 0.07692
Specificity : 0.99595
以下是我的代码片段:
tuned <- tune.svm(fo, data = df,
nu = 0.001:0.5,
gamma = 10^(-2:0),
type='one-classification'
);
model <- svm(fo, data = df ,
nu = tuned$best.parameters$nu,
gamma = tuned$best.parameters$gamma,
type='one-classification'
);
答案 0 :(得分:1)
您可以提供tune.svm方法的tunecontrol参数。
它需要类tunecontrol的对象。
然后,您需要使用所需参数创建对象。 通过在构建此对象时指定 error.fun 参数,您可以定义要使用的错误函数。
error.fun : 函数返回错误度量最小化。它需要两个参数:真值的向量和预测值的向量。如果为NULL,则错误分类错误用于分类预测和数字预测的均方误差。
因此,设置一个计算F-Score的功能应该可以胜任。