我正在使用scikit-learn来对文本文档进行聚类。我使用了CountVectorizer、TfidfTransformer和MiniBatchKMeans这些类来帮助我完成这项工作。系统中不断添加新的文本文档,这意味着我需要使用上述类来转换文本并预测聚类。我的问题是:我应该如何将数据存储到磁盘上?我应该简单地将vectorizer、transformer和kmeans对象进行pickle处理吗?我应该只保存数据吗?如果是的话,我如何将数据重新添加到vectorizer、transformer和kmeans对象中?
任何帮助都将不胜感激
回答:
这取决于你想要做什么。
如果你想在训练集上找到一些固定的聚类中心,然后稍后重用它们来计算新数据的聚类分配,那么pickle模型(或者只保存vectorizer的词汇表和其他模型构造参数以及聚类中心位置)是可以的。
如果你想要使用新数据进行聚类,你可能需要使用新数据和旧数据的联合来重新训练整个流程,使得vectorizer的词汇表能够为新词构建新的特征(维度),并让聚类算法找到更符合完整数据集结构的聚类中心。
请注意,未来我们将提供哈希向量化器(例如,参见这个关于哈希变换器的拉取请求作为第一个构建块),因此存储词汇表将不再必要(但你将失去对特征维度“含义”进行内省的能力)。
关于pickle模型与使用你自己的参数表示,我已经在你之前的问题中回答了这一部分,这里是链接:Persist Tf-Idf data