news 2026/6/9 17:18:21

随机森林(初步学习)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
随机森林(初步学习)

随机森林是一种集成学习(Ensemble Learning)算法,核心思想是构建多个决策树,通过投票或平均的方式输出结果,以此降低单一决策树过拟合的风险,提升模型的泛化能力。

它在机器学习的分类、回归、特征重要性评估等任务中被广泛应用,是工业界和学术界最常用的算法之一。

一、核心原理:“随机” + “森林”

随机森林的 “随机” 体现在两个层面,“森林” 指由多棵决策树组成的集合:

  1. 样本随机(Bootstrap 抽样)

    • 从原始训练集中,通过有放回抽样的方式,为每一棵决策树生成一个独立的训练子集。
    • 这样做的目的是让每棵决策树的训练数据存在差异,避免所有树都学习到相同的特征模式,提升模型多样性。
    • 未被抽到的样本称为OOB(Out-of-Bag)样本,可用于无额外验证集的模型评估。
  2. 特征随机(随机子空间)

    • 在构建每一棵决策树的每个节点时,不是从所有特征中选择最优特征进行划分,而是随机选择一部分特征,再从这部分特征中选最优。
    • 例如总共有 100 个特征,每棵树的每个节点随机选 10 个特征来划分。
    • 这一步能进一步降低树与树之间的相关性,让森林的 “投票” 更有意义。
  3. 预测规则

    • 分类任务:所有决策树分别预测类别,最终结果由多数投票决定(得票最多的类别为最终预测)。
    • 回归任务:所有决策树分别预测数值,最终结果由所有树预测值的平均值决定。

二、优缺点

优点

  1. 泛化能力强:有效降低过拟合,相比单一决策树,在复杂数据集上表现更稳定。
  2. 对噪声不敏感:能处理含噪声的数据集,不易受异常值影响。
  3. 支持高维数据:无需特征工程(如降维)也能处理高维数据,同时可输出特征重要性,帮助筛选关键特征。
  4. 训练并行化:每棵树的训练相互独立,可利用多核 CPU 并行加速,训练效率高。

缺点

  1. 模型解释性差:决策树本身是 “白盒” 模型,但随机森林由多棵树组成,整体是 “黑盒”,难以直观解释预测逻辑。
  2. 对小样本数据集效果一般:样本量过小时,Bootstrap 抽样可能导致训练集多样性不足,模型性能下降。
  3. 内存占用较大:需要存储多棵决策树的结构,数据量大时内存消耗较高。

三、关键超参数(以 Pythonsklearn为例)

在使用sklearn.ensemble.RandomForestClassifier(分类)或RandomForestRegressor(回归)时,需调整以下核心超参数:

超参数作用调优建议
n_estimators决策树的数量通常越大效果越好,但达到一定阈值后性能趋于稳定;太大则会增加训练时间
max_depth每棵树的最大深度限制树的生长,防止过拟合;值太小会欠拟合,太大则过拟合
max_features每个节点随机选择的特征数分类任务默认sqrt(n_features),回归任务默认n_features;可手动调整为log2(n_features)或具体数值
min_samples_split节点分裂所需的最小样本数样本数过少时停止分裂,防止过拟合
min_samples_leaf叶节点所需的最小样本数叶节点样本数过少时合并,提升模型稳定性
bootstrap是否使用 Bootstrap 抽样默认True;若设为False,则所有树都用原始训练集训练
import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report # 1. 读取数据(假设表格已保存为csv) data = pd.read_csv("电网电信客户流失数据.csv") X = data.drop("流失状态", axis=1) y = data["流失状态"] # 2. 划分训练集/测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y # 保持标签分布 ) # 3. 初始化随机森林模型 rf = RandomForestClassifier( n_estimators=100, # 100棵树 max_depth=8, # 限制树深度防过拟合 max_features="sqrt", # 特征随机选择 n_jobs=-1, # 并行训练 random_state=42 ) # 4. 训练与预测 rf.fit(X_train, y_train) y_pred = rf.predict(X_test) # 5. 模型评估 print("准确率:", accuracy_score(y_test, y_pred)) print("分类报告:\n", classification_report(y_test, y_pred)) # 6. 查看关键流失特征 feature_importance = pd.DataFrame({ "特征": X.columns, "重要性": rf.feature_importances_ }).sort_values(by="重要性", ascending=False) print("影响流失的关键特征:\n", feature_importance.head(5))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 13:47:04

我的网络安全实战学习笔记:记录从零到熟练的每个关键步骤与工具

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

作者头像 李华
网站建设 2026/6/9 15:02:13

Langchain-Chatchat结合OCR技术处理扫描版PDF

Langchain-Chatchat 结合 OCR 技术处理扫描版 PDF 在企业知识管理日益智能化的今天,一个常见的难题浮出水面:大量历史文档以扫描图像的形式沉睡在档案库中。这些 PDF 文件看似清晰可读,实则对计算机而言是一片“黑盒”——没有文本层&#xf…

作者头像 李华
网站建设 2026/6/7 14:42:41

Langchain-Chatchat问答系统可解释性增强方法探索

Langchain-Chatchat问答系统可解释性增强方法探索 在企业知识管理日益复杂的今天,一个看似简单的问题——“年假是多少天?”——却可能牵出一连串的信任危机:员工不相信AI的回答是否准确,法务部门质疑其来源是否合规,I…

作者头像 李华
网站建设 2026/6/8 0:19:43

Langchain-Chatchat能否接入语音识别实现语音问答?

Langchain-Chatchat能否接入语音识别实现语音问答? 在企业知识管理日益智能化的今天,越来越多组织希望构建一个既能保障数据隐私、又能提供自然交互体验的本地化问答系统。Langchain-Chatchat 作为当前开源社区中“本地知识库 大语言模型”架构的代表作…

作者头像 李华
网站建设 2026/6/8 17:43:37

Langchain-Chatchat能否接入外部数据库作为知识源?

Langchain-Chatchat 能否接入外部数据库作为知识源? 在企业智能化转型的浪潮中,一个常见的痛点浮出水面:我们拥有海量的结构化数据——从 CRM 系统中的客户记录,到 ERP 中的订单流水,再到内部 Wiki 和产品手册。但这些…

作者头像 李华
网站建设 2026/6/5 15:14:14

西双版纳25℃过年?避寒首选曝光

周末去开展短途旅行的时候,不必为攻略而犯愁,有6座高铁可以直接到达的城市,这里面包含着从古城的烟火韵味,到山城那种充满奇幻色彩的多元风情,并且初冬的6个天花板去处,还以反向出游的静谧,开启…

作者头像 李华