问题
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.)
回答1:
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')
回答2:
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.
回答3:
To suppress both training and prediction output, you will need to combine the solutions provided by has2k1 (for suppressing training output) and vonPetrushev (for suppressing prediction output).
Unfortunately, you cannot do something like the following:
# Test matrix built, execute prediction.
paramString = "" if useVerbosity else " -q "
predLabels, predAccuracy, predDiscriminants = \
svmutil.svm_predict( targetLabels, testData, svModel.representation, paramString )
Because with the current python interface you will get the following error:
File "/home/jbbrown/local_bin/pyLibSVM/pyLibSVM/svmutil.py", line 193, in svm_predict
raise ValueError("Wrong options")
ValueError: Wrong options
来源:https://stackoverflow.com/questions/8302519/suppressing-the-output-in-libsvm-python