Я пытаюсь реализовать наивный байесовский классификатор для классификации документов, которые по существу устанавливают (в отличие от пакетов) функций, т.е. каждая функция содержит набор уникальных функций, каждая из которых может появляться максимум один раз в документе. Например, вы можете думать о функциях как об уникальных ключевых словах для документов.
Я внимательно следил за Ренни, эт. и др. бумага на http://www.aaai.org/Papers/ICML/2003/ICML03-081.pdf,, но я столкнулся с проблемой, которая, кажется, не решена. А именно, классификация коротких документов приводит к гораздо большей апостериорной вероятности из-за того, что документы имеют меньшее количество признаков; наоборот для длинных документов.
Это потому, что апостериорные вероятности определены как (игнорируя знаменатель):
P(class|document) = P(class) * P(document|class)
, который расширяется до
P(class|document) = P(class) * P(feature1|class) * ... * P(featureK|class)
Исходя из этого, ясно, что короткие документы с меньшим количеством функций будут иметь более высокую апостериорную вероятность просто потому, что меньше терминов для умножения вместе.
Например, предположим, что функции "foo", "bar" и "baz" все обнаруживаются в положительных наблюдениях за тренировками. Тогда документ с одним признаком «foo» будет иметь более высокую апостериорную вероятность быть классифицированным в положительном классе, чем документ с признаками {«foo», «bar», «baz»}. Это кажется нелогичным, но я не совсем уверен, как решить эту проблему.
Существует ли какая-либо нормализация длины, которую можно сделать? Одна идея состоит в том, чтобы добавить размер документа в качестве функции, но это не совсем правильно, поскольку результаты будут искажены размером документов в обучающих данных.