人工智能-机器学习机器学习之路

集成学习_CatBoost

2022-02-16  本文已影响0人  Nefelibatas

CatBoost算法

(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工具

fit函数参数

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')

总结

上一篇下一篇

猜你喜欢

热点阅读