版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JN_rainbow/article/details/88993591
文章目录
- 集成学习
- 集成学习的理论基础
- PAC(probably approximately correct),可能近似正确学习框架
- 强可学习&弱可学习
- 主要算法
- 集成学习的理论基础
- Boosting、Bagging
- Boosting
- Bagging
- Bootstrap
- Bagging(Bootstrap aggregating)
- 结合策略
- 平均法
- 投票法
- stacking
- blending
- 随机森林
- 随机森林推广
- Extra trees
- 优缺点
- 随机森林推广
- sklean API
- 应用场景
- 参考资料
集成学习
集成学习的主要思路是先通过一定的规则生成多个学习器,然后用某种特定的规则,将多个学习器进行组合,综合判断输出结果。
集成学习的理论基础
PAC(probably approximately correct),可能近似正确学习框架
很容易得知,除非对所有可能的数据进行训练,否则总会存在多个假设使得错误率不为0,也就是说学习器不能保证和目标函数完全一致,且由于样本是随机选择的,总存在一定的偶然性,使得学习器学习到的与真实分布不同.
因此我们只要求学习学习到一个近似正确的假设,即PAC学习:
- 学习器必须以任意高的概率输出一个错误率任意低的假设.
- 学习过程的时间最多以多项式方式(O(n),O(logn),O(na))(O(n), O(log n), O(n^a))(O(n),O(logn),O(na))增长.
强可学习&弱可学习
在PAC学习框架中,
一个概念如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的.
一个概念如果存在一个多项式的学习算法能够学习它,学习的正确率只比随机猜测略好,则称这个概念是弱可学习的.
理论证明强可学习和弱可学习是等价的,即在PAC学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的.
主要算法
AdaBoost、RF、GBDT、XGBoost、LightGBM、CatBoost等.
对一某一问题,发现一个弱学习方法要比强学习方法容易的多,通过弱学习方法训练多个弱分类器,组合这些弱分类器构成一个强分类器.
如何训练多个弱分类器以及如何组合多个弱分类器是集成方法的关键,训练多个弱分类器常用的方法有boosting、bagging.
Boosting、Bagging
Boosting
Boosting从原始训练数据出发,通过调整训练数据的概率分布(权值分布)来生成多个子分类器,多个子分类器的产生是有序的,即一个分类器依赖于前一个分类器,并且着重关注于前一个分类器误分类的样本(提升错误分类样本的权重).
由于新的分类器重点关注错误分类的样本,生成新的分类器的过程中在不断地降低误差,从而降低整个模型的偏差.
经典的boost方法如Adaboost
Bagging
Bootstrap
在原有的规模为n的训练数据集上有放回地随机选取n个数据.
核心思想在于,给定训练集,当你认为给定的训练集太少,不能够很好地反应数据的真实分布时,可以采用重采样的方法,来增大样本.
Bagging(Bootstrap aggregating)
在原有的训练数据集DDD上,采用bootstrap的方法选取mmm个独立的训练集分别训练mmm个分类器/回归,然后组合成最终的分类器/回归.
训练多个分类器Bagging的方法能够提升不稳定分类器的识别准确率,因为它有效地平均了多个分类器之间的不稳定性,因此常说Bagging的方法能够降低方差.
结合策略
平均法
平均和加权平均,将多个分类器进行线性组合,权重的设置可以有多种不同的策略,如Adaboost中权重计算.
投票法
分类问题中,通常多个分类器进行投票,决定最终输出.
stacking
stacking的本质是一个分层结构,若在第二层中训练多个模型,则可以进一步进行第三层的模型训练.
对于单个模型,首先进行交叉验证,将每一个Fold的验证集的预测组合成一个新的训练集,每一个Fold的模型对测试集进行预测,将所有Fold的测试集的预测结果取平均得到新的测试集. 多个模型将会产生多个训练集和测试集,将多个模型的预测结果看作是不同的特征,第二层模型则从这些特征上进行训练.
图来源于知乎Kaggle机器学习之模型融合(stacking)心得
blending
blending与staking思路类似,区别在于blending不是通过交叉验证来产生新的数据集,而是直接对原始数据集进行划分,用不相交的数据集训练多个模型,并将模型的预测作为下一层的特征.
随机森林
随机森林本质上是bagging方法与特征子空间的一种结合,所谓随机表现在两方面:
- 利用bootstrap重采样生成多个独立的数据集.
- 从所有特征中随机选取K个特征进行训练.
对不同数据集进行不同的特征选取,根据决策树算法(ID3、C4.5、CART)生成多个决策树,进行vote.
随机森林推广
Extra trees
Extra Trees是RF的变种,区别在于:
- Extra Trees使用原始数据集,不进行bootstap重采样.
- Extra Trees在进行分裂时,随机选择特征来划分,而不是根据基尼指数、信息增益等来选择特征.
显然,由于分裂时不是根据最优特征进行分裂,那么决策树的规模自然会超过RF中的决策树,但同时也会带来方差的降低.
优缺点
- 优点
- 对多重共线性的特征不敏感.
- 双重随机性的引入,使模型更加不易过拟合.
- 它能够处理很高维度的数据,并且不用做特征选择(因为特征子集是随机选择的).
- 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的).
- 在训练过程中,能够检测到特征间的互相影响,并给出特征重要性.
- 对于缺失数据和不平衡数据来说,效果较为稳定.
- 缺点
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合.
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的.
sklean API
参数 | 类型 | 默认值 | 作用 |
---|---|---|---|
n_estimators | int | 10 | 树的棵树 |
criterion | str | ‘gini’ | 分裂算法 |
max_depth | int or None | None | 决策树最大深度 |
min_samples_split | int or float | 2 | 分裂时最小样本数 |
min_samples_leaf | int or float | 1 | 叶节点最小样本数 |
min_weight_fraction_leaf | float | 0 | 叶节点最小样本权重总值 |
max_features | int float str None | ‘auto’ | 切分时最大的特征数量 |
max_leaf_nodes | int or None | None | 最大叶节点个数 |
min_impurity_decrease | float | 0. | 切分点不纯度最小减少程度,若节点不纯度小于该值,则被移除 |
bootstrap | boolean | True | 是否bootstrap |
oob_score | boolean | False | 是否用未采样的数据来验证模型得分 |
n_jobs | int or None | None | 并行数, -1为适用所有进程, 即与内核数相同, None为1 |
random_state | int or None | None | 随机种子 |
verbose | int | 0 | 日志输出间隔 |
warm_start | boolean | False | 是否热启动,对上一个模型采用追加的方式 |
应用场景
- 很容易处理含有类别型、数值型等不同类型特征的数据.
- 适用于处理维数较高的数据集.
- 由于随机性的存在,RF不需要对决策树进行剪枝操作,也可以拥有良好的泛化能力和抗过拟合能力.