__init__() получил неожиданный аргумент ключевого слова 'iid'
Я пытаюсь использовать BayesSearchCV, но у меня возникла непредвиденная ошибка. Я не использую параметр iid, но ошибка продолжает повторяться
__init__() got an unexpected keyword argument 'iid'
. Я поделюсь своим кодом здесь.
Код:
roc_auc = make_scorer(roc_auc_score, greater_is_better=True, needs_threshold=True)
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=1234)
clf = CatBoostClassifier(thread_count=2,
loss_function='Logloss',
od_type = 'Iter',
verbose= False
)
# Defining your search space
search_spaces = {'iterations': Integer(10, 1000),
'depth': Integer(1, 8),
'learning_rate': Real(0.01, 1.0, 'log-uniform'),
'random_strength': Real(1e-9, 10, 'log-uniform'),
'bagging_temperature': Real(0.0, 1.0),
'border_count': Integer(1, 255),
'l2_leaf_reg': Integer(2, 30),
'scale_pos_weight':Real(0.01, 1.0, 'uniform')}
# Setting up BayesSearchCV
opt = BayesSearchCV(clf,
search_spaces,
scoring=roc_auc,
cv=skf,
n_iter=100,
n_jobs=1, # use just 1 job with CatBoost in order to avoid segmentation fault
return_train_score=False,
refit=True,
optimizer_kwargs={'base_estimator': 'GP'}
)
Сообщение об ошибке:
1 ответ
Если вы используете skopt версии 0.8.1 и версию scikit-learn>= 0.24, то между этими двумя библиотеками есть некоторая несовместимость.
- sklearn больше не использует параметр iid. Возможное исправление - отредактировать searchcv.py, чтобы добавить новый
iid
переменную-член в BayesSearchCV, инициализируйте ее значение и не передавайте его в конструктор базового класса. например
self.iid = iid
super(BayesSearchCV, self).__init__(
estimator=estimator, scoring=scoring,
n_jobs=n_jobs, refit=refit, cv=cv, verbose=verbose,
pre_dispatch=pre_dispatch, error_score=error_score,
return_train_score=return_train_score)
BayesSearchCV._fit ожидает параллельно с
out
пять элементов, которые являются списками, но теперь он перевернут - он возвращает список словарных статей. Заменить(test_scores, test_sample_counts, fit_time, score_time, parameters) = zip(*out)
с участием
test_scores = [d['test_scores'] for d in out]
test_sample_counts = [d['n_test_samples'] for d in out]
fit_time = [d['fit_time'] for d in out]
score_time = [d['score_time'] for d in out]
parameters = [d['parameters'] for d in out]
Другие варианты включают использование более новой версии skopt (например, 0.9.dev0 работает над исправлением этих проблем) или переход на более старую версию sklearn. Обсуждение этого можно посмотреть здесь .