集成学习
基本思想
集成学习主要思想是:通过构建并结合多个机器学习来完成任务,通过一定的策略将各学习器结合。主要有两类:一类是Boosting,另一类是Bagging
Boosting:同质学习器,存在信赖关系,往往是串行的,根据误差调节样本权重,代表AdaBoost和Boost tree;
Bagging:学习器之间不存在信赖,代表算法是bagging或随机森林。
集成学习策略
-
平均法
-
投票法
-
学习法
对学习器的结果再加上一层学习器
Adaboost
Adaboost过程:先训练一个学习器1,根据误差更新训练样本权重,使得之前弱学习器1学习误差率高的样本权重变高,使得这些误差率高的在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练样本训练学习器2,如此重复进行。
需要确定的几个问题:
1)如何计算学习误差e?
2)如何得到弱学习器权重系数(alpha)?
3)如何更新样本权重D?
4)使用何种结合策略
Adaboost算法思路
分类问题
假设训练集为
训练集在第k个学习器的输出权重为
学习误差
以分类问题为例,假设问题为二元分类问题,输出为{-1,1},则第k个弱分类器(G_k(x))在训练集上的加权误差为
学习器权重系数
对于二元分类问题,第k个弱分类器(G_k(x))的权重系数为
可以看出,如果分类误差(e_k)越大,刚对应的弱分类器权重系数(alpha_k)越小。
样本权重系数
假设第k个弱分类器的样本权重系数为(D(k)=(w_{k1},w_{k2},...,w_{km})),则对应的第k+1个弱分类器的样本权重系数为
这里(Z_k)是规范化因子
从(w_{k+1})可以看出,如果第i个样本分类错误,则(y_iG_k(x_i)lt 0),导致样本权重在第k+1个弱分类器中增大,如分类正确,则权重在第k+1个弱分类器中减少。
集合策略
Adaboost使用加权表决法,最终分类器为
回归问题
略。。
Adaboost损失函数、算法流程、正则化
参见刘建平博客
Adaboost小结
使用最广泛的弱学习器就是神经网络和决策树
Adaboost优点:
- 分类精度高
- 可以使用各类回归、分类算法,使用灵活
- 二分类时,构建简单,可理解
- 不易发生过拟合
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))