1

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

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

我不知道为什么会出现这个错误,因为我可以将我创建的管道拟合到数据中,并且它可以与 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:

发现另一个与我有相同错误的stackoverflow(`scikit-optimize`包中的TypeError)但没有一个解决方案适合我。

4

2 回答 2

0

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

从 skopt 导入 BayesSearchCV

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

于 2020-08-16T21:00:58.097 回答
0

我已经解决了更改 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))
于 2020-08-27T19:23:17.677 回答