机器学习集成学习与树家族汇总

本文会借助对集成学习(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算法分析:


机器学习集成学习与树家族汇总_第1张图片


机器学习集成学习与树家族汇总_第2张图片
机器学习集成学习与树家族汇总_第3张图片

  代码示例:

# 生成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方法最优的弱分类器个数,但分类器个数的增多也会带来性能和过拟合等问题,所以需要进行权衡;

未完待续.........................................

你可能感兴趣的:(机器学习集成学习与树家族汇总)