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

机器学习算法--随机森林

🌲 随机森林是什么?

想象你是一个班主任,要预测某个学生期末考试能否及格。你有以下选择:

  1. 问1个老师:可能带有个人偏见(比如只看数学成绩)。

  2. 问10个老师:每个老师关注不同方面(数学、出勤、作业等),最后投票决定。

随机森林就是第二种方法

  • 每个老师 = 1棵决策树

  • 多个老师投票 = 多棵树的集体决策

  • 最终结果 = 票数最多的选项


📚 例子背景

假设你有100个学生的历史数据,包含以下特征:

  1. 每天学习时间(小时)

  2. 作业完成率(%)

  3. 课堂出勤率(%)

  4. 是否及格(标签:是/否)

现在要预测一个新学生(学习2小时,作业80%,出勤90%)能否及格。


🌟 随机森林原理

1. 核心思想

「三个臭皮匠,顶个诸葛亮」

  • 训练多棵不同的决策树(每棵树用随机部分数据和随机部分特征)。

  • 预测时,所有树投票,取多数结果

2. 关键步骤
  1. 随机抽数据:每棵树训练时,从100个学生中有放回地随机抽100人(可能重复)。

  2. 随机抽特征:每棵树分裂时,只随机用部分特征(比如只用「学习时间」和「出勤率」)。

  3. 独立训练:每棵树根据自己的数据和特征生成规则。

  4. 投票决策:所有树对新学生预测,票数多的胜出。

3. 为什么有效?
  • 减少过拟合:单棵树可能死记硬背数据,多棵树互相纠错。

  • 增强泛化能力:不同树关注不同特征,综合结果更稳健。


🛠️ 代码实现(Python)

用 scikit-learn 快速实现:

from sklearn.ensemble import RandomForestClassifier
import pandas as pd# 1. 准备数据(模拟数据)
data = {'学习时间': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1],'作业完成率': [50, 70, 90, 60, 80, 85, 40, 75, 95, 55],'出勤率': [60, 80, 90, 70, 85, 95, 50, 75, 100, 65],'是否及格': [0, 1, 1, 0, 1, 1, 0, 1, 1, 0]  # 0=不及格,1=及格
}
df = pd.DataFrame(data)# 2. 训练随机森林
X = df[['学习时间', '作业完成率', '出勤率']]
y = df['是否及格']
model = RandomForestClassifier(n_estimators=10, random_state=42)  # 10棵树
model.fit(X, y)# 3. 预测新学生
new_student = pd.DataFrame([[2, 80, 90]], columns=['学习时间', '作业完成率', '出勤率'])
pred = model.predict(new_student)
print("预测结果:", "及格" if pred[0] == 1 else "不及格")
 

输出

预测结果: 及格

🌍 关键细节

  1. 超参数选择

    • n_estimators:树的数量(通常10~100,越多效果越好但计算越慢)。

    • max_features:每棵树用的最大特征数(默认sqrt(总特征数))。

    • max_depth:每棵树的深度(控制过拟合)。

  2. 为什么比单棵决策树强?

    • 单棵树可能因为某个异常值判断错误,而随机森林多数投票能抵消这种错误。

  3. 特征重要性
    随机森林可以输出每个特征的贡献度:

python

复制

下载

print("特征重要性:", model.feature_importances_)
# 输出示例:[0.3, 0.5, 0.2] → 作业完成率最重要

🆚 对比决策树

维度决策树随机森林
结果稳定性容易受数据微小变化影响多棵树平均,结果稳定
过拟合风险高风险(可能长成大树)低风险(树之间互相制约)
计算速度慢(树越多越慢)

🎯 实际应用场景

  1. 医疗诊断:根据患者指标预测疾病。

  2. 金融风控:判断用户是否会违约。

  3. 推荐系统:预测用户喜欢的商品。


🤔 举个反例

如果所有树用的数据和特征完全一样,随机森林就退化成了决策树——所以随机性是关键!


总结:随机森林就是让多棵决策树投票,用集体智慧做出更准的预测。就像班级投票决定周末是否加课,比老师一人决定更公平! 🌳🗳️

http://www.xdnf.cn/news/707545.html

相关文章:

  • 13 接口自动化-框架封装之 csv 数据驱动封装和日志
  • SOC-ESP32S3部分:18-串口
  • Linux进程初识
  • 链表经典题目(力扣 easy)
  • 从汇编的角度接密C++函数重载,原来这么简单
  • 人工智能在智能零售中的创新应用与未来趋势
  • Unity Button 交互动画
  • 工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”
  • Vulhub靶场搭建(Ubuntu)
  • 基于matlab遗传算法和模拟退火算法求解三维装箱优化问题
  • 商用飞机电池市场:现状、挑战与未来展望
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.7 R语言解题
  • JS高级使用技巧
  • 查看已安装的cuDNN版本
  • 爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力
  • Linux 文件覆盖机制与实践:以 mv 命令为切入点
  • kali系统的安装及配置
  • Mysql数据库mycat部署与mha高可用实例解析
  • 低代码开发模式下的应用交付效率优化:拖拽式交互机制研究
  • Java大师成长计划之第34天:开源项目参与与贡献指南
  • java直接获取MyBatis将要执行的动态sql命令(不是拦截器方式)
  • 重新测试deepseek Jakarta EE 10编程能力
  • while循环
  • 内存泄漏可能有哪些原因导致
  • 酒店管理破局:AI 引领智能化转型
  • Onvif协议:IPC客户端开发-IPC相机控制(c语言版)
  • (一)视觉——工业相机(以海康威视为例)
  • 2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题
  • 论文略读: STREAMLINING REDUNDANT LAYERS TO COMPRESS LARGE LANGUAGE MODELS
  • Spring Security架构中过滤器的实现