Python 在sklearn中持久化数据

Python 在sklearn中持久化数据,python,machine-learning,data-mining,scikit-learn,Python,Machine Learning,Data Mining,Scikit Learn,我正在使用scikit学习对文本文档进行聚类。我正在使用CountVectorier类、TfidTransformer类和MiniBatchKMeans类来帮助我实现这一点。 新的文本文档一直添加到系统中,这意味着我需要使用上面的类来转换文本和预测集群。我的问题是:我应该如何在磁盘上存储数据? 我应该简单地pickle矢量器、transformer和kmeans对象吗? 我应该保存数据吗?如果是,如何将其添加回矢量器、transformer和kmeans对象 任何帮助都将不胜感激是的,我认为sk

我正在使用scikit学习对文本文档进行聚类。我正在使用CountVectorier类、TfidTransformer类和MiniBatchKMeans类来帮助我实现这一点。 新的文本文档一直添加到系统中,这意味着我需要使用上面的类来转换文本和预测集群。我的问题是:我应该如何在磁盘上存储数据? 我应该简单地pickle矢量器、transformer和kmeans对象吗? 我应该保存数据吗?如果是,如何将其添加回矢量器、transformer和kmeans对象


任何帮助都将不胜感激

是的,我认为sk的一般答案是学习和祈祷


在我看来,与不依赖于实现细节的有文档记录的序列化格式相比,这是非常脆弱的。但也许他们知道这一点,不会对他们的类进行向后不兼容的更改?

这取决于您想做什么

如果您希望在训练集中找到一些固定的群集中心,然后在以后重新使用它们来计算新数据的群集分配,则可以清除模型(或仅保存向量器和其他模型构造函数参数以及群集中心位置的词汇表)

如果您希望使用新数据进行集群,那么您可能希望使用新数据+旧数据的并集重新训练整个管道,以使矢量器的词汇表能够构建新的特征(维度)对于新词,让聚类算法找到更好地匹配完整数据集结构的聚类中心

请注意,未来我们将提供哈希向量器(例如,请参阅此作为第一个构建块),因此不再需要存储词汇表(但您将失去反思特征维度“含义”的能力)


至于酸洗模型与使用您自己的参数表示法,我在您之前的问题中已经回答了这一部分:

我们知道这是多么脆弱,不,我们目前不保证100%的向后兼容性(尽管每个不兼容的更改都必须在ML上讨论,并且兼容性通常保留在少数版本中)。一个更好的序列化解决方案还没有找到。在谷歌的工作中,协议缓冲区扮演着一个易于使用的跨语言序列化格式的角色。在我的业余时间,我使用了节俭,这也做得很好。