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 参数内的参数进行网格搜索
scikit-learn 的 BaggingClassifier 和自定义基础估计器的问题:操作数不能一起广播?