集成学习

集成学习

基本思想

集成学习主要思想是:通过构建并结合多个机器学习来完成任务,通过一定的策略将各学习器结合。主要有两类:一类是Boosting,另一类是Bagging

Boosting:同质学习器,存在信赖关系,往往是串行的,根据误差调节样本权重,代表AdaBoost和Boost tree;

Bagging:学习器之间不存在信赖,代表算法是bagging或随机森林。

集成学习策略

  1. 平均法

  2. 投票法

  3. 学习法

    对学习器的结果再加上一层学习器

Adaboost

Adaboost过程:先训练一个学习器1,根据误差更新训练样本权重,使得之前弱学习器1学习误差率高的样本权重变高,使得这些误差率高的在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练样本训练学习器2,如此重复进行。

需要确定的几个问题:

1)如何计算学习误差e?

2)如何得到弱学习器权重系数\(\alpha\)?

3)如何更新样本权重D?

4)使用何种结合策略

Adaboost算法思路

分类问题

假设训练集为

\[T={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} \]

训练集在第k个学习器的输出权重为

\[M(k)=(w_{k1},w_{k2},...,w_{km})\qquad w_{ki}=\frac{1}{m}\quad i=1,2,...,m \]

学习误差

以分类问题为例,假设问题为二元分类问题,输出为{-1,1},则第k个弱分类器\(G_k(x)\)在训练集上的加权误差为

\[e_k=P(G_k(x_i)\ne y_i)=\sum_{i=1}^mw_{ki}I(G_k(x_i)\ne y_i) \]

学习器权重系数

对于二元分类问题,第k个弱分类器\(G_k(x)\)的权重系数为

\[\alpha_k=\frac{1}{2}\log \frac{1-e_k}{e_k} \]

可以看出,如果分类误差\(e_k\)越大,刚对应的弱分类器权重系数\(\alpha_k\)越小。

样本权重系数

假设第k个弱分类器的样本权重系数为\(D(k)=(w_{k1},w_{k2},...,w_{km})\),则对应的第k+1个弱分类器的样本权重系数为

\[w_{k+1}=\frac{w_{ki}}{Z_K}\exp (-\alpha_ky_iG_k(x_i)) \]

这里\(Z_k\)是规范化因子

\[Z_k=\sum_{i=1}^mw_{ki}\exp(-\alpha_ky_iG_k(x_i)) \]

\(w_{k+1}\)可以看出,如果第i个样本分类错误,则\(y_iG_k(x_i)\lt 0\),导致样本权重在第k+1个弱分类器中增大,如分类正确,则权重在第k+1个弱分类器中减少。

集合策略

Adaboost使用加权表决法,最终分类器为

\[f(x)=sign(\sum_{k=1}^K\alpha_kG_k(x)) \]

回归问题

略。。

Adaboost损失函数、算法流程、正则化

参见刘建平博客

Adaboost小结

使用最广泛的弱学习器就是神经网络和决策树

Adaboost优点:

  1. 分类精度高
  2. 可以使用各类回归、分类算法,使用灵活
  3. 二分类时,构建简单,可理解
  4. 不易发生过拟合

Adaboost缺点:

对异常样本敏感,异常样本在迭代中可能获得较高的权重,影响学习。

sklearn Adaboost类库使用

sklearn Adaboost类库

在sklearn中Adaboost有两个类库AdaBoostClassifier和AdaBoostRegressor,分别用于实现分类和回归。

主要参数

base_estimator

弱分类器,默认是决策树,使用CART分类树DecisionTreeClassifier。

algorithm

主要是两种分类算法选择SAMME和SAMME.R,两者主要区别在于学习器权重的度量。

loss

回归时loss度量

n_estimator

学习器最大迭代次数,n太小容易欠拟合,n太大容易过拟合。默认50

learning_rate

每个弱学习器的权重系数,较小的系数意味着较多次的迭代,所以一般两个参数n_estimator和learning_rate一起进行调参。

分类器DecisionTreeClassifier参数

max_features

最大特征数,默认是None,考虑所有特征数。

max_depth

决策树最大深度

min_samples_split

内部节点再划分所需最小样本数

min_samples_leaf

叶节点最小样本数

min_weight_fraction_leaf

叶节点最小样本权重和

max_leaf_nodes

最大节点数

AdaBoost实例

from sklearn.ensemble import AdaBoostRegressor
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier

bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),
                         algorithm='SAMME', n_estimators=200, learning_rate=0.8)
bdt.fit(x,y)
print(bdt.score(x,y))
posted @ 2020-05-13 15:42  hi_heisen  阅读(239)  评论(0编辑  收藏  举报