我想存储TF-IDF矩阵,以便不必每次都重新计算。我使用的是scikit-learn的TfIdfVectorizer
。是使用pickle保存它还是存储在数据库中更有效呢?
一些背景:我使用k-means聚类来提供文档推荐。由于经常添加新文档,我希望存储文档的TF-IDF值,以便重新计算聚类。
回答:
使用pickle(特别是使用joblib.dump)适合短期存储,例如在交互式会话中保存部分结果,或将模型从开发服务器传输到生产服务器。
然而,pickle格式依赖于模型的类定义,这些定义可能在不同版本的scikit-learn之间发生变化。
如果您计划长期保存模型,并希望在未来的scikit-learn版本中能够加载它,我建议您编写自己的独立于实现的持久化模型。
我还建议使用HDF5文件格式(例如在PyTables中使用)或其他支持高效存储数值数组的数据库系统。
另外,请查看scipy.sparse中用于稀疏矩阵表示的内部CSR和COO数据结构,以找到一种高效的方法将这些数据存储在数据库中。