抑制libsvm(python)中的输出

4 投票
3 回答
3707 浏览
提问于 2025-04-17 07:15

我在用Python的libsvm(svmutils)做分类任务。这个分类器的效果很好。不过,我得到的输出是这样的:

*
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)

有没有办法让我不看到这个对话框?分类器工作得很不错,我只是好奇。另外,"Accuracy"是什么意思?为什么在我的情况下是0%?(数据在80个维度上没有重叠,总共有4个类别。我也进行了正确的归一化处理。)

3 个回答

1

要同时隐藏训练和预测的输出,你需要把has2k1提供的解决方案(用于隐藏训练输出)和vonPetrushev提供的解决方案(用于隐藏预测输出)结合起来。

不过,很遗憾,你不能这样做:

# Test matrix built, execute prediction.
paramString = "" if useVerbosity else " -q "
predLabels, predAccuracy, predDiscriminants = \
 svmutil.svm_predict( targetLabels, testData, svModel.representation, paramString )

因为在目前的Python接口下,你会遇到以下错误:

  File "/home/jbbrown/local_bin/pyLibSVM/pyLibSVM/svmutil.py", line 193, in svm_predict
    raise ValueError("Wrong options")
  ValueError: Wrong options
1

这个方法可以用:

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

另外,在分类问题中,准确率是指你用训练好的模型在测试集或交叉验证集上正确预测的项目所占的比例(百分比)。

6

使用 -q 参数选项

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

或者

import svmutil
x = [[0.2, 0.1], [0.7, 0.6]]
y = [0, 1]
svmutil.svm_train(y, x, '-q')

撰写回答