Один класс SVM для обнаружения выбросов

моя проблема

Я хочу создать классификатор SVM с одним классом для идентификации существительных/аспектов из тестового файла. Учебный файл имеет список существительных. В тесте есть список слов.

Вот что я сделал:

Я использую графический интерфейс Weka и обучил SVM одного класса (libSVM) для получения модели.

Теперь модель классифицирует те слова в тестовом файле, которые классификатор идентифицировал как существительные в сгенерированной модели. Другие классифицируются как выбросы. (Так что это просто работает как поиск. Если оно идентифицируется как существительное в обученной модели, то «да», иначе «нет»)

Итак, как построить правильный классификатор? (я имел в виду формат ввода и какую информацию он должен содержать?)

Примечание:

  • Я не привожу отрицательных примеров в тренировочном файле, так как это один класс.
  • Мой формат ввода: arff
  • Формат тренировочного файла представляет собой набор word, yes
  • Формат тестового файла представляет собой набор слов,?

ИЗМЕНИТЬ В моем тестовом файле будут сочетания-существительные. Таким образом, работа моего классификатора состоит в том, чтобы получить слова-существительные от кандидатов в тестовом файле.


person user7    schedule 01.01.2015    source источник
comment
Я не уверен, что есть смысл говорить об одноклассовом классификаторе. Я бы сформулировал вашу проблему как проблему с двумя классами (существительное и не существительное). Как правило, для обучения классификатора вам понадобятся примеры из обоих классов.   -  person NPE    schedule 01.01.2015
comment
Спасибо за ответ. Но здесь говорится об одной классификации классов. .com/questions/10394615/)   -  person user7    schedule 01.01.2015
comment
О, вы имеете в виду обнаружение выбросов.   -  person NPE    schedule 01.01.2015
comment
Да .. Извините, если я был не ясен.   -  person user7    schedule 01.01.2015
comment
Рекомендация: обновите заголовок вашего сообщения, чтобы отразить обнаружение выбросов по сравнению с одним классом: это станет более понятным.   -  person WestCoastProjects    schedule 01.01.2015
comment
Вы используете униграммы, биграммы или?   -  person badc0re    schedule 01.01.2015
comment
@ badc0re Я использую униграммы.   -  person user7    schedule 02.01.2015
comment
Для униграмм вам даже не нужен classier.   -  person badc0re    schedule 02.01.2015


Ответы (1)


Ваши данные не отформатированы надлежащим образом для этой проблемы.

Если вы положите

word,class

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

0,0,0,0,0,...,0,0,1,0,0,0,...,0,0,0,0,yes

Все, что классификатор может сделать с такими данными, — это подгонка и запоминание. Для неизвестных новых слов результат будет бесполезен.


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

Возможными признаками будут n-граммы. Таким образом, слово «пример» можно представить как

exa:1, xam:1, amp:1, mpl:1, ple:1

Теперь ваш классификатор / SVM может узнать, что наличие n-граммы «ple» типично для существительных. Результаты, вероятно, будут лучше, если вы добавите символы «начало слова» и «конец слова»,

^ex:1, exa:1, xam:1, amp:1, mpl:1, ple:1, le$:1

и, возможно, также использовать более одной длины n-грамм, например.

^ex:1, ^exa:1, exa:1, exam: 1, xam:1, xamp:1, amp:1, ampl:1, mpl:1, mple1:1, ple:1, ple$.1, le$:1

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

person Has QUIT--Anony-Mousse    schedule 02.01.2015
comment
Спасибо за ваш ответ. И в моем тестовом файле на самом деле не будет произвольных слов. В нем будут словосочетания, из которых я хочу получить существительные. Это работа моего классификатора. - person user7; 02.01.2015