随机森林2——集成学习的发展
一、理解工具——特征重要性
特征重要性是一种模型解释工具,可以计算每个特征对预测结果的贡献程度或预测能力的大小。为后续模型优化提供方向(筛选出最重要的特征、降低过拟合风险(减少噪声特征))。
在sklearn中可以使用feature_importances_属性进行访问每个特征重要性的百分比。
1、基于树模型的特征重要性的内置方法
核心思想:如果一个特征在分裂数据时,能显著减少节点的不纯度(impurity),那么它对模型预测的贡献就越大。 计算时会考虑该分裂节点覆盖的样本数,因为分裂一个样本数很多的节点影响更大。特征重要性通常基于两种指标(基尼不纯度 / 信息增益减少、平均不纯度减少)
基尼不纯度减少的计算步骤:节点不纯度 - (左子节点不纯度 * 左样本权重 + 右子节点不纯度 * 右样本权重)
平均不纯度减少的计算步骤: 计算节点的不纯度(Impurity,常用 Gini 指数或熵)—— 计算该节点分裂带来的杂质减少量(Impurity Decrease)—— 通过样本数权重来放大 加权节点的重要性 —— 汇总森林中所有树的所有节点的每个特征的贡献分数 —— 将所有特征的贡献分数除以相加的总贡献分——进行归一化处理(将所有特征的重要性分数缩放,使它们的总和为1或100%,以便于比较)
计算节点不纯度:Gini(二分类): (
是节点中类别k的比例)
熵(Entropy):
计算该节点分裂带来的杂质减少量:对于节点 t,设:
:到达节点 t 的样本数
该节点的不纯度
左子节点 样本数
,不纯度
右子节点 样本数
,不纯度
那么:
杂质减少量
通过样本数权重放大重要性:
汇总所有树和节点中每个特征的贡献度:
计算所有特征的重要性分数(百分比):归一化 把所有特征的 score 相加得到总和 S,然后: 这样所有特征的重要性之和等于 1。
随机森林就是通过查看使用该特征的树节点平均(在森林中的所有树上)减少杂质的程度来衡量该特征的重要性。更准确来说,这是一个加权平均值,其中每个节点的权重等于与其相关联的训练样本的数量。在 RandomForestClassifier里特征重要性是通过 平均减少杂质(Mean Decrease in Impurity, MDI)来衡量的。
2、线性模型的系数
对于线性模型(如线性回归、逻辑回归),模型的权重(系数)大小可以间接表示特征的重要性。
注意:使用前必须对特征进行标准化(Standardization),否则系数大小没有可比性。例如,一个年龄特征(范围0-100)的系数和一个工资特征(范围0-1000000)的系数直接比较是毫无意义的。
缺点:只能用于线性模型,并且如果特征之间存在高度相关性(多重共线性),系数的解释会变得不可靠。
二、提升法(Boosting)
提升法是一种非常强大且流行的集成学习(Ensemble Learning)技术。其核心思想在于将多个弱学习器(Weak Learners)组合成一个强大的模型。大多数提升法的总体思路是循环训练预测器,每一次都对其前预测器进行一些改动。
工作步骤:初始化——迭代训练——组合模型
- 初始化:给训练数据集中的每个样本分配一个初始的权重,通常是均匀分配(即每个样本权重相同)。
-
迭代训练:
a. 训练弱学习器:在当前样本权重分布下,训练一个弱学习器。目标是找到最小化加权误差的模型。
b. 计算误差:计算这个弱学习器在训练集上的(加权)误差率。
c. 分配权重:根据这个弱学习器的表现,给它本身分配一个权重(或称“话语权”)。表现越好(误差率越低)的弱学习器,在最终模型中的话语权就越高。
d. 更新样本权重:增加被当前弱学习器错误分类样本的权重,减少正确分类样本的权重。这样,下一个弱学习器就会更“专注于”处理这些难以学习的样本。 -
组合模型:将训练的所有弱学习器加权结合(通常是加权投票或加权求和),形成最终的强学习器。话语权高的弱学习器对最终结果的贡献更大。
三、AdaBoost (Adaptive Boosting)
AdaBoos是第一个成功的Boosting算法。
1、AdaBoost理论
AdaBoost(Adaptive Boosting,自适应提升)是一种经典的集成学习(Ensemble Learning)算法。它通过组合多个弱分类器(weak classifiers,仅比随机猜测略好的简单模型)来构建一个强分类器(strong classifier),显著提升分类性能。
AdaBoost的核心思想是迭代调整样本权重和模型权重,使算法专注于难以分类的样本。
工作流程:给所有样本相等的初始权重——训练一个弱分类器——增加分错样本权重,减少分对的样本的权重——下一个分类器更关注分错的样本——所有所分类器进行甲醛投票
这种学习技术有一个重要的缺点:训练不能和bagging、pasting一样并行训练,因为AdaBoosting的训练过程中权重是不断变化的,而bagging\pasting的训练权重是相同的。
机制 | 计算方式 | 作用 |
---|---|---|
样本权重 | 让后续分类器更关注难样本 | |
预测器权重 |