目录
1 集成学习
集成学习通过构建并结合多个学习器来完成学习任务,它本身不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。它可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。
集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现。
多个模型集成成为的模型叫做集成评估器(ensemble estimator),组成集成评估器的每个模型都叫做基评估器 (base estimator)。通常来说,有三类集成算法:装袋法(Bagging),提升法(Boosting)和stacking。
装袋法的核心思想是构建多个
相互独立的评估器
,然后对其预测进行平均或多数表决原则来决定集成评估器的结 果。装袋法的代表模型就是随机森林。
提升法中,基评估器是相关的,
是按顺序一一构建的。其核心思想是结合弱评估器的力量一次次对难以评估的样本
进行预测,从而构成一个强评估器。提升法的代表模型有
Adaboost
和梯度提升树。
要获得好的集成,个体学习器应该“好而不同”,即个体学习器不仅要有一定的准确性,而且学习器之间应该具有差异。
2 随机森林分类器
2.1 随机森林分类器函数及其参数
随机森林分类器的参数有许多和决策树的参数一致。其中控制基评估器的参数如下。
其他相关参数:
n_estimators:
这是森林中树木的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,
n_estimators
越
大,模型的效果往往越好
。但是相应的,任何模型都有决策边界,
n_estimators
达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators
越大,需要的计算量和内存也越大,训练的时间也会越来越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。
random_state:
随机森林的本质是一种装袋集成算法(
bagging
),装袋集成算法是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果。在刚才的红酒例子中,我们建立了25
棵树,对任何一个样本而言,平均或多数表决原则下,当且仅当有13
棵以上的树判断错误的时候,随机森林才会判断错误。单独一棵决策树对红酒数据集的分类准确率在0.85
上下浮动,假设一棵树判断错误的可能性为
0.2(ε)
,那
20
棵树以上都判断错误的可能性是:
![](https://i-blog.csdnimg.cn/blog_migrate/a3d4573e5c12e902fc7e16625761db00.png)
其中,
i
是判断错误的次数,也是判错的树的数量,
ε
是一棵树判断错误的概率,(
1-ε
)是判断正确的概率,共判对25-i次。
所以随机森林
判断错误的几率非常小,这让随机森林在红酒数据集上的表现远远好于单棵决策树。
sklearn
中的分类树
DecisionTreeClassififier
自带随机性,所以随机森林中的树天生就都是不一样的,
决策树从最重要的特征中随机选择出一个特征来进行分枝,因此每次生成的决策树都不一样,这个功能由参数random_state控制。
随机森林中其实也有
random_state
,用法和分类树中相似,只不过在分类树中,一个
random_state
只控制生成一棵树,而随机森林中的random_state
控制的是生成森林的模式,而非让一个森林中只有一棵树。
当
random_state
固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是
用
”
随机挑选特征进行分枝
“
的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的
。
但这种做法的局限性是很强的,当我们需要成千上万棵树的时候,数据不一定能够提供成千上万的特征来让我们构筑尽量多尽量不同的树。因此,除了random_state
。我们还需要其他的随机性。
bootstrap & oob_score:
要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap
就是用来控制抽样技术的参数。
在一个含有
n
个样本的原始训练集中,我们进行随机采样,每次采样一个样本,并在抽取下一个样本之前将该样本放回原始训练集,也就是说下次采样时这个样本依然可能被采集到,这样采集n
次,最终得到一个和原始训练集一样大的,n
个样本组成的自助集。由于是随机采样,这样每次的自助集和原始数据集不同,和其他的采样集也是不同的。这样我们就可以自由创造取之不尽用之不竭,并且互不相同的自助集,用这些自助集来训练我们的基分类器,我们的基分类器自然也就各不相同了。
bootstrap
参数默认
True
,代表采用这种有放回的随机抽样技术