使用 yml 环境获取 scikit-learn 版本警告

getting scikit-learn version warning using yml environment

我想部署一个机器学习模型并拥有环境 yml 文件和模型 pickle 文件。当我将 scikit-learn=0.23.2 添加到依赖项时,conda 会自动卸载此 scikit-learn 版本并安装 scikit-learn-0.24.2 。因此,我在加载 pickle 文件时收到以下警告。

UserWarning:在使用 0.24.2 版时,尝试从 0.23.2 版中解开估计器 DecisionTreeClassifier。这可能会导致破坏代码或无效结果。采用 风险自负。

这里是环境:

name: environment
channels:
  - defaults
dependencies:
  - blas=1.0
  - ca-certificates=2021.5.25
  - certifi=2021.5.30
  - icc_rt=2019.0.0
  - intel-openmp=2021.2.0
  - joblib=0.17.0
  - mkl=2020.2
  - mkl-service=2.3.0
  - mkl_fft=1.3.0
  - mkl_random=1.1.1
  - numpy=1.19.2
  - numpy-base=1.19.2
  - openssl=1.1.1k
  - pandas=1.2.4
  - patsy=0.5.1
  - pickleshare=0.7.5
  - pip=21.1.1
  - pyodbc=4.0.30
  - python=3.7.4
  - python-dateutil
  - pytz=2021.1
  - scipy=1.6.2
  - setuptools=52.0.0
  - six=1.15.0
  - sqlite=3.35.4
  - statsmodels=0.12.0
  - threadpoolctl=2.1.0
  - vc=14.2
  - vs2015_runtime=14.27.29016
  - wheel=0.36.2
  - wincertstore=0.2
  - scikit-learn=0.23.2
  - pip:
    - imblearn==0.0
prefix: C:\Users

conda env create -f environment.yml的结果是:

Installing collected packages: scikit-learn, imbalanced-learn, imblearn
  Attempting uninstall: scikit-learn
    Found existing installation: scikit-learn 0.23.2
    Uninstalling scikit-learn-0.23.2:
      Successfully uninstalled scikit-learn-0.23.2
Successfully installed imbalanced-learn-0.8.0 imblearn-0.0 scikit-learn-0.24.2

我还尝试通过 pip 安装 scikit-learn=0.23.2,但在加载模型时我没有在本地机器上收到警告。但是scikit-learn不应该在部署环境中通过pip安装。你有什么想法吗?

说明

Conda 环境 YAML 的 pip: 部分中的任何内容都会安装 Conda 环境创建之后,并且 运行 带有 pip install -U 命令。如果有必要安装指定的包,-U 授予 Pip 升级任何现有包的权限。在这种特殊情况下,imblearn 的版本必须与您选择的 scikit-learn 版本不兼容。

删除imblearn

从技术上讲,您应该使用 imbalanced-learn 而不是 imblearn,因为 stated in the package description。这也意味着您甚至不需要从 PyPI 安装,因为 imbalanced-learn 可通过 Conda Forge 获得。

如果您需要 scikit-learn=0.23,那么您必须使用 imbalanced-learn=0.7。这应该在常规依赖项下,而不是在 pip: 部分。