集成学习与随机森林
1、集成学习
集成学习(ensemble learning)通过构建并合并多个模型来完成学习任务,从而获得比单一学习模型更显著优越的泛化性能,简言之,集成学习就是利用模型的“集体智慧”,提升预测的准确率. 根据单个模型方式,集成学习可以分为两大类:按照模型与模型之间的关系分为两类
- 个体间存在强依赖关系,必须串行生成的序列化方法,其代表为Boosting算法;前个模型的输出作为下个模型的输入,依次循环
- 个体之间不存在强依赖关系,可同时生成的并行化方法,代表是Bagging和随机森林算法.三个模型同时去预测,两个模型预测的一样,那么我们就认同他这个答案是对的
一句话说就是,三个臭皮匠顶个诸葛亮。把很多模型集成到一起
2. Boosting
1)什么是Boosting
Boosting(直译为推进、提升)是一族可以将弱学习器提升为强学习器的算法,其工作原理是:
- 先训练出一个初始模型;
- 根据模型的表现进行调整,使得模型预测错误的数据获得更多的关注,再重新训练下一个模型;
- 不断重复第二步,直到模型数量达到预先设定的数目T,最终将这T个模型加权结合.
AdaBoosting(Adaptive Boosting,正向激励)是Boosting算法族中最著名的算法,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值,基本步骤如下:
- 首先,是初始化训练数据的权值分布D1,假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值 w 1 = 1 / N w_1=1/N w1=1/N;
- 然后,训练弱分类器 h i h_i hi. 具体训练过程中是:如果某个训练样本点,被弱分类器 h i h_i hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大. 权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去;
- 最后,将各个训练得到的弱分类器组合成一个强分类器. 各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用. 换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小 .
import sklearn.tree as st
import sklearn.ensemble as se
# model: 决策树模型(单个模型,基学习器)
model = st.DecisionTreeRegressor(max_depth=4)
# n_estimators:构建400棵不同权重的决策树,训练模型
model = se.AdaBoostRegressor(model, # 单模型
n_estimators=400, # 决策树数量
random_state=7)# 随机种子
# 训练模型
model.fit(train_x, train_y)
# 测试模型
pred_test_y = model.predict(test_x)
3. 随机森林
1)什么是随机森林
随机森林(Random Forest,简称RF)是专门为决策树设计的一种集成方法,是Bagging法的一种拓展,它是指每次构建决策树模型时,不仅随机选择部分样本,而且还随机选择部分特征来构建多棵决策树. 这样不仅规避了强势样本对预测结果的影响,而且也削弱了强势特征的影响,使模型具有更强的泛化能力.
随机森林简单、容易实现、计算开销小,在很多现实任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法”.
import sklearn.ensemble as se
model = se.RandomForestRegressor(
max_depth, # 决策树最大深度
n_estimators, # 决策树数量
min_samples_split)# 子表中最小样本数 若小于这个数字,则不再继续向下拆分