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

随机森林--集成学习

一、集成学习之随机森林

1、集成学习

  • 集成学习方法,就是人多力量大, 少数服从多数,比如

    • 你需要投资一支股票,你的 100 个朋友给你提供了建议,你如何决定?

      • 选择最牛的那个朋友提供的建议-类似找到最好的那棵决策树

      • 所有朋友的建议合并,选择建议最多的那一支-随机森林

  • 集成学习方法分类如下:

    • Bagging:Bagging 通过有放回地从原始数据集中抽取多个子样本,然后分别训练模型。最终的预测结果是这些模型预测结果的平均值(对于回归问题)或者是多数投票(对于分类问题)。Bagging的一个典型例子是随机森林

    • Boosting:对于训练集中的每个样本建立权值 wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值,进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型

2、随机森林

  • 随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行预测,并且在预测时采用投票的方式选择最终的分类结果。随机森林既可以用于分类任务也可以用于回归任务

  • 随机森林中的“随机”体现在两个方面:首先,每棵树在训练时,从原始数据集中随机选择一部分数据点作为训练集;其次,在每棵树的每个分裂节点上,只考虑一部分特征,而不是所有特征

  • 随机森林的工作流程通常包括以下几个步骤:

    • 数据预处理:对原始数据进行清洗和标准化,以确保算法的有效运行

    • 自助采样:从原始数据集中通过自助采样的方式抽取多个不同的训练数据集。自助采样允许数据集中的样本重复出现,这意味着每个训练集的大小与原始数据集相同,但包含一些重复的样本

    • 特征随机选择:在每棵树的每个分裂节点上,随机选择一部分特征,而不是考虑所有可能的特征。这一步进一步增加了模型的多样性,并有助于减少过拟合

    • 决策树构建:使用每个训练数据集构建决策树,直到每个树达到其最大深度或达到其他停止条件

    • 预测和聚合:对于分类问题,每棵树给出一个预测,最终的预测结果是所有树预测结果的多数投票;对于回归问题,则是所有树预测结果的平均值

案例:

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction import DictVectorizer
import pandas as pd
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
​
def titanic_survival_prediction():# 读取训练数据集train_data = pd.read_csv('./train.csv')# 读取测试数据集test_data = pd.read_csv('./test.csv')# 选取训练集和测试集的特征值和目标值X_train = train_data[["Pclass", "Age", "Sex"]]y_train = train_data[["Survived"]]X_test = test_data[["Pclass", "Age", "Sex"]]# 处理数据集中的缺失值X_train = X_train.fillna(X_train['Age'].mean())X_test = X_test.fillna(X_test['Age'].mean())# 将数据集转换为列表,元素是字典格式X_train = X_train.to_dict(orient="records")X_test = X_test.to_dict(orient="records")# 把字典数据转为数值vec = DictVectorizer(sparse=True)X_train = vec.fit_transform(X_train).toarray()X_test = vec.fit_transform(X_test).toarray()# 特征工程:标准化scaler = StandardScaler()X_train = scaler.fit_transform(X_train)X_test = scaler.transform(X_test)# 创建随机森林分类器模型model = RandomForestClassifier(n_estimators=120, max_depth=5)# 训练模型y_train = y_train.values.ravel()model.fit(X_train, y_train)# 预测y_predict = model.predict(X_test)# 读取测试集的结果y_test = pd.read_csv('./gender_submission.csv')[['Survived']]y_test = y_test.values.ravel()print("测试数据集的准确率:\n", model.score(X_test, y_test))# 预测结果与实际标签之间的准确率print('预测结果与实际标签之间的准确率:\n', accuracy_score(y_test, y_predict))
随机森林(Random Forest)中的树被称为“弱分类器”(或“弱学习器”),主要是因为以下几个原因:
  1. 单棵树的性能有限

  • 随机森林中的每棵决策树通常生长得较浅(例如,限制最大深度或叶子节点最小样本数),或者通过其他方式(如随机特征选择)主动抑制其复杂度

  • 单棵树容易受到训练数据中的噪声或局部特征的影响,导致其泛化能力较弱(高方差或高偏差)。如果完全不加限制,单棵树可能过拟合,但随机森林通过限制树的复杂度,刻意保持其“弱”的特性。

  1. “弱”是集成方法的设计需求

  • 随机森林属于集成学习(Ensemble Learning)方法,其核心思想是通过结合多个弱分类器的预测结果来提升整体性能。如果单棵树已经很强(例如深度很深、完全拟合训练数据),集成后的模型反而可能因多样性不足而效果不佳。

  • 弱分类器的多样性比单棵树的强度更重要。通过让每棵树只学习数据的一部分特征或样本(通过特征随机性和Bootstrap采样),森林中的树可以互补错误,从而提升整体鲁棒性。

  1. 与Boosting的对比

  • 在Boosting(如AdaBoost、GBDT)中,弱分类器是显式要求的(例如单层决策树),因为Boosting通过迭代修正错误逐步提升模型性能。

  • 随机森林虽然不严格要求单棵树必须“极弱”,但通过Bagging和随机特征选择,本质上也是利用弱分类器的集体决策来降低方差(Variance),避免过拟合。

  1. 随机性的引入

  • 每棵树的训练数据是通过Bootstrap采样(有放回抽样)得到的,且分裂节点时仅考虑特征的随机子集。这种随机性进一步削弱了单棵树的独立性,使其更依赖集体决策。

