BaggingClassifier 和具有分类特征的 CatBoost 无法正常工作

Posted

技术标签:

【中文标题】BaggingClassifier 和具有分类特征的 CatBoost 无法正常工作【英文标题】:BaggingClassifier and CatBoost with categorical features don't work properly 【发布时间】:2020-04-01 04:11:50 【问题描述】:

我想用 CatBoostClassifier 作为估计器运行 sklearn.ensemble.BaggingClassifier 但问题是有一些分类特征,这会导致这样的错误:

CatBoostError: 'data' 是浮点数值类型的 numpy 数组,表示没有分类特征,但 'cat_features' 参数指定了非零分类特征数

clf = CatBoostClassifier(task_type='GPU',
                         n_estimators=8000,
                         early_stopping_rounds=5,
                         verbose=250,
                         cat_features=['avg_day_of_week', 'avg_month', 'mode_subgroup', 'mode_small_group']
                        ) 

from sklearn.ensemble import BaggingClassifier
bag_clf = BaggingClassifier(clf, n_estimators=10, max_samples=0.8)
bag_clf.fit(X_train.drop('client_id', axis=1), y_train)

是否有可能克服这个问题?

【问题讨论】:

看看你是否在这个讨论中找到了一些灵​​感:github.com/catboost/catboost/issues/635 @ctenar,我没有找到任何与我的问题相关的信息 【参考方案1】:

来自 catboost 官方文档: why catboost cant handle NaNs from float type as categorical features:

针对您的情况,一个简单的解决方法是将您的 numpy 矩阵转换为 pd.dataframe:

bag_clf.fit(pd.DataFrame(X_train.drop('client_id', axis=1)), y_train)

【讨论】:

以上是关于BaggingClassifier 和具有分类特征的 CatBoost 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 中 BaggingClassifier 的默认配置与硬投票的区别

对 BaggingClassifier 参数内的参数进行网格搜索

在 BaggingClassifier 中绘制准确度历史

scikit-learn 的 BaggingClassifier 和自定义基础估计器的问题:操作数不能一起广播?

机器学习:如何在具有分类和数字特征的 pandas 数据帧上应用一种热编码?

预处理具有分类和连续特征的大型数据文件