Строгие классовые метки в SVM - PullRequest
2 голосов
/ 01 июля 2011

Я использую one-vs-all для 21 -класса svm-классификации .

Я хочу, чтобы метка -1 означала "не в этом классе" и метка 1 для обозначения "действительно в этом классе" для каждого из 21 ядер.

У меня естьсгенерировал мои предварительно вычисленные ядра и мои тестовые векторы, используя этот стандарт.

Используя easy.py все прошло хорошо для 20 классов, но для одного из них метки были переключены так, чтобы все входы, которыедолжны были быть помечены 1 для того, чтобы быть в классе, вместо этого были помечены -1 и наоборот.

Разница в этом классе состояла в том, что первый вектор в предварительно вычисленном ядре был помечен 1, тогда как во всех других ядрах первый вектор был помечен -1.Это говорит о том, что LibSVM перемаркирует все мои векторы.

Есть ли способ предотвратить это или простой способ обойти это?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2015

Если во время обучения libsvm сначала встретится с меткой A , то во время прогнозирования libsvm будет использовать положительные значения для назначения объекта метке A и отрицательные значения для другой метки.

Так что если вы используете метку 1 для положительного класса и 0 для отрицательной, то для получения правильных выходных значений вы должны сделать следующеетрюк (Matlab).

%test_data.y contains 0-s and 1-s
[labels,~,values] = svmpredict(test_data.y, test_data.X, model, ' ');

if (model.Label(1) == 0) % we check which label was encountered by libsvm first
    values = -values;
end
2 голосов
/ 06 апреля 2013

Вы уже обнаружили, что libsvm использует метку -1 для любой метки, с которой встречается первой. Причина в том, что он допускает произвольные метки и изменяет их на -1 и +1 в соответствии с порядком их появления в векторе меток.

Таким образом, вы можете проверить это непосредственно или посмотреть на модель, возвращаемую libsvm. Он содержит запись с именем Label, которая представляет собой вектор, содержащий порядок, в котором libsvm встретил метки. Вы также можете использовать эту информацию для изменения знака ваших результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...