2

我正在尝试将 skopt 的 BayesSearchCV 方法与 Catboost 一起使用。但是,我对将 catboost 原生的分类特征的索引传递到bayesSearch 对象的 fit() 方法的位置感到困惑。

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() 抛出错误无法将分类转换为浮点数,

我知道,错误是因为我没有传递分类变量的索引,但我无法在贝叶斯的 fit() 方法中传递它们。还尝试了 catboost 的 pool() 方法,它也不起作用。

4

1 回答 1

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,
)
于 2019-05-30T02:29:23.387 回答