python - means - SKLearn: ¿Obtener distancia de cada punto del límite de decisión?
modelos machine learning python (2)
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 kernel lineal, el límite de decisión es y = w * x + b, la distancia desde el punto x hasta el 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 kernels no lineales, no hay forma de obtener la distancia absoluta. Pero aún puede 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 sobre la distancia del punto al hiperplano incluso para el kernel RBF.
Primero, sabemos que SVM debe encontrar un w "óptimo" para un hiperplano wx + b = 0.
Y el hecho es que
w = / sum_ {i} / alpha_i / phi (x_i)
donde esos x son los llamados vectores de soporte y esos alfa son coeficientes de ellos. Tenga en cuenta que hay una 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]
entonces podemos obtener w. Por lo tanto, la distancia que desea debe ser
svc.decision_function(x) / w_norm
donde w_norm la norma calculada arriba.
( no me permite publicar más de 2 enlaces, por lo que debe renderizar el látex usted mismo).