2010-12-27 25 views
7

Tengo una pregunta sobre el método svm_predict() en libsvm.predicción de método libsvm confusión

El README tiene este código de ejemplo de inicio rápido:

>>> y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}] 
>>> prob = svm_problem(y, x) 
>>> param = svm_parameter('-c 4 -b 1') 
>>> m = svm_train(prob, param) 

>>> p_label, p_acc, p_val = svm_predict(y, x, m) 

Ahora entiendo que y es una lista de categorías que están asociados con los diccionarios en x. También entiendo la parte svm_train.

La parte que no tiene sentido es que en svm_predict, estoy obligado a proporcionar los 'valores verdaderos' de y, junto con los datos de prueba en x. Pensé que la idea era que no sabía las clasificaciones de los datos de prueba antes de tiempo.

si mi datos de entrenamiento es:

y = [1, 2, 3] 
x = [{1:1}, {1:10}, {1:20}] 

pero mi datos de prueba es:

z = [{1:4}, {1:12}, {1:19}] 

Entonces por qué estoy obligado a pasar en los verdaderos valores de z en svm_predict() como:

a, b, c = svm_predict(y, z, m) 

No voy a saber los verdaderos valores de z, para eso es la predicción. ¿Debo simplemente poner valores de clasificación arbitrarios para y cuando realizo una predicción, o me falta algo por completo?

Gracias a todos

Respuesta

5

Utiliza las etiquetas verdaderas para darle precisión estadística en caso de que usted está haciendo una prueba fuera de la muestra.

Si lo está ejecutando "en línea", es decir, que en realidad no tiene las etiquetas verdaderas, entonces sólo hay que poner [0]*len(z) en lugar de y

+0

tiene sentido, gracias. – apexdodge