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

【数学建模学习笔记】机器学习回归:随机森林回归

随机森林回归入门:从理论到实践

随机森林回归是一种强大的机器学习方法,特别适合处理回归问题。本文将为初学者详细解释随机森林回归的基本概念,并通过房价预测的实例带你一步步实现整个流程。

什么是随机森林回归?

随机森林回归是一种集成学习方法,它的核心思想是 "三个臭皮匠赛过诸葛亮"。简单来说,就是创建多个决策树,让它们各自进行预测,然后取所有树预测结果的平均值作为最终预测。

这种方法有两个主要优势:

  • 减少过拟合风险:通过多个树的平均,降低了单一模型的方差
  • 提高预测准确性:综合多个模型的智慧,通常比单个决策树表现更好

随机森林回归的工作流程

  1. 从原始数据中随机抽样,创建多个不同的训练集
  2. 为每个训练集构建一棵决策树
  3. 在构建每棵树时,随机选择部分特征进行分裂
  4. 所有树都完成预测后,取平均值作为最终结果

实战:用随机森林预测房价

让我们通过一个实际例子来学习随机森林回归,我们将使用房价数据集进行预测。

第一步:导入必要的库

首先,我们需要导入 Python 数据分析和机器学习所需的库:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

第二步:加载并查看数据

我们使用一个包含各种房屋特征和对应房价的数据集:

# 读取数据
df = pd.read_excel('https://labfile.oss.aliyuncs.com/courses/40611/%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE_%E6%88%BF%E4%BB%B7%E9%A2%84%E6%B5%8B%EF%BC%88mini%E7%89%88%E6%95%B0%E6%8D%AE%EF%BC%89.xlsx')# 查看前5行数据
print(df.head())

数据集中包含了房价、户型、电梯、面积等 26 个特征,我们的目标是根据这些特征预测房价。

第三步:数据预处理

现实世界的数据往往不完美,需要进行预处理才能用于建模:

1. 查看数据分布
# 查看户型和电梯的值分布
print("户型分布:")
print(df['户型'].value_counts())
print("\n电梯分布:")
print(df['电梯'].value_counts())

输出结果:

户型分布:
高端装修    642
简单装修    319
精装修      38
Name: count, dtype: int64电梯分布:
无    517
有    476
Name: count, dtype: int64
2. 处理缺失值
# 检查缺失值
print("缺失值数量:")
print(df.isnull().sum())# 移除含有缺失值的行
df = df.dropna()
3. 编码分类特征

机器学习模型通常需要数值型输入,我们需要将分类特征转换为数字:

# 编码定类特征
df['户型'] = df['户型'].map({"高端装修": 3,"简单装修": 1,"精装修": 2
})df['电梯'] = df['电梯'].map({"无": 0,"有": 1
})
4. 重命名列(可选)

为了方便后续处理,可以将中文列名改为英文:

column_mapping = {'户型': 'Type','电梯': 'Elevator','面积': 'Area','房龄': 'Age','装修程度': 'Decoration','容积率': 'Plot_Ratio','绿化率': 'Greening_Rate','房价': 'House_Price'
}
df.rename(columns=column_mapping, inplace=True)

第四步:准备训练数据

1. 分离特征和目标变量
# 选择特征和目标变量
X = df.loc[:, 'Type':'Greening_Rate']  # 特征
y = df['House_Price']  # 目标变量(房价)
2. 数据标准化

标准化可以让不同量级的特征对模型产生同等影响:

# 标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3. 划分训练集和测试集
# 划分训练集(80%)和测试集(20%)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42
)

第五步:构建和训练随机森林回归模型

# 创建随机森林回归器,包含100棵树
regressor = RandomForestRegressor(random_state=42, n_estimators=100)# 训练模型
regressor.fit(X_train, y_train)

n_estimators=100 表示我们要创建 100 棵决策树,random_state=42 确保结果可重现。

第六步:模型预测与评估

# 使用模型进行预测
y_pred = regressor.predict(X_test)# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print(f'均方误差(MSE): {mse:.2f}')
print(f'R²得分: {r2:.4f}')

输出结果:

均方误差(MSE): 91.73
R²得分: 0.8577
  • 均方误差 (MSE):衡量预测值与实际值之间的平均平方差,值越小越好
  • R² 得分:衡量模型解释数据变异的能力,范围在 0 到 1 之间,越接近 1 表示模型效果越好

我们的 R² 得分为 0.8577,说明模型能解释 85.77% 的房价变异,效果相当不错。

第七步:特征重要性分析

随机森林的一个重要优势是可以评估每个特征对预测的重要性:

