OKだから私はAndrew NgのMachine Learningコースを勉強しています。私は現在this chapterを読んでおり、SKLearnとPythonを使って自分自身で多項式Naive Bayes(12ページの一番下)を試してみたいと思っています。だから、アンドリューはそうMultinomialNB - 理論と実践
我々は
x_i
は電子メールでi
番目の単語の身元を示すものと、この場合の各電子メールをエンコードする方法を提案します。したがって、x_i
は、{1, . . . , |V|}
の値をとる整数になりました。ここでは、|V|
は 語彙(辞書)のサイズです。 nワードの電子メールは、今度はというベクトルで表され、n
のベクトルで表されます.n は異なる文書で異なることがあります。例えば、電子メールが(“nips”
が第三万五千単語が 辞書にある場合)、次いでx_1 = 1
、及びx2 = 35000
(“a”
最初 辞書内の単語である)“A NIPS . . . ,”
で始まる場合。
ハイライトを参照してください。
これは私がPythonでやったことです。私はvocabulary
を持っています。これは502語のリストです。それぞれの "電子メール"をエンコードして、Andrewが記述したのと同じ方法で表現します。例えば、 "this is sparta"というメッセージは[495, 296, 359]
と "これはスパルタ"によって。[495, 296, 415, 359]
。
ここに問題があります。
明らかに、SKLearnの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.
ありがとうございます!多分私がリンクした方法とSKLearn multinomialNBは異なる方法でしょうか?私がリンクした(そして引用した)ノートでは、アルゴリズムは異なる長さで動作することができます。 –
あなたが読んでいた章では、各文書の固定長エンコーディングが8ページにあり、Sklearnが多項式NBでそれをどのように実装しているかを示しています。だから、sklearnの方法は8ページのAndrew Ngによって記述されています.12-13ページのリンク先の方法は、テキスト分類のイベントモデルについて説明しています。これらの2つの方法は異なるようです。 –
さて、それはNaive Bayesサブチャプターの下にあります(Naive Bayesは2です、多項式モデルは2.2章です)ので、NBの多項バリエーションであったと推測しました。 SKLearnの文書には、multinomialNBが "多項式Naive Bayes分類子"であることも記載されています。 –