模型不支持libsvm中的概率估计

时间:2014-02-18 17:42:31

标签: matlab machine-learning svm libsvm

我在Matlab中使用libsvm,在训练和预测过程中使用选项'-b 1'。但它总是返回Model does not support probabiliy estimates,所以我没有得到任何概率或准确度估计。我试过二进制类SVM(不是nu-svm!),它应该与'-b 1'一起工作,但事实并非如此。有谁知道这个问题的原因是什么?

由于

2 个答案:

答案 0 :(得分:1)

实际上,您的问题需要更多信息才能得到正确的答案。但一般来说,给出错误的部分在源代码中:

try 
        {
            BufferedReader input = new BufferedReader(new FileReader(argv[i]));
            DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(argv[i+2])));
            svm_model model = svm.svm_load_model(argv[i+1]);
            if(predict_probability == 1)
            {
                if(svm.svm_check_probability_model(model)==0)
                {
                    System.err.print("Model does not support probabiliy estimates\n");
                    System.exit(1);
                }
            }
            else
            {
                if(svm.svm_check_probability_model(model)!=0)
                {
                    System.out.print("Model supports probability estimates, but disabled in prediction.\n");
                }
            }
            predict(input,output,model,predict_probability);
            input.close();
            output.close();
        } 
        catch(FileNotFoundException e) 
        {
            exit_with_help();
        }
        catch(ArrayIndexOutOfBoundsException e) 
        {
            exit_with_help();
        }
    }

这意味着它没有找到概率模型。

答案 1 :(得分:1)

  1. 让我向您展示 svm-predict
  2. 的用法
      

    用法:svm-predict [options] test_file model_file output_file   选项:

         

    -b probability_estimates:是否预测概率估计,0或1(默认为0);对于单类SVM,仅支持0

         

    -q:安静模式(无输出)

    1. SVM-列车:
    2.   

      用法:svm-train [options] training_set_file [model_file]选项:

      -s svm_type : set type of SVM (default 0)
      
           

      0 - C-SVC(多级分类)

           

      1 - nu-SVC(多级分类)

           

      2 - 一类SVM

           

      3 - epsilon-SVR(回归)4 - nu-SVR(回归)

           

      -t kernel_type:设置内核函数的类型(默认为2)
        0 - 线性:u' v 1 - 多项式:(gamma u' v + coef0)^度
        2 - 径向基函数:exp(-gamma
      | u-v | ^ 2)
        3 - sigmoid:tanh(gamma * u' * v + coef0)

           

      4 - 预先计算的内核(training_set_file中的内核值)

           

      -d degree:设置内核函数的度数(默认为3)

           

      -g gamma:在内核函数中设置gamma(默认值为1 / num_features)

           

      -r coef0:在内核函数中设置coef0(默认为0)

           

      -c cost:设置C-SVC,epsilon-SVR和nu-SVR的参数C(默认为1)

           

      -n nu:设置nu-SVC,one-class SVM和nu-SVR的参数nu(默认为0.5)

           

      -p epsilon:将epsilon设置为epsilon-SVR的损失函数(默认为0.1)

           

      -m cachesize:以MB为单位设置缓存大小(默认为100)

           

      -e epsilon:设置终止标准的容差(默认值为0.001)

           

      -h收缩:是否使用收缩启发式,0或1(默认为1)

           

      -b probability_estimates:是否训练SVC或SVR模型进行概率估计,0或1(默认为0)

           

      -wi weight:将类i的参数C设置为weight * C,对于C-SVC(默认为1)

           

      -v n:n倍交叉验证模式

           

      -q:安静模式(无输出)

      我们可以看到最后的第四行是-b选项。如果我们使用' -b 1'选项,我们将获得一个可以在您尝试预测时输出概率的模型。否则,如果您只使用' -b 1'当您尝试使用' -b 1'来预测并且不生成模型时的选项。你会得到错误:模型不支持概率估计

      主要的是,如果你想获得可能的估计,你应该使用' -b 1 '在训练测试过程中,两者都是。