尽管包版本和机器相同,但 Scikit-learn 模型持久性失败

Scikit-learn model persistence fails despite the same package version and machine

我目前正在使用我在 anaconda 环境中构建的 KNN 模型。该模型是使用 scikit-learn 0.22.1 版和 pickle 4.0 版制作的。想要从网站访问此脚本,我将所有代码移动到同一台计算机上的 Web 服务器上,并使用 PHP 从命令行执行它。

然而,当我这样做时,它依赖于常规 python 安装。因此,为了确保一切都井井有条,我使用 pip 安装了所有正确版本化的包。但是当我 运行 来自命令行的代码时,它会抛出以下错误:

Traceback (most recent call last):
  File "script.py", line 78, in <module>
    knn = pickle.load(file);
  File "sklearn\neighbors\_binary_tree.pxi", line 1180, in sklearn.neighbors._kd_tree.BinaryTree.__setstate__
  File "sklearn\neighbors\_binary_tree.pxi", line 1122, in sklearn.neighbors._kd_tree.BinaryTree._update_memviews
  File "sklearn\neighbors\_binary_tree.pxi", line 236, in sklearn.neighbors._kd_tree.get_memview_ITYPE_1D
ValueError: Buffer dtype mismatch, expected 'ITYPE_t' but got 'long long'

考虑到我使用的是相同的包版本和相同的计算机架构,我不明白为什么会抛出这个错误。

事实证明,我在两个实例中都安装了 python 3.7.6,但是我在 64 位环境中开发代码,在 32 位环境中部署它。卸载 32 位 python 并将其替换为 64 位解决了这个问题。