Cómo codificar TSVM usando bibliotecas SVM

* A2A *

Las TSVM fueron introducidas por primera vez por Thorsten Joachims en 99 [1]. El documento da el algoritmo en la Figura 4.

La idea básica es:

Dado un dato etiquetado [matemático] \ displaystyle D = \ {(x_i, y_i) \} _ {i = 1} ^ N [/ math] y datos no etiquetados [matemático] \ displaystyle U = \ {x_i \} _ {i = 1} ^ M [/ math], podemos aprender un clasificador de la siguiente manera:

  1. [math] f [/ math] = Aprende un clasificador SVM usando [math] D [/ math]
  2. Deje [math] \ displaystyle U ‘= \ cup_ {x_i \ in U} (x_i, f (x_i)) [/ math]
    1. Esencialmente etiquete todos los puntos en datos no etiquetados con [math] f [/ math]
  3. mientras (algunos criterios T1)
    1. [math] f [/ math] = Aprende un clasificador SVM usando [math] D \ cup U ‘[/ math]
    2. Según algunos criterios T2, cambie las etiquetas de [math] U ‘[/ math]

Como se puede ver, es un algoritmo muy sencillo, pero las partes clave son los criterios T1 y T2 para los cuales te sugiero que mires [1].

Para implementar esto utilizando algunas bibliotecas SVM existentes, necesita una implementación que admita establecer diferentes C (factor de penalización) para diferentes puntos. Desafortunadamente, la mayoría de las implementaciones de las bibliotecas SVM no admiten esto de forma inmediata. Por lo tanto, le queda extender su API existente para admitir Cs por instancia o usar una implementación TSVM existente que está disponible en SVMlight [2].

[1] http://www.cs.cornell.edu/People…

[2] Máquina de vectores de soporte SVM-Light