集成学习_CatBoost

作者: Nefelibatas | 来源:发表于2022-02-16 10:10 被阅读0次

CatBoost算法

  • CatBoost = Catgorical + Boost

  • 高效的处理分类特征(categorical features),首先对分类特征做统计,计算某个分类特征

(category)出现的频率,然后加上超参数,生成新的数值型特征(numerical features)

  • 同时使用组合类别特征,丰富了特征维度

  • 采用的基模型是对称决策树,算法的参数少、支持分类变量,通过可以防止过拟合

模型 XGBoost LightGBM CatBoost
使用参数 max_depth:50learning_rate:0.16min_child_weight:1n_estimators:200 max_depth:50learning_rate:0.1num_leaves:900n_estimators:300 max_depth:10learning_rate:0.15l2_leaf_reg=9iteration:500one_hot_max_size=50
训练集AUC 0.999 没有使用分类特征索引 使用分类特征索引 没有使用分类特征索引 使用分类特征索引
0.992 0.999 0.842 0.887
测试集AUC 0.789 0.785 0.772 0.752 0.816
训练用时 970秒 153秒 326秒 180秒 390秒
预测用时 184秒 40秒 156秒 2秒 14秒

CatBoost,LightGBM,XGBoost对比

  • CatBoost 过拟合程度最小,在测试集上准确度最高0.816,同时预测用时最短,但这个表现仅仅在有分类特征,而且调节了one-hot最大量时才会出现
  • 如果不利用 CatBoost 算法在这些特征上的优势,表现效果就会变成最差,AUC 0.752
  • 使用CatBoost需要数据中包含分类变量,同时适当地调节这些变量时,才会表现不错
    处理特征为分类的神器
  • 支持即用的分类特征,因此我们不需要对分类特征进行预处理(比如使用LabelEncoding 或 OneHotEncoding)
  • CatBoost 设计了一种算法验证改进,避免了过拟合。因此处理分类数据比LightGBM 和XGBoost 强
    准确性比 XGBoost 更高,同时训练时间更短
  • 支持 GPU 训练
  • 可以处理缺失的值

CatBoost工具

  • 构造参数:
    learning_rate,学习率
  • depth, 树的深度
  • l2_leaf_reg,L2正则化系数
  • n_estimators,树的最大数量,即迭代次数
  • one_hot_max_size,one-hot编码最大规模,默认值根据数据和训练环境的不同而不同
  • loss_function ,损失函数,包括Logloss,RMSE,MAE,CrossEntropy,回归任务默认RMSE,分类任务默认Logloss
  • eval_metric,优化目标,包括RMSE,Logloss,MAE,CrossEntropy,Recall,Precision,F1,Accuracy,AUC,R2

fit函数参数

  • X,输入数据数据类型可以是:list; pandas.DataFrame; pandas.Series
    y=None
  • cat_features=None,用于处理分类特征
  • sample_weight=None,输入数据的样本权重
  • logging_level=None,控制是否输出日志信息,或者其他信息
  • plot=False,训练过程中,绘制,度量值,所用时间等
  • eval_set=None,验证集合,数据类型list(X, y)tuples
  • baseline=None
  • use_best_model=None
  • verbose=None
model = CatBoostClassifier(iterations=1000, # 最大树数,即迭代次数
                              depth = 6, # 树的深度
                               learning_rate = 0.03, # 学习率
                               custom_loss='AUC', # 训练过程中,用户自定义的损失函数
                               eval_metric='AUC', # 过拟合检验(设置True)的评估指标,用于优化
                               bagging_temperature=0.83, # 贝叶斯bootstrap强度设置
                               rsm = 0.78, # 随机子空间
                               od_type='Iter', # 过拟合检查类型
                               od_wait=150, # 使用Iter时,表示达到指定次数后,停止训练
                               metric_period = 400, #计算优化评估值的频率
                               l2_leaf_reg = 5, #l2正则参数
                               thread_count = 20, # 并行线程数量
                               random_seed = 967 # 随机数种子
                              )

模型参数配置

model = cb.CatBoostClassifier(iterations=1000, 
                              depth=7, 
                              learning_rate=0.01, 
                              loss_function='Logloss', 
                              eval_metric='AUC',
                              logging_level='Verbose', 
                              metric_period=50)
# 得到分类特征的列号
categorical_features_indices = []
for i in range(len(X_train.columns)):
    if X_train.columns.values[i] in attr:
        categorical_features_indices.append(i)
print(categorical_features_indices)

attr=['Age','BusinessTravel','Department','Education','EducationField','Gender','JobRole','MaritalStatus','Over18','OverTime']

模型训练,得出预测结果

model.fit(X_train, y_train, eval_set=(X_valid, y_valid), cat_features=categorical_features_indices)
predict = model.predict(test)
test['Attrition']=predict
test[['Attrition']].to_csv('submit_cb.csv')

总结

  • LighGBM效率高,在Kaggle比赛中应用多

  • CatBoost对于分类特征多的数据,可以高效的处理,过拟合程度小,效果好

  • XGBoost, LightGBM, CatBoost参数较多,调参需要花大量时间

  • Boosting集成学习包括AdaBoosting和Gradient Boosting

  • Boosting只是集成学习中的一种(Bagging, Stacking)

相关文章

网友评论

    本文标题:集成学习_CatBoost

    本文链接:https://www.haomeiwen.com/subject/tpvklrtx.html