在下面的代码中,数据是一个句子列表和" y" column(data.metagroup)是一个类列表 - 一个简单的分类问题。
问题:
我想将partial_fit
与MultinomialNB分类器一起使用。
根据文档,我传递了X
的稀疏向量(称为xtrain
),这是y
的一个简单序列(称为ytrain
) ,以及np.array
classes
,它是所有可能类的列表。
目标是最终使用xtrain
和ytrain
的子集,但我必须首先使用它。
我得到的错误是:
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
答案 0 :(得分:0)
我已经解决了。问题结果是我从我的数据中传入了字面Y列,当它真正想要的是指示可能分类的唯一值列表时。感谢任何看过这个的人。