ОК, поэтому я просто изучаю курс машинного обучения Эндрю Нг. Я сейчас читаю this chapter и хочу попробовать Multinomial Naive Bayes (внизу страницы 12) для себя, используя SKLearn и Python. Так Эндрю предлагает способ, в котором каждая электронной почте в этом случае кодируется такMultinomialNB - Теория против практики
Мы позволяем
x_i
обозначать личностьi
-й слова в электронной почте. Таким образом,x_i
теперь является целым числом, принимающим значения в{1, . . . , |V|}
, где|V|
составляет размер нашей лексики (словаря). Электронная почта n слов теперь , представленная вектором(x1, x2, . . . , xn)
длиныn
Обратите внимание, что n может отличаться для разных документов. Например, если письмо начинается с“A NIPS . . . ,”
затемx_1 = 1
(“a”
это первое слово в словаре ) иx2 = 35000
(если“nips”
является 35000th слово в словаре ).
См. Основные моменты.
Так что это то, что я сделал в Python. У меня есть vocabulary
, который представляет собой список из 502 слов, и я закодировал каждое «электронное письмо» так, чтобы оно было представлено так же, как описывает Эндрю, например, сообщение «это спарта» представлено [495, 296, 359]
и «это не спартанца "по [495, 296, 415, 359]
.
Так что возникает проблема.
По-видимому, для ввода MultinomialNB
требуется ввод с однородной формой (я не уверен в этом, но на данный момент я получаю ValueError: setting an array element with a sequence.
, что, я думаю, связано с тем, что входные векторы не имеют одинакового размера).
Так что мой вопрос в том, как я могу использовать MultinomialNB
для сообщений с несколькими длинами? Является ли это возможным? Что мне не хватает?
Вот несколько больше того, что я делаю с кодом:
X = posts['wordsencoded'].values
y = posts['highview'].values
clf = MultinomialNB()
clf.fit(X, y)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
print(clf.predict())
Что вход выглядит следующим образом:
Стек след:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-933-dea987cd8603> in <module>()
3 y = posts['highview'].values
4 clf = MultinomialNB()
----> 5 clf.fit(X, y)
6 MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
7 print(clf.predict())
/usr/local/lib/python3.4/dist-packages/sklearn/naive_bayes.py in fit(self, X, y, sample_weight)
525 Returns self.
526 """
--> 527 X, y = check_X_y(X, y, 'csr')
528 _, n_features = X.shape
529
/usr/local/lib/python3.4/dist-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
508 X = check_array(X, accept_sparse, dtype, order, copy, force_all_finite,
509 ensure_2d, allow_nd, ensure_min_samples,
--> 510 ensure_min_features, warn_on_dtype, estimator)
511 if multi_output:
512 y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,
/usr/local/lib/python3.4/dist-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
371 force_all_finite)
372 else:
--> 373 array = np.array(array, dtype=dtype, order=order, copy=copy)
374
375 if ensure_2d:
ValueError: setting an array element with a sequence.
Спасибо! Так что, может быть, метод, который я связал, и многочлены NN SKLearn - это разные методы? В примечаниях, которые я связывал (и как цитировал), алгоритм может работать с разными длинами. –
В той главе, которую вы читали, фиксированная длина каждого документа указана на стр. 8, и то, как sklearn реализует его в Multinomial NB. Таким образом, метод sklearn описан Andrew Ng на стр. 8. Метод, который вы здесь связали, который находится на странице 12-13, описывает модель события для классификации текста. Эти два метода кажутся разными. –
Ну, это под подразделением Наивного Байеса (Naive Bayes - 2, модель мультиномиального события - глава 2.2), поэтому я догадался, что это была многочлена вариации NB. Документация SKLearn также гласит, что multinomialNB является «многокомпонентным классификатором Naive Bayes». –