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

Posted

技术标签:

【中文标题】使用 yml 环境获取 scikit-learn 版本警告【英文标题】:getting scikit-learn version warning using yml environment 【发布时间】:2021-10-16 14:22:52 【问题描述】:

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

用户警告:在使用 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 安装。你有什么想法吗?

【问题讨论】:

【参考方案1】:

说明

在 Conda 环境的 pip: 部分中的任何内容都将在 Conda 环境创建后安装 YAML,并使用 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: 部分。

【讨论】:

谢谢。您的解释非常翔实。但是,当我尝试在常规依赖项下安装不平衡学习 = 0.7 或不平衡学习 = 0.7.0 时,我得到 ResolvePackageNotFound:不平衡学习 = 0.7 。你知道为什么会这样吗? 它在 conda-forge 频道上。尝试使用conda-forge::imbalanced-learn=0.7 或将conda-forge 添加到频道部分。

以上是关于使用 yml 环境获取 scikit-learn 版本警告的主要内容,如果未能解决你的问题,请参考以下文章

在 symfony2 parameters.yml 中获取环境变量

如何从.env文件获取环境变量到docker-compose.yml?

yml $的用法

yml文件中引用系统环境变量

Springboot 获取.yml中自定义参数

在windows上安装scikit-learn开发环境