1 votos

Máquina de vectores de apoyo y forma normal hessiana

Estoy utilizando una máquina de vectores de apoyo de Scikit Learn.

Ejemplo de datos:

[[1, 1], 
 [2, 2],  
 [3, 3], ...]

Mi código:

clf = svm.SVC(kernel='linear')
clf.fit(x, y)

Esto me da:

n = clf.coef_[0]
d = clf.intercept_[0]

que pensaba que era $ n_0 $ y $ d $ de la forma normal hessiana ver: $$ {\displaystyle {\vec {x}}\cdot {\vec {n}}_{0}-d=0} $$

Pero cuando trazo el hiperplano de separación de mi SVM algo está mal. La línea tiene la pendiente correcta pero la intercepción incorrecta.

Parece que la fórmula tiene que ser:

$$ {\displaystyle {\vec {x}}\cdot {\vec {n}}_{0}+d=0} $$

¿Qué me estoy perdiendo aquí?

2voto

tmilne Puntos 36

Creo que esto es pura convención respecto a lo que Scikit Learn quiere decir con el atributo "intercept". La implementación de Scikit Learn se basa en libsvm, y he encontrado esta práctica guía en la página web de libsvm:

https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf

En la ecuación 1 de esa guía escriben el problema de optimización para las SVM, que traduciré al caso lineal ya que es con lo que estás trabajando; también usaré tu $\vec{n}_0, d$ notación. Suponiendo que se tiene $l$ pares instancia-etiqueta $(\vec{x}_i,y_i)_{i=1}^l$ , donde $\vec{x}_i \in \mathbb{R}^n$ y $y_i \in \{-1,1\}$ , quiere resolver

$$\begin{align} \min_{\vec{n}, d, \vec{\xi}} &\frac{1}{2} \vec{n}\cdot \vec{n} + C \sum_{i=1}^l \xi_i,\\ \text{subject to } & y_i(\vec{n}\cdot \vec{x}_i + d) \geq 1-\xi_i,\\ & \xi_i \geq 0 \end{align}$$

La primera restricción es la pertinente para su clasificación. Permitirse una holgura $\xi_i$ para cada ejemplo, se quiere el signo de $y_i$ para ser lo mismo que $\vec{n}\cdot \vec{x}_i + d$ . Eso significa que quieres todos los ejemplos de la clase $1$ para satisfacer $\vec{n}\cdot \vec{x}_i + d >0$ y todos los ejemplos de la clase $-1$ para satisfacer $\vec{n}\cdot \vec{x}_i + d <0$ .

Así, el plano de decisión es $\vec{n}\cdot \vec{x}_i + d = 0$ como has adivinado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X