1. 集成学习概念
- 构建并通过多个学习器来完成学习任务的方式。也称为多分类器系统或者基于委员会的学习。
- 同质集成:只包含同类个体学习器。(称为基学习器)。异质集成:学习器由不同的学习算法生成。(称为组件学习器)
- 核心:如何产生“好而不同”的个体学习器。
- 根据个体学习器的生产方式,分为两类:
- 个体学习器之间存在强相关,必须串行生成的序列化方法。如Boosting
- 个体学习器之间不存在依赖关系,可以同时生成的并行化方法。如Bagging、随机森林。
2. 个体学习器概念
现有的学习算法从训练数据产生的模型。也称基学习器,组件学习器,弱学习器。
3. boosting bagging
-
boosting
先从训练集训练出一个基学习器,根据学习器的表现来调整训练样本的分布。之前基学习器做错的样本将得到更大的关注。根据调整分布之后的样本来训练下一个基学习器。如此重复。
主要代表:AdaBoost.
- 标准的AdaBoost只适用于二分类
主要流程如下:
-
bagging
- 自主采样法:有放回的抽样。训练集中约有2/3的样本出现在训练集中
- 算法流程如下:
- (优)可以不加修改的应用于多分类、回归问题。
- (优)剩下的约1/3的样本可用作验证集对泛化性能进行“包外估计”。(基学习器是决策树时,包外样本可以用来辅助剪枝;基学习器是神经网络时,包外样本可以用来辅助早期停止,减少过拟合)
- 主要关注降低方差
4. 结合策略(平均法,投票法,学习法)
优点:
- 【统计方面】结合多个学习器,减小了使用单个学习器因误选导致的泛化性能不佳的风险。
- 【计算方面】通过多次运行之后进行结合,降低了陷入糟糕局部最小值点的风险。
- 【表示方面】结合多个学习器,相应的假设空间有所扩大,有可能得到更好的近似。
-
平均法:
- 简单平均:
- 加权平均:
(非负权重才能保证集成性能优于单一最佳个体)
-
投票法:
- 绝对多数投票(票数过半)(标准的绝对多数投票会有“拒绝预测”选项)
- 相对多数投票(票最多的标记)
- 加权投票
【注意】
- 有硬投票(0、1)和软投票(概率)之分.不同类型之间不能混用。
- 对于产生类别标签的同时也产生分类置信度的学习器,分类置信度可以转换成概率使用。如果该值未进行规范化,需要其他技术进行缩放
- 基学习器类型不同,概率不能进行比较,转成相应的类别标签再进行投票。
-
学习法(典型代表:Stacking)
算法流程:
5. 随机森林思想
随机森林利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。
两个随机的过程:随机选择样本,随机选择特征。
- 随机选择样本
- 给定一个训练样本集,数量为N,我们使用有放回采样到N个样本,构成一个新的训练集。注意这里是有放回的采样,所以会采样到重复的样本。详细来说,就是采样N次,每次采样一个,放回,继续采样。即得到了N个样本。
- 随机选择特征
- 在随机森林中,我们不计算所有特征的增益,而是从总量为M的特征向量中,随机选择m个特征,其中m可以等于sqrt(M),然后计算m个特征的增益,选择最优特征(属性)【nformationGain(ID3) 或者 Gain Ratio(C4.5)】。注意,这里的随机选择特征是无放回的选择!
参考:https://www.jianshu.com/p/d1d8de1e0608
6. 随机森林的推广
Extremely Randomized Trees
区别:
-
对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择子集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
-
在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
Isolation Forest
特点:
-
iForest用部分模型不隔离所有正常点的情况下效果很好,并且模型的建立仅使用很小的样本数量(子采样数量远远小于原始训练集的数量),因为iForest目标是异常点检测,只需要部分样本就可以将异常点区分出来;
-
iForest中的树的建立是任意选择一个特征,然后在该特征中任意选择一个值作为划分左右子树的标准;
-
iForest使用不放回的随机子采样策略;
参考:https://blog.csdn.net/qq_24519677/article/details/82117406
7. 优缺点
(实践使用较少,对于优缺点的体验不直观深刻)
优点:
- 能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化
- 随机选择样本导致的每次学习决策树使用不同训练集,所以可以一定程度上避免过拟合;
- 本身精度比大多数单个算法要好
- 在测试集上表现良好,由于两个随机性的引入,使得随机森林不容易陷入过拟合(样本随机,特征随机)
- 由于树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型
- 由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量
- 可以处理缺省值(单独作为一类),不用额外处理
- 由于每棵树可以独立、同时生成,容易做成并行化方法
- 由于实现简单、精度高、抗过拟合能力强,当面对非线性数据时,适于作为基准模型
缺点:
- 在某些噪音较大的分类或回归问题上会过拟合;
- 对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
参考:https://blog.csdn.net/qingqingpiaoguo/article/details/53435417
https://www.jianshu.com/p/a779f0686acc
8. sklearn参数
- n_estimators :integer,默认10.
森林里(决策)树的数目。
- criterion :string,默认’gini‘
特征性能评定函数。受支持的标准是基尼不纯度的"gini",和信息增益的"entropy"(熵)。
- max_depth :integer or None,默认NONE
(决策)树的最大深度。如果值为None,那么会扩展节点,直到所有的叶子属于同一类,或者直到所有叶子包含少于min_sample_split的样本。
- min_samples_split : int, float,默认2
内部节点所需要的最小样本数量:
如果为int,那么考虑min_samples_split作为最小的数字。
如果为float,那么min_samples_split是一个百分比,并且把ceil(min_samples_split*n_samples)是每一个分割最小的样本数量。
- min_samples_leaf : int, float,默认1
需要在叶子结点上的最小样本数量:
如果为int,那么考虑min_samples_leaf作为最小的数字。
如果为float,那么min_samples_leaf为一个百分比,并且ceil(min_samples_leaf*n_samples)是每一个节点的最小样本数量。
- min_weight_fraction_leaf : float, 默认0.0
一个叶子节点所需要的权重总和(所有的输入样本)的最小加权分数
- max_features :int, float, string or None 默认’auto‘
最佳分割时需要考虑的特征数目:
&如果是int,就要考虑每一次分割处的max_feature特征
&如果是float,那么max_features就是一个百分比,那么(max_feature*n_features)特征整数值是在每个分割处考虑的。
&如果是auto,那么max_features=sqrt(n_features),即n_features的平方根值。
&如果是log2,那么max_features=log2(n_features)
&如果是None,那么max_features=n_features
【注意】寻找分割点不会停止,直到找到最少一个有效的节点划分区,即使它需要有效检查超过max_features的特征。
- max_leaf_nodes :int or None,默认none
叶节点最大数量。如果为None,那么不限制叶子节点的数量。
- min_impurity_decrease :float,默认0
不纯度下降的阈值。如果节点的分裂导致的不纯度的下降程度大于或者等于这个节点的值,那么这个节点将会被分裂。
- min_impurity_split :float
树早期生长的阈值。如果一个节点的不纯度超过阈值那么这个节点将会分裂,否则它还是一片叶子。
- bootstrap :boolean,默认true
是否使用有放回抽样。
- oob_score :bool ,默认 false
是否使用袋外样本来估计泛化精度。
- n_jobs :integer,默认1
用于拟合和预测的并行运行的工作(作业)数量。如果值为-1,那么工作数量被设置为核的数量。
- random_state :int, RandomState instance or None,默认none
random_state是随机数生成器使用的种子; 如果是RandomState实例,random_state就是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例
- verbose :int,默认0
控制决策树建立过程的冗余度。冗余度是什么??
- warm_start :bool,默认false
当被设置为True时,重新使用之前训练的解决方案,用来给全体拟合和添加更多的估计器,反之,仅仅只是为了拟合一个全新的森林。
- class_weight :dict, list of dicts, “balanced”,默认none
多输出(包括多标签),其权值应该被定义为它自己字典的每一列的每一个类。"balanced"模式使用y的值来自动的调整权值,与输入数据中类别频率成反比;
参考:https://blog.csdn.net/w952470866/article/details/78987265
9.应用场景
实践缺乏,具体应用场景体验不深。
- 处理高维数据上优势明显。
- 适合大规模数据。