保持TFIDF结果以预测新内容

我在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处理,并确保新测试内容的结果具有相同的数组长度。

提前感谢。

更新

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

更新

例如,我有以下训练数据:

["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)#保存 vectorizer.vocabulary_pickle.dump(vectorizer.vocabulary_,open("feature.pkl","wb"))#稍后加载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将具有与训练数据相同的特征长度。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注