2015-08-18 3 views

ответ

1

Для линейного ядра граница решения y = w * x + b, расстояние от точки x до границы решения - y/|| w ||.

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

Для нелинейных ядер невозможно получить абсолютное расстояние. Но вы все равно можете использовать результат decision_funcion как относительное расстояние.

+0

В чем разница между выходом решающей функции, а г/w_norm? – user1566200

+0

http://stackoverflow.com/questions/11030253/decision-values-in-libsvm ответ от @karenu был бы очень полезен. – yangjie

+1

Значение решения - результат оценки w * x + b, y/w_norm - фактическое расстояние. Итак, чем ближе значение решения к 0, тем ближе к границе решения. И значение его решения указывает класс точки. – yangjie

0

Бывает так, что я выполняю домашнее задание 1 курса по методам машинного обучения. И, случается, проблема о расстоянии точки до гиперплоскости даже для ядра RBF.

Сначала мы знаем, что СВМ найти "оптимальный" вес для гиперплоскости WX + Ь = 0.

И дело в том, что

ш = \ sum_ {я} \ alpha_i \ Phi (x_i)

где эти x являются так называемыми вспомогательными векторами, а те альфа - их коэффициентом. Обратите внимание, что существует phi() вне x; это функция преобразования, которая преобразует x в какое-то высокоразмерное пространство (для RBF это бесконечная размерность). И мы знаем, что

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

поэтому мы можем вычислить

, то мы можем получить ш. Итак, расстояние, которое вы хотите, должно быть

svc.decision_function(x)/w_norm 

где w_norm рассчитанная выше норма.

(StackOverflow не позволяет мне размещать более 2 ссылки, чтобы оказать латексной сами ба.)