【发布时间】:2017-06-27 19:07:54
【问题描述】:
好的,我正在学习 Andrew Ng 的机器学习课程。我目前正在阅读 this chapter 并想使用 SKLearn 和 Python 为自己尝试多项朴素贝叶斯(第 12 页底部)。所以 Andrew 提出了一种方法,在这种情况下,每封电子邮件都被编码为这样
我们让
x_i表示电子邮件中i-th 单词的身份。因此,x_i现在是一个整数,取值在{1, . . . , |V|},其中|V|是 我们的词汇量(字典)。现在是一封包含 n 个单词的电子邮件 由长度为n的向量(x1, x2, . . . , xn)表示 注意 n 对于不同的文档可能会有所不同。例如,如果电子邮件开始“A NIPS . . . ,”然后x_1 = 1(“a”是第一个单词 字典)和x2 = 35000(如果“nips”是第35000个单词 字典)。
查看亮点。
所以这也是我在 Python 中所做的。我有一个vocabulary,它是一个包含 502 个单词的列表,我对每个“电子邮件”进行了编码,因此它的表示方式与 Andrew 描述的相同,例如消息“这是斯巴达”由[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.
【问题讨论】:
标签: python machine-learning scikit-learn text-classification multinomial