即使提供了DepreciationWarning,我也可以使用.pkl文件吗?

时间:2019-01-25 16:17:58

标签: python python-3.x k-means python-3.7

我正在处理其他人文档不完善的代码(它使用tf-idf查找文档簇),而我遇到了这个问题:

from sklearn.externals import joblib

#joblib.dump(km,  'doc_cluster.pkl')
km = joblib.load('doc_cluster.pkl')
clusters = km.labels_.tolist()

本应释放doc_cluster.pkl,但运行该文件时,我得到一个DepreciationWarning,该文件表示该文件的Joblib版本小于0.10,并要求我重新生成该文件。但是,我不能这样做,因为我没有创建doc_cluster.pkl。那么,只是向前走而不理会警告是可以的吗?还是会把事情搞得一团糟?

2 个答案:

答案 0 :(得分:2)

弃用警告是警告,并且加载成功。至少在此版本的sklearn(捆绑了第三方joblib project)中,仍然仍在加载和支持pickle文件。 joblib的未来版本可能会停止支持该特定格式,但尚未实现。

只需将同一对象转储回磁盘,即可使用当前版本重新创建泡菜文件:

km = joblib.load('doc_cluster.pkl')
joblib.dump(km, 'doc_cluster.pkl', compress=True)

另请参阅joblib persistence documentation

或者,您可以通过使用警告过滤器来禁止显示警告。您可以在PYTHONWARNINGS environment variable中使用-W command-lne switch(我将使用字符串ignore::DeprecationWarning:sklearn.externals.joblib)或直接使用warnings module来设置过滤器:

import warnings
warnings.filterwarnings(
    "ignore", category=DeprecationWarning,
    module=r'sklearn\.externals\.joblib'
)

答案 1 :(得分:1)

弃用警告仅是警告,告诉您软件包中的使用代码已更新,并且有一种更好/更有效的编写程序的方式。该软件包仍然支持它,只是知道在将来对该软件包的更新中可能会支持旧功能。