Вопрос по matlab, libsvm, svm – Matlab libsvm - как найти коэффициенты w

17

Как определить, что представляет собой вектор w, то есть перпендикуляр к плоскости отрыва?

и, пожалуйста, дайте решение, как найти вектор W в JAVA? Somnath Kadam

Ваш Ответ

1   ответ
20

Вот, Если я правильно помню, это основано на том, какдвойная форма оптимизации СВМ отрабатывает.

model = svmtrain(...);
w = (model.sv_coef' * full(model.SVs));

И это смещение (и я действительно не помню, почему оно отрицательное):

bias = -model.rho;

Затем выполнить классификацию (для линейного SVM) для набора данных N-by-M «признаки». с N экземплярами и M функциями,

predictions = sign(features * w' + bias);

Если ядро не является линейным, то это не даст вам правильного ответа.

Для получения дополнительной информации см.Как я мог генерировать первичную переменную w линейного SVM?, из руководства по libsvm.

это сработало для меня. Ваша модель обучена правильно? делатьw а такжеbias похожи на разумные значения, прежде чем делать с ними классификацию? Какие варианты вы передаетеsvmtrain?
Я отредактировал свой вопрос, чтобы объяснить, хотя в действительности нет никакого смысла делать это ... он вернет точно такой же результат, какprobs в[guess, acc, probs] = svmpredict(...);.
И как именно я использую их для ручной классификации? Я говорю о 2-х классном деле. Trup
уф, понял. Это немного сложно!arrayfun(@(i)a.svm.sv_coef' * exp(-a.svm.Parameters(4) .* sum((repmat(features(i, :), size(a.svm.SVs, 1), 1) - a.svm.SVs).^2, 2)) - a.svm.rho, 1:numel(labels))' Идея в том, что мы запускаем функцию ядра для каждого признака + опорный вектор, затем умножаем на коэффициент SV и, наконец, добавляем смещение. Параметры (4) - это гамма-параметр.
Нет, он действительно не возвращает тот же результат, он только возвращает -1 с. Я знаю, что в этом нет никакого смысла, но я хотел бы убедиться, что это правильно, и тогда я просто использую веса в отдельном приложении для «ручного». делать классификацию без явного выполнения каких-либо вещей SVM. Большое спасибо, это действительно узкое место в моем проекте. Можете ли вы еще раз проверить это и посмотреть, где ошибка? Trup

Похожие вопросы