Я построил матрицу совместного вхождения с scikit CountVectorizer и некоторой линейной алгеброй из предложений:
docs = ['I loved the movie',
'I hated the movie',
'a great movie. good acting',]
, а сама матрица совместного вхождения:
act good great hate love movi
act [0 1 1 0 0 1]
good [1 0 1 0 0 1]
great [1 1 0 0 0 1]
hate [0 0 0 0 0 1]
love [0 0 0 0 0 1]
movi [1 1 1 1 1 0]
( Вы можете заметить, что диагональ равна 0, потому что в моем случае меня не волнует слово, встречающееся с самим собой.)
Я реализую алгоритм из научной статьи c, которая запрашивает:
... - это вероятность того, что слово Wj сосуществует в классе Ci ...
Таким образом, вопрос заключается в следующем: из заданной матрицы совпадений Как рассчитать вероятность того, что слово встречается в некотором классе Ci (скажем, матрица выше относится к классу Ci)?
Моя точка зрения - если я вычислю сумму каждого строка, представляющая число совпадений для каждого отдельного слова Wj:
[3],
[3],
[3],
[1],
[1],
[5]
. И если я суммирую эту новую матрицу, я получу число 16. Теперь, если я разделю предыдущую 1D матрицу на 16, я получить новую 1D матрицу:
[0.1875]
[0.1875]
[0.1875]
[0.0625]
[0.0625]
[0.3125]
Это правильная линия мысли? Представляет ли эта последняя матрица вероятность одновременного появления? Для большего контекста я реализую версию Наивного байесовского классификатора спама. Научная статья c здесь здесь . Соответствующая информация на страницах 3 и 4. Большое спасибо.