在下面的代码中,数据是句子列表,"y"列(data.metagroup(是类列表 - 一个简单的分类问题。
问题:
我想将partial_fit
与多项式NB分类器一起使用。
根据文档,我传递了一个X
的稀疏向量(称为xtrain
(,y
的简单序列(称为ytrain
(,以及classes
的np.array
,这是所有可能类的列表。
目标是最终使用xtrain
和ytrain
的子集,但我必须先让它工作。
相关文档可在此处找到:http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB.partial_fit
我得到的错误是:
ValueError: operands could not be broadcast together with shapes
(42633,3809) (800,3809) (42633,3809)
任何见解将不胜感激。
def make_xy(data):
vectorizer = CountVectorizer(ngram_range = (1,3), min_df = 3, stop_words='english')
X = vectorizer.fit_transform(data.sentences)
y = data.metagroup
return X, y, vectorizer
x, y, vv = make_xy(data)
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.30)
clf = MultinomialNB(alpha=1)
clf.partial_fit(xtrain, ytrain, classes=np.array(y), sample_weight=None)
predictions = clf.predict(xtest)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-cc08c1d170fd> in <module>()
48 clf = MultinomialNB(alpha=1)
---> 50 clf.partial_fit(xtrain, ytrain, classes=np.array(y), sample_weight=None)
/usr/local/lib/python2.7/site-packages/sklearn/naive_bayes.pyc in partial_fit(self, X, y, classes, sample_weight)
530 # Count raw events from data before updating the class log prior
531 # and feature log probas
--> 532 self._count(X, Y)
533
534 # XXX: OPTIM: we could introduce a public finalization method to
/usr/local/lib/python2.7/site-packages/sklearn/naive_bayes.pyc in _count(self, X, Y)
689 if np.any((X.data if issparse(X) else X) < 0):
690 raise ValueError("Input X must be non-negative")
--> 691 self.feature_count_ += safe_sparse_dot(Y.T, X)
692 self.class_count_ += Y.sum(axis=0)
693
ValueError: operands could not be broadcast together with shapes
我已经解决了。 问题原来是我从我的数据中传入文字 Y 列,而它真正想要的是指示可能分类的唯一值列表。 感谢任何看过这个的人。