python - 如何在新数据上使用 sklearn TfidfVectorizer

标签 python scikit-learn nlp nltk

我有一个相当简单的 NLTK 和 sklearn 分类器(我对此完全是菜鸟)。

我进行通常的导入

import pandas as pd
import matplotlib.pyplot as plt

from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer

from sklearn.model_selection import train_test_split

from sklearn.naive_bayes import MultinomialNB

from sklearn import metrics

from sklearn.feature_extraction.text import TfidfVectorizer

我加载数据(我已经清理了它)。这是一个非常简单的数据框,有两列。第一个是 'post_clean',其中包含已清理的文本,第二个是 'uk',它是 TrueFalse

data = pd.read_pickle('us_uk_posts.pkl')

然后我使用 tfidf 进行矢量化并分割数据集,然后创建模型

tf = TfidfVectorizer()
text_tf = tf.fit_transform(data['post_clean'])
X_train, X_test, y_train, y_test = train_test_split(text_tf, data['uk'], test_size=0.3, random_state=123)


clf = MultinomialNB().fit(X_train, y_train)
predicted = clf.predict(X_test)
print("MultinomialNB Accuracy:" , metrics.accuracy_score(y_test,predicted))

显然,除非我完全遗漏了一些东西,否则我的准确度为 93%

我的两个问题是:

1) 我现在如何使用此模型对一些没有已知 UK 值的项目进行实际分类?

2)如何使用完全独立的测试集(我没有拆分)来测试该模型?

我已经尝试过

new_data = pd.read_pickle('new_posts.pkl')

new_posts 数据的格式相同

new_text_tf = tf.fit_transform(new_data['post_clean'])

predicted = clf.predict(new_X_train)
predicted

new_text_tf = tf.fit_transform(new_data['post_clean'])

new_X_train, new_X_test, new_y_train, new_y_test = train_test_split(new_text_tf, new_data['uk'], test_size=1)

predicted = clf.predict(new_text_tf)
predicted

但都返回“ValueError:尺寸不匹配”

最佳答案

在使用 tf.fit_transform() 训练期间提取词汇以生成稀疏向量后,您需要使用 tf.transform() 而不是 fit_transform()。所以测试集的特征应该是

new_text_tf = tf.transform(new_data['post_clean'])

当您在测试/新数据上使用 tf.fit_transform() 时,它会根据测试数据中的单词提取新词汇,这些单词可能与训练数据不同。词汇量的差异会产生维度不匹配误差。

您还应该将测试数据和训练数据合并到一个主集中,然后在该主集中运行 fit_transform() ,以便即使仅在测试集中的单词也能在矢量化器中捕获。其余代码可以保持不变。如果测试集中有训练集中没有的单词,这样做可以提高准确性。

关于python - 如何在新数据上使用 sklearn TfidfVectorizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598318/

相关文章:

python - 尽管主程序已完成,守护线程仍不退出

python - 从目录中读取文件名的快速方法?

python - 程序中的奇怪错误,某些对象在使用后出现 "turns off"

machine-learning - 通过任意文本正文确定地理位置

python - Django 和 Postgresql 的重复条目

python - Pyplot 无法绘制回归

Python Scikit - LinearRegression 和 Ridge 返回不同的结果

python - 为 CountVectorizer (sklearn) 添加词干支持

python - 如何在Python中找到重复的字符串段?

python - 如何使用spacy查找句子是否包含名词?