簡體   English   中英

培訓和開發數據,ValueError:尺寸不匹配

[英]training and development data, ValueError: dimension mismatch

我建立了以下分類模型:

def buildData(x):
    count_vect = CountVectorizer()
    X_train_counts = count_vect.fit_transform(x)
    tf_transformer = TfidfTransformer().fit(X_train_counts)
    X_train_tf = tf_transformer.transform(X_train_counts)
    return X_train_tf

x, y = parseXml('data/training.xml')
xDev, yDev = parseXml('data/dev.xml')

x = buildData(x)
clf = MultinomialNB().fit(x, y)
predicted = clf.predict(x)
print( 'Accuracy: ', accuracy_score(y, predicted))

我使用訓練數據“ x”擬合模型,並在“ x”上對其進行測試..

問題是,如果我想在xDev上進行預測(預測= clf.predict(xDev)),則會顯示錯誤。

而且我認為這是因為未准備好數據(呈Tf_idf矩陣形狀),所以我將xDev數據傳遞給了相同的函數:

xDev = buildData(xDev)

准備它,但不幸的是,出現此錯誤:

Traceback (most recent call last):   File "C:/Users/BG/Desktop/P2/E2.py", line 43, in <module>
    predicted = clf.predict(xDev)   File "C:\Python35\lib\site-packages\sklearn\naive_bayes.py", line 66, in predict
    jll = self._joint_log_likelihood(X)   File "C:\Python35\lib\site-packages\sklearn\naive_bayes.py", line 725, in
_joint_log_likelihood
    return (safe_sparse_dot(X, self.feature_log_prob_.T) +   File "C:\Python35\lib\site-packages\sklearn\utils\extmath.py", line 135, in safe_sparse_dot
    ret = a * b   File "C:\Python35\lib\site-packages\scipy\sparse\base.py", line 476, in
__mul__
    raise ValueError('dimension mismatch') ValueError: dimension mismatch

您需要從第一個(培訓)調用中保存並保留tf_transformer。 tf_transformer取決於您提供給它的數據的詞匯量。 在您的情況下,x和xDev之間的語料庫詞匯(即組合文檔中所有唯一詞的集合)可能會有所不同。 這在文本分類用例中很常見。 例如,您訓練x可能有1000個單詞,而xDev可能有800個單詞(不同或相似)。

如果您從第一次調用buildData()持續使用tf_transformer,並使用相同的tf_transformer轉換xDev數據,而不是在buildData()中再次創建另一個數據,則錯誤將消失。

換句話說,tf_transformer應該創建一次,適合訓練數據,然后重新使用。 當您再次對測試數據調用buildData時,不應每次針對測試或生產數據都重新創建該代碼。 這是有關創建NLP /分類管道的另一種方法的博客 ,該方法可重復使用一次創建的轉換器。

TL; DR-在應用程序工作流中將變量設置為一次以下,而不是多次

tf_transformer = TfidfTransformer().fit(X_train_counts)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM