gpt4 book ai didi

python - 保留 TFIDF 结果以使用 Scikit for Python 预测新内容

转载 作者:IT老高 更新时间:2023-10-28 21:10:01 25 4
gpt4 key购买 nike

我在 Python 上使用 sklearn 进行一些聚类。我已经训练了 200,000 条数据,下面的代码运行良好。

corpus = open("token_from_xml.txt")
vectorizer = CountVectorizer(decode_error="replace")
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
km = KMeans(30)
kmresult = km.fit(tfidf).predict(tfidf)

但是当我有新的测试内容时,我想将它聚集到我训练过的现有集群中。所以我想知道如何保存 IDF 结果,以便我可以为新的测试内容做 TFIDF 并确保新测试内容的结果具有相同的数组长度。

提前致谢。

更新

如果其中一个包含经过训练的 IDF 结果,我可能需要将“transformer”或“tfidf”变量保存到文件(txt 或其他)中。

更新

例如。我有训练数据:

["a", "b", "c"]
["a", "b", "d"]

再做 TFIDF,结果会包含 4 个特征(a,b,c,d)

当我测试:

["a", "c", "d"]

查看它属于哪个集群(已经由 k-means 制作)。 TFIDF 只会给出 3 个特征(a,c,d)的结果,因此 k-means 中的聚类会下降。 (如果我测试["a", "b", "e"],可能还有其他问题。)

那么如何存储测试数据的特征列表(更甚者,存储在文件中)?

更新

已解决,请参阅下面的答案。

最佳答案

我通过保存vectorizer.vocabulary_成功保存了特征列表,并被CountVectorizer(decode_error="replace",vocabulary=vectorizer.vocabulary_)

重用

代码如下:

corpus = np.array(["aaa bbb ccc", "aaa bbb ddd"])
vectorizer = CountVectorizer(decode_error="replace")
vec_train = vectorizer.fit_transform(corpus)
#Save vectorizer.vocabulary_
pickle.dump(vectorizer.vocabulary_,open("feature.pkl","wb"))

#Load it later
transformer = TfidfTransformer()
loaded_vec = CountVectorizer(decode_error="replace",vocabulary=pickle.load(open("feature.pkl", "rb")))
tfidf = transformer.fit_transform(loaded_vec.fit_transform(np.array(["aaa ccc eee"])))

这行得通。 tfidf 将具有与训练数据相同的特征长度。

关于python - 保留 TFIDF 结果以使用 Scikit for Python 预测新内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29788047/

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