- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相当简单的 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'
,它是 True
或 False
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/
我是一名优秀的程序员,十分优秀!