MultinomialNB分类器

时间:2017-11-17 22:24:49

标签: python scikit-learn

在下面的代码中,数据是一个句子列表和" y" column(data.metagroup)是一个类列表 - 一个简单的分类问题。

问题:

我想将partial_fit与MultinomialNB分类器一起使用。

根据文档,我传递了X的稀疏向量(称为xtrain),这是y的一个简单序列(称为ytrain) ,以及np.array classes,它是所有可能类的列表。

目标是最终使用xtrainytrain的子集,但我必须首先使用它。

相关文档可在此处找到: 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

1 个答案:

答案 0 :(得分:0)

我已经解决了。问题结果是我从我的数据中传入了字面Y列,当它真正想要的是指示可能分类的唯一值列表时。感谢任何看过这个的人。