# 获取特征重要性
feature_importance = regressor.feature_importances_# 可视化特征重要性
plt.figure(figsize=(12, 8))
plt.barh(X.columns, feature_importance, color='skyblue')
plt.xlabel('特征重要性')
plt.ylabel('特征')
plt.title('各特征对房价的重要性')
plt.show()

从结果可以看出,面积 (Area) 和容积率 (Plot_Ratio) 对房价的影响最大,这符合我们的常识 - 房子越大、容积率越低(居住越舒适),价格通常越高。

总结

通过本文,我们学习了:

  1. 随机森林回归的基本概念和优势
  2. 完整的机器学习工作流程:
    • 数据加载与探索
    • 数据预处理(处理缺失值、编码分类特征)
    • 数据集划分
    • 模型训练与评估
    • 特征重要性分析

随机森林回归是一种简单易用但功能强大的算法,不需要太多的特征工程就能取得不错的效果,非常适合初学者入门。随着你对机器学习理解的深入,可以尝试调整模型参数(如树的数量、树的深度等)来进一步提高模型性能。


文章转载自:

http://Yd2xqt24.jyzxt.cn
http://zWeAswFW.jyzxt.cn
http://FzFEnE7X.jyzxt.cn
http://SFKnWdrm.jyzxt.cn
http://nx4wpGJv.jyzxt.cn
http://5CrkclSl.jyzxt.cn
http://UMi2L9sL.jyzxt.cn
http://yGBRLoKC.jyzxt.cn
http://CtzuUyG6.jyzxt.cn
http://yMTi7xfp.jyzxt.cn
http://TyNTs4JA.jyzxt.cn
http://tDYNrgcP.jyzxt.cn
http://tutjyP23.jyzxt.cn
http://22JRGiMw.jyzxt.cn
http://eJ6QXEoe.jyzxt.cn
http://gx5jETqK.jyzxt.cn
http://twXp2Yhx.jyzxt.cn
http://iqBYZ9rL.jyzxt.cn
http://wcpLMugH.jyzxt.cn
http://HbRcSTRt.jyzxt.cn
http://TOy5Imjy.jyzxt.cn
http://99TZg2id.jyzxt.cn
http://L5F9Q1ke.jyzxt.cn
http://OyHqwh3b.jyzxt.cn
http://b9GtL8HH.jyzxt.cn
http://0TvtSwXn.jyzxt.cn
http://Mi7K4VlQ.jyzxt.cn
http://CjXMyhbo.jyzxt.cn
http://zP1BLIQf.jyzxt.cn
http://xx2h9vdo.jyzxt.cn
http://www.dtcms.com/a/367467.html

相关文章:

  • UE4 UAT 的六大流程 build cook stage pacakge archive deploy 与UAT的参数
  • 具身智能多模态感知与场景理解:多模态3D场景理解
  • 3D 可视化数字孪生运维管理平台:构建 “虚实协同” 的智慧运维新范式
  • 解决前端文件下载时文件名自定义的完美方案
  • 第22节:性能监控与内存管理——构建高性能3D应用
  • 为什么ApiFox的分页查询的返回Vo的数据没有全部展示? 只展示了返回有数据的?没有数据的为什么不展示?
  • 数智先锋 | 重大活动零错误运行!Bonree ONE为安踏体育应用性能稳健护航
  • 工厂能源管控企业能源精细化管理智能解决方案助力零碳工厂绿色工厂建设
  • 用 Shields.io 定制 README 个性徽章
  • RAGFlow切分方法详解
  • 光伏人解放双手!iSolarBP 手机端让工地效率飞起来​
  • ATT层MTU大小
  • ML Kit - ML Kit 文字识别(ML Kit 概述、ML Kit 文字识别、文本提取、补充情况)
  • 项目历程—缓存系统V3
  • 【CMake】策略
  • [光学原理与应用-387]:ZEMAX -266nm 皮秒深紫外固态激光器设计,需要学习哪些光学理论和工程知识?
  • 【面试题】召回、排序哪个阶段最可能出问题?
  • 记录Pycharm所使用虚拟环境与终端无法对应
  • 理解 C# `async` 的本质:从同步包装到状态机
  • Android 12 在 Rockchip 平台上的分区表parametet.txt 自动生成机制解析
  • android View详解—View的刷新流程源码解析
  • 批量给文件夹添加文件v2【件批量复制工具】
  • 设计模式3 创建模式之Singleton模式
  • 【题解】洛谷 P4037 [JSOI2008] 魔兽地图 [树上背包]
  • 东土正创AI交通服务器再获北京市批量应用订单
  • Springboot集成Netty
  • 系统代理开启时,钉钉页面加载失败
  • 基于STM32的除臭杀菌等多功能智能健康鞋柜设计
  • 在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
  • 学习PaddlePaddle--环境配置-PyCharm + Conda​