推荐的持久化(自定义)自定义sklearn管道的方法是什么?
问题内容:
我建立了一个sklearn管道,该管道将标准支持向量回归组件与一些创建特征的自定义转换器结合在一起。然后将此管道放入经过训练然后腌制的对象中(这似乎是推荐的方法)。未腌制的对象用于进行预测。
为了分发,使用pyinstaller将其转换为可执行文件。
当我从单元测试中调用未选择的回归对象时,它工作正常。
但是,当我尝试使用PyInstaller二进制文件进行预测时,我得到了一个长堆栈跟踪,结尾为:
module = loader.load_module(fullname) File "messagestream.pxd", line
5, in init scipy.optimize._trlib._trlib ImportError: No module named
‘scipy._lib.messagestream’
感觉像是某种酸洗错误,可能是由于酸洗与pyinstaller的交互作用所致。我如何重构代码,以使我的自定义管道在拆开后像标准的sklearn回归器一样轻松,可靠地运行?
问题答案:
好的,经过一番谷歌搜索之后,似乎根本原因不是酸洗,这只是一个pyinstaller“隐藏的进口”问题,但是由于某种原因,它仅在酸洗时才会显示(不要问我为什么)。
以下内容为我解决了眼前的问题:编辑.spec
文件以添加以下隐藏的导入Scipy
:
hiddenimports=['scipy._lib.messagestream']
我还需要其他与其他库相关的隐藏导入
hiddenimports=['sklearn.neighbors.typedefs',
'scipy._lib.messagestream',
'pandas._libs.tslibs.timedeltas' ]