scikit-optimize`包中的TypeError

问题描述

当我使用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 (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",16):
TypeError: '<' not supported between instances of 'Version' and 'tuple'

解决方法

如果scikit学习版本对您的问题不重要,则可以通过pip install -U scikit-learn == 0.20.3将scikit学习版本降级为“ 0.20.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))
,

scikit-learn> = 0.23的问题已在版本0.8.1中得到解决

以下是PIP安装:

pip install scikit-optimize==0.8.1

参考:scikit-optimize 0.8.1

,

我遇到了同样的问题。看起来像是对sci-kit的新更改,学习版本的读取方式也发生了变化。签出更改here

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

在您的环境中使用setuptools安装pip install setuptools可以为您解决此问题吗?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...