繁体   English   中英

运行sklearn分类器模型时的值错误

[英]Value error when running sklearn classifier model

我是sklearn的新手,我正在尝试使用scikit构建一个简单的文本分类器,但遇到ValueError。 它在fit()处显示错误,但其他教程仍按原样使用它,并且运行良好。

这是我的代码:

from sklearn.datasets import fetch_20newsgroups
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import MultinomialNB

news = fetch_20newsgroups(subset='all')
print len(news.data)



def train(classifier , X , y):
        X_train , y_train , X_test , y_test = train_test_split(X,y,test_size =            0.20, random_state = 33)
        classifier.fit(X_train ,y_train)
        print "Accuracy %s" % classifier.score(X_test , y_test)
        return classifier

model1 = Pipeline([('vectorizer' , TfidfVectorizer()),('classifier' , MultinomialNB()),])

train(model1 , news.data , news.target)

运行它时,出现值错误

Traceback (most recent call last):
  File "/home/padam/Documents/git/ticketClassifier/news.py", line 30, in <module>
    train(model1 , news.data , news.target)
  File "/home/padam/Documents/git/ticketClassifier/news.py", line 24, in train
    classifier.fit(X_train ,y_train)
  File "/usr/lib/python2.7/dist-packages/sklearn/pipeline.py", line 165, in fit
    self.steps[-1][-1].fit(Xt, y, **fit_params)
  File "/usr/lib/python2.7/dist-packages/sklearn/naive_bayes.py", line 527, in fit
    X, y = check_X_y(X, y, 'csr')
  File "/usr/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 520, in check_X_y
    check_consistent_length(X, y)
  File "/usr/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 176, in check_consistent_length
    "%s" % str(uniques))
ValueError: Found arrays with inconsistent numbers of samples: [ 3770 15076]

样本数量不一致意味着什么。 其他stackoverflow解决方案建议将矩阵重新排列为numpy矩阵。 但是我没有使用numpy。 谢谢!

错误在于您如何使用train_test_split

您正在使用它作为

X_train , y_train , X_test , y_test = train_test_split(X, y,
                                                 test_size = 0.20, 
                                                 random_state = 33)

但是输出顺序实际上与文档中给出的不同。 它是:

X_train , X_test , y_train ,  y_test = train_test_split(X, y,
                                                 test_size = 0.20, 
                                                 random_state = 33)

另外,一个建议是,如果您使用的scikit版本> = 0.18,则将包从cross_validation更改为model_selection ,因为已弃用该软件包并将在新版本中将其删除。

因此,代替:-

from sklearn.cross_validation import train_test_split

使用以下内容:

from sklearn.model_selection import train_test_split

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM