优化e1071包中的F-score

时间:2015-03-25 15:50:36

标签: r classification svm libsvm

我正在尝试使用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'
                 );

1 个答案:

答案 0 :(得分:1)

您可以提供tune.svm方法的tunecontrol参数。

它需要类tunecontrol的对象。

然后,您需要使用所需参数创建对象。 通过在构建此对象时指定 error.fun 参数,您可以定义要使用的错误函数。

  

error.fun :   函数返回错误度量最小化。它需要两个参数:真值的向量和预测值的向量。如果为NULL,则错误分类错误用于分类预测和数字预测的均方误差。

因此,设置一个计算F-Score的功能应该可以胜任。