当前位置: 首页 > 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. 推荐系统:预测用户喜欢的商品。


🤔 举个反例

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


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

相关文章:

  • 软考-系统架构设计师-第六章 系统工程基础知识
  • R3GAN利用配置好的Pytorch训练自己的数据集
  • EC800X QuecDuino开发板介绍
  • Unity中的JsonManager
  • vscode调试stm32,Cortex Debug的配置文件lanuch.json如何写,日志
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.5 R语言解题
  • RapidOCR集成PP-OCRv5_det mobile模型记录
  • Mysql数据库 索引,事务
  • Embedded IDE下载及调试
  • 【大模型面试每日一题】Day 31:LoRA微调方法中低秩矩阵的秩r如何选取?
  • kafka 常用知识点
  • rabbitmq AI复习
  • 微信小程序学习目录
  • ADQ36-2通道2.5G,4通道5G采样PXIE
  • uniapp开发企业微信小程序时 wx.qy.login 在uniapp中使用的时候,需要导包吗?
  • Mysql中索引B+树、最左前缀匹配
  • 5G RedCap是什么-与标准5G的区别及支持路由器推荐
  • .NET 7 AOT 使用及 .NET 与 Go 语言互操作详解
  • 在 RedHat 系统(RHEL 7/8/9)中安装 ​​pythonnet​​ 和 ​​.NET Core​​ 的完整指南
  • 如何轻松将 iPhone 备份到外部硬盘
  • 徐州市住房建设局网站首页/公司推广
  • 建站模版/企业网站建设推广
  • 网站建设 阿里/关键词优化公司排名
  • 网站建设书籍论文/竞价托管咨询微竞价
  • 买个域名自己做网站/青岛网站制作推广
  • 做任务赚钱网站源码/百度竞价怎么操作