集成模型

[TOC]

集成学习

思想:三个臭皮匠顶个诸葛亮。

集成学习有三种集成方式,分别是Bagging、Stacking、Boosting方式。

Bagging

把数据通过有放回的抽样方式,划分为多个数据集,分别训练多个模型。针对分类问题,按照少数服从多数原则进行投票,针对回归问题,求多个测试结果的平均值。

Stacking

通常是不同的模型,而且每个分类都用了全部训练数据,得到预测结果y1, y2, …, yk,然后再训练一个分类器Meta Classifier,得到最终的预测结果。

Boosting

使用的相同的弱学习器,每个新学习器都依赖于前面的模型,并按照某种确定性的策略将它们组合起来。

两个重要的Boosting算法:AdaBoost、Gradient Boosting

AdaBoost

GradientBoosting

XGBoost

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def model_xgb():
param = {
'boosting_type': 'gbdt',
'objective': 'binary:logistic', # 任务目标
'eval_metric': 'auc', # 评估指标
'eta': 0.01, # 学习率
'max_depth': 15, # 树最大深度
'colsample_bytree': 0.8, # 设置在每次迭代中使用特征的比例
'subsample': 0.9, # 样本采样比例
'subsample_freq': 8, # bagging的次数
'alpha': 0.6, # L1正则
'lambda': 0, # L2正则
}
# DMatrix
train_data = xgb.DMatrix(X_train, label=y_train)
test_data = xgb.DMatrix(X_test, label=y_test)
model = xgb.train(param, train_data, evals=[(train_data, 'train'), (test_data, 'test')], num_boost_round=3000, early_stopping_rounds=200, verbose_eval=50)
y_pred = model.predict(test_data)
y_pred = [1 if x>=0.5 else 0 for x in y_pred]
print('xgb准确率:', metrics.accuracy_score(y_test, y_pred))