Подавление вывода в libsvm (python) - PullRequest
4 голосов
/ 29 ноября 2011

Я использую libsvm (svmutils) из python для задачи классификации.Классификатор точен.Тем не менее, я получаю вывод, как это:

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

5 голосов
/ 31 января 2012

Используйте параметр параметра -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')
1 голос
/ 02 марта 2012

Для подавления результатов обучения и прогнозирования вам необходимо объединить решения, предоставляемые 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 голос
/ 29 ноября 2011

Это может работать:

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

Кроме того, в задачах классификации точность - это часть (процент) правильно спрогнозированных элементов из вашего набора тестирования / перекрестной проверки с использованием обученной модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...