LibSVM превращает все мои обучающие векторы в вспомогательные векторы, почему? - PullRequest
5 голосов
/ 20 апреля 2011

Я пытаюсь использовать SVM для классификации новостных статей.

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

Пример: - Создан обучающий образец ...

1 1: 1 2: 1 3: 1 4: 1 5: 1 6: 1 7: 1 8: 1 9: 1 10: 1 11: 1 12: 1 13: 1 14: 1 15: 1 16: 1 17: 1 18: 1 19: 1 20: 1 21: 1 22: 1 23: 1 24: 1 25: 1 26: 1 27: 1 28: 1 29: 1 30: 1

Поскольку это первый документ, все функции присутствуют.

Я использую 1, 0 в качестве меток классов.

Я использую svm.Net для классификации.

Я дал 300 весовых векторов, вручную классифицированных как тренировочные данные, и сгенерированная модель принимает все векторы в качестве опорных векторов, что, безусловно, является переобучающим.table) is 7610.

В чем может быть причина?

Из-за этой перестройки мой проект сейчас находится в довольно плохом состоянии.Он классифицирует каждую статью как положительную.

В двоичной классификации LibSVM есть ли какие-либо ограничения на метку класса?

Я использую 0, 1 вместо -1 и +1.Это проблема?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Вам необходимо выполнить какой-либо тип поиска параметров, также, если классы не сбалансированы, классификатор может получить искусственно высокую точность без особых усилий. Это руководство хорошо в преподавании базовых, практических вещей, вы, вероятно, должны прочитать его

1 голос
/ 22 апреля 2011

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

Я бы также изучил различные доступные вам ядра. Тот факт, что вводимые вами данные являются двоичными, может быть проблематичным для ядра RBF (или может сделать их использование неоптимальным по сравнению с другим ядром). Я не знаю, какое ядро ​​могло бы быть лучше. Попробуйте линейное ядро ​​и поищите больше предложений / идей:)

Дополнительную информацию и, возможно, лучшие ответы см. На stats.stackexchange.com.

1 голос
/ 22 апреля 2011

Я бы определенно попытался использовать -1 и +1 для ваших ярлыков, это стандартный способ сделать это.

Кроме того, сколько у вас данных?Поскольку вы работаете в 7610-мерном пространстве, у вас может потенциально быть столько опорных векторов, где разные векторы «поддерживают» гиперплоскость в каждом измерении.некоторый тип метода выбора признаков, такой как анализ основных компонентов.

...