问题描述
当我使用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
,
我遇到了同样的问题。看起来像是对sci-kit的新更改,学习版本的读取方式也发生了变化。签出更改here。
如果未安装setuptools
,则使用LooseVersion
,它返回Version
类型而不是元组。
在您的环境中使用setuptools
安装pip install setuptools
可以为您解决此问题吗?