Estoy trabajando en un ejemplo trivial de SVM para ganar algo de intuición sobre su funcionamiento. En el caso de 6 puntos de datos, ¿sería posible calcular el valor de $w$ y $b$ a mano ? Intuitivamente soy capaz de obtener los valores correctos sólo hasta un factor de escala.
Utilizando Sklearn con un núcleo lineal los valores correctos son
- $w = (\frac{1}{4}, - \frac{1}{4})^T$
- $b = - \frac{3}{4}$
Intuitivamente he probado diferentes valores:
- $w = (1, - 1)^T$ y $b = - 3$ que proviene de la ecuación directa de la recta $x_2 = x_1 - 3$ . Esto da el límite de decisión correcto y el margen geométrico $2\sqrt{2}$
- $w = (\frac{1}{\sqrt{2}}, - \frac{1}{\sqrt{2}})^T$ y $b = - \frac{3}{\sqrt{2}}$ que garantiza que $||w|| = 1$ pero no me lleva mucho más lejos
Ejemplo
Conjunto de datos y resultado de Sklearn
import numpy as np
from sklearn.svm import SVC
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])
clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y)