Question

I used libsvm in Matlab with the option '-b 1' in both training and prediction process. But it always returns Model does not support probabiliy estimates, so I don't get any probability or accuracy estimation. I tried in binary class SVM (not nu-svm!), it should have work with the '-b 1' but it's not. Does anyone know what's the reason for this problem?

Thanks

Was it helpful?

Solution

  1. Let me show you the usage of svm-predict:

Usage: svm-predict [options] test_file model_file output_file options:

-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); for one-class SVM only 0 is supported

-q : quiet mode (no outputs)

  1. svm-train:

Usage: svm-train [options] training_set_file [model_file] options:

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

0 -- C-SVC (multi-class classification)

1 -- nu-SVC (multi-class classification)

2 -- one-class SVM

3 -- epsilon-SVR (regression) 4 -- nu-SVR (regression)

-t kernel_type : set type of kernel function (default 2)
0 -- linear: u'v 1 -- polynomial: (gammau'v + coef0)^degree
2 -- radial basis function: exp(-gamma
|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)

4 -- precomputed kernel (kernel values in training_set_file)

-d degree : set degree in kernel function (default 3)

-g gamma : set gamma in kernel function (default 1/num_features)

-r coef0 : set coef0 in kernel function (default 0)

-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)

-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)

-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)

-m cachesize : set cache memory size in MB (default 100)

-e epsilon : set tolerance of termination criterion (default 0.001)

-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)

-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)

-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)

-v n: n-fold cross validation mode

-q : quiet mode (no outputs)

We can see that the last fourth line is -b option. If we trained the model with '-b 1' option, we'll get a model that can output probability when you try to predict. Otherwise, if you only use '-b 1' option when you try to predict and not generate a model with '-b 1'. you will get the error : Model does not support probabiliy estimates

The main thing is that if you want to get probabiliy estimates, you should use '-b 1' in your train and test process, both of them.

OTHER TIPS

Actually your questions needs more information to get a proper answer. but generally, the part that is giving error is here in the source code:

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();
        }
    }

it mean it has does not find the probability model.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top