BayesSearchCV TypeError:“版本”和“元组”的实例之间不支持“ <”

问题描述

我正在研究Kaggle Titanic数据集。我正在尝试使用LightGBM的LGBMClassifier来确定给定的乘客是否还幸免于难。我创建了一个用于填充和处理所有数据的管道,并尝试使用BayesSearchCV优化我的LightGBM超参数。使用BayesSearchCV时收到以下错误:

” TypeError:“版本”和“元组”的实例之间不支持“

我不知道为什么会出现此错误,因为我可以将创建的pipleine拟合到数据中,并且它可以与Sklearn的GridSearchCV配合使用,因此我不知道这是BayesSearchCV的问题还是仅我一个。我将运行错误的管道和代码放在下面,并在错误发生的位置加了一个标记。

target = 'survived'

categorical_features = ['sex',#'ticket',#'cabin','embarked']

numeric_features = ['pclass','age','sibsp','parch','fare']

train,test = train_test_split(df,test_size=0.20)

numerical_pipe = Pipeline([('imputer',SimpleImputer(strategy = 'mean'))])

categorical_pipe = Pipeline([('imputer',SimpleImputer(strategy = 'constant',fill_value = 'missing')),('onehot',OneHotEncoder(handle_unknown = 'ignore'))])

preprocessing = ColumnTransformer(transformers = [
                ('cat',categorical_pipe,categorical_features),('num',numerical_pipe,numeric_features)])

lgb_pipe = Pipeline([
          ('preprocess',preprocessing),('classifier',LGBMClassifier())])

search_space_lgb = {'num_leaves': Integer(1,500),'max_depth': Integer(1,500)}

bayes_search_lgb = BayesSearchCV(lgb_pipe,search_space_lgb)

bs_lgb = bayes_search_lgb.fit(train[numeric_features + categorical_features],train[target]) #ERROR HERE

print(bs_lgb.best_params_)

这是错误的一部分,我认为这对于确定确切的错误是有用的。

/Applications/anaconda3/lib/python3.7/site-packages/skopt/space/space.py in rvs(self,n_samples,random_state)

762 
763         for dim in self.dimensions:
--> 764             if sp_version < (0,16):
765                 columns.append(dim.rvs(n_samples=n_samples))
766             else:

发现了另一个与我相同的错误(TypeError inside the `scikit-optimize` package),但是没有一个解决方案对我有用。

解决方法

BayesSearchCV来自skopt库。您不必导入整个库,只需键入以下命令即可:

从skopt导入BayesSearchCV

此外,您可能希望使用shift + tab仔细检查参数要求。大多数错误发生在参数级别。让我知道是否可以解决问题。

,

我解决了更改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))

相关问答

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