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

  1. Сначала найдите список всех уникальных слов в учебном документе и назовите его словарём.
  2. Для каждого слова в словаре найдите его TFIDF в каждом учебном документе. Затем документ представляется как вектор этих оценок TFIDF.

У меня вопрос: 1. Как мне представить тестовые документы? Скажем, в одном из тестовых документов нет слов в словаре. В этом случае оценки TFIDF будут равны нулю для всех слов в словаре этого документа.

  1. Я пытаюсь использовать LIBSVM, который использует разреженный векторный формат. В случае вышеуказанного документа, в котором все записи в векторном представлении установлены на 0, как мне его представить?
0
karthik A 22 Дек 2012 в 00:31

1 ответ

Лучший ответ

Вы должны хранить достаточно информации о тренировочном корпусе, чтобы выполнять преобразование TF IDF в невидимых документах. Это означает, что вам потребуются заданные частоты терминов в корпусе обучения. Игнорировать невидимые слова в тестовых документах можно. Ваш svm все равно не узнает для них вес. Обратите внимание, что невидимые термины должны быть редкими в корпусе тестов, если ваши обучающие и тестовые распределения похожи. Таким образом, даже если несколько терминов будут отброшены, у вас все равно будет много терминов для классификации документа.

2
Rob Neuhaus 22 Дек 2012 в 08:28
ТАК, если у меня есть тестовый документ, в котором есть слова, которые никогда не встречаются в обучающем корпусе, мой вектор документа tfidf будет иметь все нули, верно?
 – 
karthik A
22 Дек 2012 в 09:11
Только если документ состоит только из невидимых слов.
 – 
Rob Neuhaus
22 Дек 2012 в 10:12
Да. Когда я использую такую ​​библиотеку, как libSVM, она следует разреженному векторному формату. Итак, поскольку все записи равны 0, это похоже на то, что разреженное векторное представление пусто. Если вы знакомы с libSVM, знаете ли вы, как это делается?
 – 
karthik A
22 Дек 2012 в 10:46
Вам не нужно помещать в вектор 0 записей, они ничего не делают. Если вы дадите LibSVM вектор 0, он просто будет использовать термин смещения в SVM, который, вероятно, будет соответствовать выбору самого популярного класса в обучающих данных.
 – 
Rob Neuhaus
22 Дек 2012 в 11:14