gpt4 book ai didi

python - 如何在 scikit learn 中保存 TFIDF 矢量器?

转载 作者:行者123 更新时间:2023-12-01 00:26:35 57 4
gpt4 key购买 nike

我正在使用 scikit learn 开发一个垃圾邮件分类器

这是我的矢量化代码

vectorizer = TfidfVectorizer(
analyzer='word',
sublinear_tf=True,
strip_accents='unicode',
token_pattern=r'\w{1,}',
ngram_range=(1, 1),
max_features=10000)


tfidf = vectorizer.fit(data['text'])
features = vectorizer.transform(data['text'])

import pickle
pickle.dump(tfidf, open('tfidf.pickle', 'wb'))

这是我正在做的预测新输入的事情

import joblib

model = joblib.load('model')

vect = pickle.load(open('tfidf.pickle', 'rb'))

new = vect.transform(['some new text...'])

mod.predict(new)

当我打开矢量化文件(tfidf.pickle)并尝试预测新消息时,它显示的错误为

ValueError: X.shape[1] = 7148 should be equal to 38011, the number of features at training time

最佳答案

错误消息表明您的模型需要大小为 38011 的输入,而您的 TF-IDF 向量化器输出维度为 7148 的向量。这里存在模型/预处理器不匹配的情况,即您的模型是在 38011 维向量上训练的而你的 TF-IDF 输出的向量是 7148 维的。

避免这种预处理/模型不匹配的一个好方法是使用 scikit-learn pipelines 。例如,您可以使用以下代码段来训练您的模型您的 TF-IDF 矢量器(此处为逻辑回归示例):

from sklearn.preprocessing import make_pipeline

vectorizer = TfidfVectorizer(...your TF-IDF arguments...)
model = LogisticRegression(...your model arguments...)
pipeline = make_pipeline(vectorizer, model)

pipeline.fit(X, y)

然后您可以使用 pickle 或 joblib 序列化并加载管道(例如 pickle.dump(pipeline, open('spam_pipeline.pickle', 'wb')),然后 pipeline = pickle.load(open('spam_pipeline.pickle', 'rb')) ,类似于您已经在做的事情。

您可以直接使用管道的predict方法来获得预测。

如果您需要更多详细信息,请告诉我。

关于python - 如何在 scikit learn 中保存 TFIDF 矢量器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58543937/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com