代码之家  ›  专栏  ›  技术社区  ›  Roko Mijic

推荐的持久(pickle)定制sklearn管道的方法是什么?

  •  7
  • Roko Mijic  · 技术社区  · 8 年前

    我建立了一个 sklearn pipeline 它将标准支持向量回归组件与一些创建特征的自定义变换器相结合。然后将该管道放入经过训练的对象中,然后对其进行酸洗( this seems to be the recommended way ). 未勾选的对象用于进行预测。

    pyinstaller .

    然而,当我尝试使用PyInstaller二进制文件进行预测时,我得到了一个很长的结果 stack trace 最后是:

    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回归器一样轻松、稳健地运行?

    2 回复  |  直到 8 年前
        1
  •  9
  •   Roko Mijic    8 年前

    好的,在谷歌上搜索了一些之后,似乎根本原因不是酸洗,这只是pyinstaller的“隐藏导入”问题,但出于某种原因,它只在酸洗时出现(不要问我为什么)。

    以下为我解决了眼前的问题:编辑 .spec 要添加以下隐藏导入的文件 Scipy :

     hiddenimports=['scipy._lib.messagestream']
    

    我还需要一些其他与其他库相关的隐藏导入

     hiddenimports=['sklearn.neighbors.typedefs',
                    'scipy._lib.messagestream',
                    'pandas._libs.tslibs.timedeltas'   ]
    
        2
  •  3
  •   Braxvan    7 年前

    如果有人只是想通过CLI参数而不是通过。规范文件如Roko的回答所示,语法如下:

    pyinstaller --hidden-import scipy._lib.messagestream --onefile your_python_file_here.py