当前位置: 首页 > news >正文

随机森林2——集成学习的发展

一、理解工具——特征重要性

特征重要性是一种模型解释工具,可以计算每个特征对预测结果的贡献程度或预测能力的大小。为后续模型优化提供方向(筛选出最重要的特征、降低过拟合风险(减少噪声特征))。

在sklearn中可以使用feature_importances_属性进行访问每个特征重要性的百分比。

1、基于树模型的特征重要性的内置方法

核心思想:如果一个特征在分裂数据时,能显著减少节点的不纯度(impurity),那么它对模型预测的贡献就越大。 计算时会考虑该分裂节点覆盖的样本数,因为分裂一个样本数很多的节点影响更大。特征重要性通常基于两种指标(基尼不纯度 / 信息增益减少、平均不纯度减少)

基尼不纯度减少的计算步骤:节点不纯度 - (左子节点不纯度 * 左样本权重 + 右子节点不纯度 * 右样本权重)

平均不纯度减少的计算步骤: 计算节点的不纯度(Impurity,常用 Gini 指数或熵)—— 计算该节点分裂带来的杂质减少量(Impurity Decrease)—— 通过样本数权重来放大 加权节点的重要性 —— 汇总森林中所有树的所有节点的每个特征的贡献分数 —— 将所有特征的贡献分数除以相加的总贡献分——进行归一化处理(将所有特征的重要性分数缩放,使它们的总和为1或100%,以便于比较)

        计算节点不纯度:Gini(二分类):G(t) = 1 - p_0^2 - p_1^2 (p_k是节点中类别k的比例)

                                        熵(Entropy): H(t) = - \sum_k p_k \log_2 p_k

        计算该节点分裂带来的杂质减少量:对于节点 t,设:

                                                        $N_t$:到达节点 t 的样本数

                                                        $I(t)$该节点的不纯度

                                                        左子节点 $t_L$ 样本数 $N_L$,不纯度 $I(t_L)$

                                                        右子节点$t_R$ 样本数$N_R$,不纯度 $I(t_R)$ 那么:

                                        杂质减少量 \Delta I_t = I(t) - \frac{N_L}{N_t} I(t_L) - \frac{N_R}{N_t} I(t_R)

         通过样本数权重放大重要性: \text{contribution}_t = N_t \times \Delta I_t

        汇总所有树和节点中每个特征的贡献度:  \text{score}_j = \sum_{\text{nodes split on } j} N_t \times \Delta I_t

        计算所有特征的重要性分数(百分比):归一化 把所有特征的 score 相加得到总和 S,然后:\text{importance}_j = \frac{\text{score}_j}{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的训练权重是相同的。

机制 计算方式 作用
样本权重 w_i^{(t+1)} = w_i^{(t)} e^{-\alpha _t y_t h_t(x_i)},再归一化 让后续分类器更关注难样本
预测器权重
http://www.dtcms.com/a/347283.html

相关文章:

  • TCP:传输控制协议
  • JAVA核心基础篇-递归
  • C 语言标准输入输出头文件stdio.h及其常见用法
  • 【读论文】Qwen-Image技术报告解读
  • 云原生高级——K8S总概
  • ArkTS 语言全方位解析:鸿蒙生态开发新选择
  • 双指针:成最多水的容器
  • 使用 eventpp 构建跨 RT-Thread 与 ARM-Linux 的轻量级 Active Object(AO)事件驱动框架
  • AI Agent系列(十三) -智能体架构的真相
  • LoRA 微调
  • 探索 JUC:Java 并发编程的神奇世界
  • 单调栈详解
  • Vue环境组件node.js安装
  • C语言---数据类型
  • Qt中使用MySQL数据库
  • git实战(8)git高阶命令分析【结合使用场景】
  • ADC系统中的信噪比(SNR)
  • 容器安全实践(二):实践篇 - 从 `Dockerfile` 到 Pod 的权限深耕
  • 多模态医学图像融合:解锁顶会顶刊中的医学影像新视界
  • 【GaussDB】使用MySQL客户端连接到GaussDB的M-Compatibility数据库
  • 智慧零售漏扫率↓79%!陌讯多模态融合算法在智能收银与货架管理的实战解析
  • 【Linux】深度学习Linux下的包管理器yum/apt
  • Day22: Python涡轮增压计划:用C扩展榨干最后一丝性能!
  • 微前端架构常见框架
  • 深度学习之PyTorch框架(安装,手写数字识别)
  • pid自适应调节实战设计-基于输出电流的PI参数切换方案
  • deepseek应用技巧-MCP服务操作网页和文档
  • ESP32应用——UDP组播/广播(ESP-IDF框架)
  • AI 辅助编程完全新手指南 - 从零基础到高效协作
  • Java试题-选择题(15)