我可以使用 .pkl 文件,即使它给了我一个折旧警告?

Posted

技术标签:

【中文标题】我可以使用 .pkl 文件,即使它给了我一个折旧警告?【英文标题】:Can I use a .pkl file even if it gives me a DepreciationWarning? 【发布时间】:2019-06-19 12:18:46 【问题描述】:

我正在处理其他人的文档记录不佳的代码(它使用 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 说该文件是使用低于 0.10 的 joblib 版本生成的,它要求我重新生成该文件。但是,我不能这样做,因为我没有创建 doc_cluster.pkl。那么是否可以继续前进并忽略警告,还是会把事情搞砸?

【问题讨论】:

【参考方案1】:

弃用警告只是警告,加载成功。至少在这个版本的 sklearn(捆绑了第 3 方 joblib project)中,pickle 文件仍在被加载和支持。 joblib 的未来版本可能会停止支持该特定格式,但这还没有发生。

您可以使用当前版本重新创建 pickle 文件,只需将相同的对象转储回磁盘即可:

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'
)

【讨论】:

我使用了重新创建 pickle 文件的解决方案,并且成功了。谢谢!【参考方案2】:

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

【讨论】:

以上是关于我可以使用 .pkl 文件,即使它给了我一个折旧警告?的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试通过批处理文件打开 Jmeter,但它给了我一个 Windows 错误

我正在尝试附加 alamofire 循环并放入 sqlite db,但它给了我错误

函数的输出应该是双倍的,但它给了我整数

我尝试使用 passport.js 对用户进行身份验证,但它给了我一个错误**服务器响应状态为 400(错误请求)**

ModuleNotFoundError:没有名为“sklearn.svm._classes”的模块

当我尝试创建一个角色时,它给了我一个错误(discord.js)