抑制 libsvm (python) 中的输出

Posted

技术标签:

【中文标题】抑制 libsvm (python) 中的输出【英文标题】:Suppressing the output in libsvm (python) 【发布时间】:2012-01-08 07:20:55 【问题描述】:

我正在使用来自 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 个类。我也对其进行了适当的规范化。)

【问题讨论】:

【参考方案1】:

使用-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')

【讨论】:

【参考方案2】:

这可以工作:

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

此外,在分类问题中,准确度是使用经过训练的模型从您的测试/交叉验证集中正确预测项目的部分(百分比)。

【讨论】:

实际上,我有一些属于 4 个类的训练数据,每个类都有一个 80 维的特征向量和 4 个 one-vs-rest 分类器来测试单个测试点。在这种情况下,是否通过类似“如果测试点在训练期间已标记,则交叉验证成功且准确度为 100% 否则交叉验证失败且准确度为 0”之类的方式计算准确度(它将只有 0 或 100 % 在这种方法中,因为测试数据只是一个点)??我说对了吗?谢谢,答案有帮助。【参考方案3】:

要同时抑制训练和预测输出,您需要结合 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

【讨论】:

以上是关于抑制 libsvm (python) 中的输出的主要内容,如果未能解决你的问题,请参考以下文章

libsvm 中的输出错误

MATLAB/Octave 中的 LIBSVM - libsvmread 的输出是啥?

Python抑制shell输出[重复]

python基于tpot训练模型并抑制输出stackingestimator而是输出单模型例如xgboost设置

选择性地抑制输出python [重复]

R语言ggplot2可视化抑制可视化网格中的竖线输出抑制可视化网格中的横线线输出抑制背景网格输出实战