SKLearn: ¿Obtener la distancia de cada punto desde el límite de decisión?

Estoy usando SKLearn para ejecutar SVC en mis datos.

from sklearn import svm svc = svm.SVC(kernel='linear', C=C).fit(X, y) 

¿Quiero saber cómo puedo obtener la distancia de cada punto de datos en X desde el límite de decisión?

Para el núcleo lineal, el límite de decisión es y = w * x + b, la distancia desde el punto x al límite de decisión es y / || w ||.

 y = svc.decision_function(x) w_norm = np.linalg.norm(svc.coef_) dist = y / w_norm 

Para los núcleos no lineales, no hay forma de obtener la distancia absoluta. Pero todavía puedes usar el resultado de decision_funcion como distancia relativa.

Resulta que estoy haciendo la tarea 1 de un curso llamado Técnicas de aprendizaje automático. Y sucede que hay un problema acerca de la distancia del punto al hiperplano incluso para el núcleo RBF.

Primero, sabemos que la SVM es encontrar una w “óptima” para un hiperplano wx + b = 0.

Y el hecho es que

w = \ sum_ {i} \ alpha_i \ phi (x_i)

donde esos x son llamados vectores de soporte y esos alfa son coeficientes de ellos. Tenga en cuenta que hay un phi () fuera de la x; es la función de transformación que transforma x en un espacio de alta dimensión (para RBF, es una dimensión infinita). Y sabemos que

 [\phi(x_1)\phi(x_2) = K(x_1, x_2)][2] 

para que podamos calcular

entonces podemos obtener w. Por lo tanto, la distancia que desee debe ser

 svc.decision_function(x) / w_norm 

donde w_norm la norma calculada anteriormente.

(StackOverflow no me permite publicar más de 2 enlaces, así que renderice el látex usted mismo).