Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Suppressing the output in libsvm (python)

I am using libsvm (svmutils) from python for a classification task. The classifier is exact. However, I am getting output like this:

*
optimization finished, #iter = 75
nu = 0.000021
obj = -0.024330, rho = 0.563710
nSV = 26, nBSV = 0
Total nSV = 26
*
optimization finished, #iter = 66
nu = 0.000030
obj = -0.035536, rho = -0.500676
nSV = 21, nBSV = 0
Total nSV = 21
*
optimization finished, #iter = 78
nu = 0.000029
obj = -0.033921, rho = -0.543311
nSV = 23, nBSV = 0
Total nSV = 23
*
optimization finished, #iter = 90
nu = 0.000030
obj = -0.035333, rho = -0.634721
nSV = 23, nBSV = 0
Total nSV = 23
Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)
Accuracy = 0% (0/1) (classification)

Is there any way I can suppress this dialog? The classifier serves perfectly fine, I am just curious. Also, what does the "Accuracy" stand for? And why this is 0% in my case? (The data is non-overlapping in 80 dimensions. Total 4 classes. I have also normalized it properly.)

like image 911
Nihar Sarangi Avatar asked Feb 23 '23 07:02

Nihar Sarangi


2 Answers

Use the -q parameter option

import svmutil
param = svmutil.svm_parameter('-q')
...

or

import svmutil
x = [[0.2, 0.1], [0.7, 0.6]]
y = [0, 1]
svmutil.svm_train(y, x, '-q')
like image 143
has2k1 Avatar answered Mar 06 '23 08:03

has2k1


This can work:

import sys
from StringIO import StringIO

# back up your standard output
bkp_stdout = sys.stdout

# replace standard output with dummy stream
sys.stdout = StringIO()
print 1  # here you should put you call (classification)

#restore standard output for further use
sys.stdout = bkp_stdout
print 2

Also, in classification problems, accuracy is the part (percentage) of correctly predicted items from your testing / cross-validation set using the trained model.

like image 37
vonPetrushev Avatar answered Mar 06 '23 07:03

vonPetrushev