Suprimir la salida en libsvm (python)
-
25-10-2019 - |
Pregunta
Estoy usando libsvm (svmutils) de Python para una tarea de clasificación. El clasificador es exacto. Sin embargo, estoy obteniendo una salida como esta:
*
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)
¿Hay alguna forma de suprimir este diálogo? El clasificador sirve perfectamente bien, solo tengo curiosidad. Además, ¿qué hace el "Accuracy"
¿representar? ¿Y por qué esto es 0% en mi caso? (Los datos no se superponen en 80 dimensiones. Total de 4 clases. También los he normalizado correctamente).
Solución
Utilizar el -q
opción de parámetro
import svmutil
param = svmutil.svm_parameter('-q')
...
o
import svmutil
x = [[0.2, 0.1], [0.7, 0.6]]
y = [0, 1]
svmutil.svm_train(y, x, '-q')
Otros consejos
Esto puede funcionar:
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
Además, en los problemas de clasificación, la precisión es la parte (porcentaje) de los elementos predichos correctamente de su conjunto de pruebas / validación cruzada utilizando el modelo entrenado.
Para suprimir tanto el entrenamiento como la salida de predicción, deberá combinar las soluciones proporcionadas por Has2K1 (para suprimir la salida de entrenamiento) y Vonpetrushev (para suprimir la salida de predicción).
Desafortunadamente, no puedes hacer algo como lo siguiente:
# Test matrix built, execute prediction.
paramString = "" if useVerbosity else " -q "
predLabels, predAccuracy, predDiscriminants = \
svmutil.svm_predict( targetLabels, testData, svModel.representation, paramString )
Porque con la interfaz Python actual obtendrá el siguiente error:
File "/home/jbbrown/local_bin/pyLibSVM/pyLibSVM/svmutil.py", line 193, in svm_predict
raise ValueError("Wrong options")
ValueError: Wrong options