为什么“弱”反而更好?

  • 降低过拟合风险:强分类器容易记住训练数据的细节,而弱分类器的组合可以平滑噪声。

  • 提高多样性:弱分类器之间的差异性(Diversity)是集成方法成功的关键。

  • 效率与泛化的平衡:浅树训练速度快,适合大规模数据,同时通过集成保持泛化能力。

http://www.dtcms.com/a/345170.html

相关文章:

  • 华为网路设备学习-29(BGP协议 四)路由策略-实验
  • 虚拟线程(高版本JDK)
  • 在 SymPy 中代入抽象函数的数值和导数值
  • JSP入门详解
  • Leetcode—1148. 文章浏览 I【简单】
  • AI重构消费决策:从AI试衣间降退货率到预判式复购,购物效率提升新逻辑
  • FROM Buggy_Code SELECT Liability_Causes # 民法典之故障代码责任溯源
  • Prompt工程完全指南:从基础结构到AI时代的上下文革命
  • 意识上传与智能增强:脑机接口与AI共塑的人类未来图景
  • 如何用批量钱包实现链上“身份伪装”?
  • PADS Logic软件及相关工具
  • s3cmd使用方法
  • 常见整流电路总结
  • 当我们想用GPU(nlp模型篇)
  • MySQL诊断系列(6/6):系统监控——实时掌握数据库“生命体征”
  • 【jar包启动,每天生成一个日志文件】
  • 本地 Graph-RAG(图 + RAG) 部署与使用落地方案
  • Unreal Engine AActor
  • 机器学习--线性回归
  • K8S - NetworkPolicy的使用
  • Spring发布订阅模式详解
  • 国产CANFD芯片技术特性与应用前景综述:以ASM1042系列为例
  • 宝可梦:去吧皮卡丘/去吧伊布 PC/手机双端(Pokemon-Lets Go Pikachu)免安装中文版
  • MeterSphere接口自动化共享cookie
  • 开发避坑指南(33):Mybatisplus QueryWrapper 自定义查询语句防注入解决方案
  • 【Cmake】Cmake概览
  • C2039 “unref“:不是“osgEarth::Symbology::Style”的成员 问题分析及解决方法
  • 【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机驱动
  • 育教大师广州专插本培训机构指南
  • STM32项目分享:基于STM32的焊接工位智能排烟系统