2017-11-17 29 views
0

在下面的代碼中,數據是一個句子列表,而「y」列(data.metagroup)是一個類列表 - 一個直接的分類問題。MultisomialNB分類器中partial_fit的錯誤

問題:

我想用partial_fit與MultinomialNB分類。

基礎上的文檔,我傳遞一個稀疏向量X(稱爲xtrain),爲y簡單的串聯(稱爲ytrain),以及用於np.arrayclasses是所有可能的類的列表。

目標是最終使用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 
+0

添加完整的代碼和數據 – sera

+0

老實說,它只是在「元組」列中的數值類句子列表 - 一個兩列熊貓數據框。代碼中沒有其他內容,但是從csv中提取數據等。這是一切相關的。謝謝。 – paszoon

+1

重現錯誤的唯一方法是獲取數據。如果你不能修改數據,請添加一些導致相同錯誤的人爲數據。 – sera

回答

0

我解決了它。結果問題是我從我的數據中傳遞了字面Y列,當它真正需要的是指示可能分類的唯一值列表。感謝任何看着這個的人。