本文会借助对集成学习(Ensemble Learning)的分析,对决策树(Decision Tree)、随机森林(Random Forest)、梯度提升树(Gradient Boosted Decision Tree/Grdient Boosted Regression Tree )以及 Xgboost(eXtreme Gradient Boosting)进行汇总。
集成学习包括boosting 和 bagging,其中boosting是对各个弱学习器串行训练得到的模型,而bagging则是一种并行训练模型的思路;
其中boosting思想是根据错误率来取样(Boosting初始化时对每一个训练例赋相等的权重1/n,然后用该学算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重);即最出名的代表算法是Adaboost(Adaptive boosting:自适应提升);GBDT也是boosting思想的杰出代表,Xgboost是对GBDT算法的神级提升优化;从而大范围的在工业界和kaggle中大行其道;
bagging思想是进行有放回的采样(自助采样法),各个弱分类器模型训练集的选择是随机的,各轮训练集之间相互独立(无论特征还是数据集都是相互独立的);即给定m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有机会被采集到,这样经过m次采样,我们得到了有m个样本的采样集(数据集中存在一个数据被多次采样的可能),如此完成一次样本采集,按照该法进行T轮采样,就得到了T个包含m个训练样本的采样集;对于预测结果进行输出时,采用投票法即可;其中RF是该思想的代表算法;
boosting:
Adaboost算法分析:
代码示例:
# 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征,协方差系数为2
X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500, n_features=2,n_classes=2, random_state=1)
# 生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3,协方差系数为2
X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5,n_samples=400, n_features=2, n_classes=2, random_state=1)
#讲两组数据合成一组数据
X = np.concatenate((X1, X2))
y = np.concatenate((y1, - y2 + 1))
param_test = {'n_estimators':list(range(100,800,50))}
gsearch = GridSearchCV(estimator = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2,min_samples_split=20, min_samples_leaf=5),
algorithm="SAMME", learning_rate=0.8),
param_grid = param_test, scoring='roc_auc',iid=False, cv=5)
gsearch.fit(X,y)
print(gsearch.grid_scores_,gsearch3.best_params_,gsearch3.best_score_)
最终结果是 best_params:{'n_estimators': 750}
best_score:0.9727037037037036
通过网格搜索的方式找到令adaboost方法最优的弱分类器个数,但分类器个数的增多也会带来性能和过拟合等问题,所以需要进行权衡;
未完待续.........................................