BayesSearchCV от skopt с CatBoost

#catboost

#catboost

Вопрос:

Я пытаюсь использовать метод BayesSearchCV от skopt с помощью Catboost.Однако я не понимаю, куда передавать индексы категориальных функций, присущих catboost, в метод fit() объекта bayesSearch.

 clf = catboost.CatBoostClassifier()
search_spaces = {'iterations': (10, 1000),
                 'depth': (1, 10),
                 'learning_rate': (0.001, 0.5),
                 'random_strength': (1e-9, 10)}
pt = BayesSearchCV(clf,
                    search_spaces,
                    n_iter=40)
pt.fit(x_train,y_train)
 

fit() выдает ошибку не удалось преобразовать категориальный в float,

я знаю, ошибка в том, что я не передаю индексы категориальных переменных, но я не могу передать их в метод Байеса fit() .Также попробовал метод pool() от catboost, который тоже не работает.

Ответ №1:

У меня была аналогичная проблема с CalibratedClassifierCV. Итак, публикуем решение здесь. Может быть, это сработает для вас.

Вы можете попытаться решить эту проблему, сначала закодировав категориальные объекты в числовые, чтобы обмануть BayesSearchCV, но при этом передавать индексы категориальных объектов при запуске CatBoostClassifier(), чтобы CatBoost мог использовать их соответствующим образом:

 # Import necessary libraries
from sklearn.calibration import CalibratedClassifierCV
from catboost import CatBoostClassifier

# Initialize Calibrated Classifier with Catboost
model_combined = CalibratedClassifierCV(
    CatBoostClassifier(cat_features=<cat_features_indexes>),
    method='isotonic',
    cv=5,
)