【问题标题】:TypeError inside the `scikit-optimize` package`scikit-optimize` 包中的 TypeError
【发布时间】:2020-11-30 20:43:22
【问题描述】:

当我使用scikit-optimize 0.7.4 版优化scikit-learn 0.23 模型时:

    rf = BayesSearchCV(
        RandomForestClassifier(
            min_samples_leaf=0.01, oob_score=True
        ), {
            'n_estimators': Integer(30, 200),
            'max_depth': Integer(10, 150),
            'min_samples_split': Real(0.05, 0.3),
        }, n_iter=32
    )

当我运行 rf.fit 时,它会说,

  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\space\space.py", line 764, in rvs
    if sp_version < (0, 16):
TypeError: '<' not supported between instances of 'Version' and 'tuple'

但是当我简单地使用RandomForestClassifier 并适应它时,不会发生错误。 那么,如何避免这个问题呢?谢谢!

完整的traceback如下。

Traceback (most recent call last):
  File "C:/Users/cloudy/PyCharmProjects/clixove/BasicML/classifier.py", line 106, in <module>
    rf.fit(clf.data['X_train'], clf.data['Y_train'])
  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\searchcv.py", line 678, in fit
    optim_result = self._step(
  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\searchcv.py", line 552, in _step
    params = optimizer.ask(n_points=n_points)
  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\optimizer\optimizer.py", line 360, in ask
    x = opt.ask()
  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\optimizer\optimizer.py", line 332, in ask
    return self._ask()
  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\optimizer\optimizer.py", line 398, in _ask
    return self.space.rvs(random_state=self.rng)[0]
  File "C:\Users\cloudy\PyCharmProjects\clixove\venv\lib\site-packages\skopt\space\space.py", line 764, in rvs
    if sp_version < (0, 16):
TypeError: '<' not supported between instances of 'Version' and 'tuple'

【问题讨论】:

  • 您使用的是哪个scikit-optimize 版本?使用0.8版没有问题
  • 这应该是bug report

标签: python machine-learning scikit-learn scikit-optimize


【解决方案1】:

我遇到了同样的问题。看起来 sci-kit learn 的一个新变化改变了版本的读取方式。查看更改here

如果未安装setuptools,则使用LooseVersion,它返回Version 类型而不是元组。

在您的环境中使用pip install setuptools 安装setuptools 是否可以为您解决这个问题?

【讨论】:

  • 我也有同样的问题,像 IDM 一样解决了。显式安装 setuptools 没有帮助,我只是测试了它。
【解决方案2】:

如果 scikit-learn 版本对您的问题不重要,您可以通过 pip install -U scikit-learn == 0.20.3 将 scikit-learn 版本降级为“0.20.3”

【讨论】:

  • 欢迎来到 StackOverflow,并为您解答。如果可能,请考虑为您的答案提供额外的推理。这也将帮助您了解更多信息;)stackoverflow.com/help/how-to-answer
【解决方案3】:

我已经解决了更改 skopt/space/space.py 行 763-768

 for dim in self.dimensions:
            
            if sp_version < (0, 16):
                columns.append(dim.rvs(n_samples=n_samples))
            else:
                columns.append(dim.rvs(n_samples=n_samples, random_state=rng))

进入

 for dim in self.dimensions:
            
            try:
                columns.append(dim.rvs(n_samples=n_samples, random_state=rng))
            except:
                columns.append(dim.rvs(n_samples=n_samples))

【讨论】:

    【解决方案4】:

    scikit-learn >= 0.23 的问题已在 0.8.1 版本中修复

    以下是 PIP 安装:

    pip install scikit-optimize==0.8.1
    

    参考:scikit-optimize 0.8.1

    【讨论】:

      猜你喜欢
      • 2023-01-04
      • 2021-04-17
      • 2020-08-16
      • 2021-05-02
      • 2021-11-08
      • 1970-01-01
      • 2018-07-28
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多