在sklearn中,CountVectorizer对测试字符串无效

3

我一直在使用sklearn进行情感分析。 我有一个包含3000个评论的csv文件,并且我正在使用其中60%的评论来训练我的分类器。 当我尝试使用CountVectorizer.transform()提供自定义评论以预测标签时,它会抛出以下错误:

    Anaconda\lib\site-packages\sklearn\feature_extraction\text.py", line 864, in transform
    raise ValueError("Vocabulary wasn't fitted or is empty!")
    ValueError: Vocabulary wasn't fitted or is empty!

请帮助我,这是拟合训练集的代码:

    def preprocess():
        data,target = load_file()
        count_vectorizer = CountVectorizer(binary='true',min_df=1)
        data = count_vectorizer.fit_transform(data)
        tfidf_data = TfidfTransformer(use_idf=False).fit_transform(data)
        return tfidf_data

以下是预测自定义评论情感的代码:

    def customQuestionScorer(question, clf):
        X_new_tfidf = vectorizer.transform([question]).toarray()
        print (clf.predict(X_new_tfidf))
    q = "I really like this movie"
    customQuestionScorer(q,classifier)

mn = MultinomialNB() cv = CounterVectorizer()

data is your example, or test, data

X = cv.fit_transform([' '.join(row) for row in data]) #y just distributes your data into catagories # y = ["一些随机的东西","一些其他随机的东西"] mn.fit(X,y).predict_proba(cv.transform([' '.join([test])]))
- NationWidePants
您还需要解决数据不存在的情况,该模型在处理“NULL”集时存在问题。 - NationWidePants
1个回答

1
  1. 我在这里没有看到分类器,你只使用了转换器(CountVectorizer,TfidfTransformer)。要获得预测结果,必须在TfidfTransformer的输出上训练分类器。
  2. 不清楚你是否使用相同的CountVectorizer和TfidfTransformer(之前在训练集上训练过)来转换测试集文本,还是使用了新的。为了为先前安装的分类器提供正确的输入,必须从先前安装的转换器中提供输入(而不是新的)。

请查看此处以获取文本处理的良好示例 http://scikit-learn.org/stable/auto_examples/model_selection/grid_search_text_feature_extraction.html#example-model-selection-grid-search-text-feature-extraction-py


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接