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

【附Python源码】基于MLP的波士顿房价预测

【附Python源码】基于MLP的波士顿房价预测

房价预测作为机器学习领域的经典入门问题,其价值不仅在于算法本身,更在于完整建模流程的掌握。

本项目将基于Boston Housing数据集,详细介绍如何使用PyTorch构建一个多层神经网络回归模型,涵盖数据预处理、特征工程、模型设计、训练优化及可视化分析等关键环节。

数据集概述

Boston Housing数据集包含506条波士顿郊区的房屋记录,每条记录有13个特征属性和1个目标变量(房价中位数)。这些特征涵盖了影响房价的各类因素:

  • 地理位置类:纬度(LAT)、经度(LON)、到就业中心距离(DIS)
  • 房屋属性类:房间数(RM)、房龄(AGE)、住宅用地比例(ZN)
  • 社会环境类:”饭最率“(CRIM)、师生比例(PTRATIO)、低收入人群比例(LSTAT)
  • 基础设施类:公路可达性(RAD)、财产税率(TAX)、一氧化氮浓度(NOX)

目标变量MEDV表示该区域自住房屋的中位数价值,单位为千美元。该数据集的特点在于特征维度适中、样本量较小,适合作为回归问题的基准测试。

数据预处理流程

缺失值处理

原始数据中存在部分缺失值,主要集中在几个特征列。考虑到房价数据的分布特性,采用中位数填充策略:

df=df.fillna(df.median(numeric_only=True))

中位数填充的优势在于对异常值不敏感,能够保持数据的整体分布特征,避免均值填充可能带来的偏差。

特征标准化

神经网络对输入特征的尺度较为敏感,因此需要进行标准化处理。采用StandardScaler对特征进行Z-score标准化:

scaler=StandardScaler()X_train=scaler.fit_transform(X_train)X_test=scaler.transform(X_test)

标准化的核心思想是将特征转换为均值为0、标准差为1的分布,这有助于加速梯度下降的收敛过程,同时避免某些大尺度特征主导模型训练。

数据加载器构建

PyTorch的DataLoader提供了高效的数据迭代机制。设置batch_size为256,在训练时启用shuffle以打乱数据顺序,测试时则保持顺序一致:

train_loader=DataLoader(train_dataset,batch_size=256,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=256,shuffle=False)

探索性数据分析

在模型训练之前,对数据进行可视化分析有助于理解特征分布及相互关系。

特征分布直方图

通过绘制各特征的分布直方图,可以直观了解数据的偏态、峰度及异常值情况。例如,犯罪率(CRIM)呈现明显的左偏分布,大部分区域的犯罪率较低,少数区域 crime rate 较高;而房间数(RM)则近似正态分布,集中在6-7个房间。

相关性热力图

计算特征间的Pearson相关系数并绘制热力图,可识别与目标变量强相关的特征。

模型架构设计

网络结构设计

针对该回归问题,设计了一个四层全连接网络:

输入层(13) → 隐藏层1(128) → 隐藏层2(64) → 隐藏层3(32) → 输出层(1)

网络深度和宽度的选择基于以下考量:

  • 输入维度为13,第一层扩展至128维以提取丰富的特征表示
  • 后续层逐级降维,形成特征金字塔结构
  • 最终输出层为单节点,直接输出预测值

正则化策略

为防止过拟合,在网络中引入了两类正则化技术:

Batch Normalization:在每个隐藏层后添加批归一化,通过对每层输入进行标准化,缓解内部协变量偏移问题,加速收敛并允许使用更大的学习率。

Dropout:以0.2的概率随机丢弃神经元,强制网络学习冗余表示,增强泛化能力。

激活函数选择

隐藏层采用ReLU激活函数,其优势在于:

  • 计算简单,梯度不会饱和
  • 引入非线性,增强模型表达能力
  • 稀疏激活特性,降低计算开销

输出层不使用激活函数,直接输出实数值,符合回归任务的需求。

训练策略与优化

损失函数

选用均方误差(MSE)作为损失函数:

criterion=nn.MSELoss()

MSE对大误差赋予更高惩罚,适合房价预测这类需要控制预测偏差的场景。

优化器配置

采用Adam优化器,结合其自适应学习率特性:

optimizer=optim.Adam(model.parameters(),lr=0.001,weight_decay=1e-5)

weight_decay参数引入L2正则化,进一步抑制过拟合。

学习率调度

引入ReduceLROnPlateau调度器,当验证损失连续10个epoch未下降时,学习率减半:

scheduler=optim.lr_scheduler.ReduceLROnPlateau(optimizer,mode='min',factor=0.5,patience=10)

这种自适应调整策略有助于模型在训练后期精细优化。

早停机制

设置早停耐心值为30,若验证损失连续30个epoch未改善,则终止训练并恢复最佳模型权重:

ifavg_val_loss<best_loss:best_loss=avg_val_loss patience_counter=0torch.save(model.state_dict(),MODEL_SAVE_PATH)

早停机制有效防止过拟合,同时节省计算资源。

模型评估与可视化

评估指标

采用以下指标全面评估模型性能:

  • MSE(均方误差):反映预测值与真实值的平均平方偏差
  • RMSE(均方根误差):与目标变量同量纲,便于解释
  • MAE(平均绝对误差):对异常值更鲁棒
  • R²分数:衡量模型解释数据变异的能力,越接近1表示拟合越好

预测结果可视化

真实值vs预测值散点图:理想情况下,点应分布在对角线附近。图中添加R²分数标注,直观展示模型拟合程度。

残差分析图:包含残差分布直方图和残差vs预测值散点图。若模型假设成立,残差应近似服从均值为0的正态分布,且与预测值无明显相关性。

关键技术点总结

  1. 数据预处理的重要性:缺失值填充和特征标准化是神经网络训练的基础,直接影响模型收敛速度和最终性能。

  2. 网络设计的平衡:过浅的网络难以捕捉复杂模式,过深则容易过拟合。本项目的四层结构在表达能力和泛化性能间取得平衡。

  3. 正则化的必要性:BatchNorm和Dropout的组合使用显著提升了模型在测试集上的表现,是防止过拟合的有效手段。

  4. 训练策略的精细化:学习率调度和早停机制的加入,使训练过程更加智能,避免了人工调参的主观性。

  5. 可视化的价值:通过多种图表分析数据和模型行为,能够快速定位问题并指导优化方向。


当前模型可作为基线,进一步改进的方向包括:

  • 特征工程:引入特征交叉(如RM×LSTAT)、多项式特征,捕捉非线性关系
  • 集成学习:训练多个模型并取平均,降低预测方差
  • 超参数优化:采用网格搜索或贝叶斯优化寻找最优超参数组合
  • 更复杂的网络结构:尝试残差连接(ResNet)或注意力机制

⚠️完整代码已开源,欢迎交流探讨。

http://www.jsqmd.com/news/723730/

相关文章:

  • 性价比高的专用汽车汇总,程力专用汽车可靠吗及行业口碑揭秘 - 工业设备
  • 合规消费增值:从市场痛点到落地玩法,商家、用户、平台都能赢
  • 重载型工业安全地毯,机械作业安全防护优选
  • LDR6500U:Type‑C PD 取电 “一芯通吃”,赋能全场景高效供电
  • 天线测量技术:频谱与网络分析仪应用指南
  • 全志D1s RISC-V开发板:十美元Linux方案解析
  • 记一次 OpenClaw Token 费用优化:从日均 50 美元到 12 美元的技术拆解
  • CBCX平台:多市场接入与跨境交易适配
  • Keithley 2600B系列SMU仪器:高精度电子测试解决方案
  • 用Typer从零搭一个AI命令行工具:我踩过的6个坑
  • 你的数字足迹守护者:为每个应用打造专属位置身份
  • 如何使用 RS® ZNL 设置并执行网络分析仪测量
  • 全网最详细的postman接口测试教程,一篇文章满足你
  • RTX 30/40系显卡实测:用OpenCV CUDA加速图像处理,效率提升多少?
  • 3步解决视频卡顿问题:Flowframes AI插帧实战指南
  • 2026大批量礼盒定制技术干货:从合规到成本的全链路管控 - 优质品牌商家
  • 同态加密密文乘法优化与硬件架构设计
  • vector 核心接口和模拟实现
  • Windows 系统上手动安装 Ubuntu 22.04 到 WSL
  • Python定时任务框架横评:APScheduler vs Celery vs Dramatiq
  • Flutter物流应用的版本控制与依赖管理
  • c++14概述
  • 打造纯净供应链:Ledger官方授权杜绝一切中间风险环节
  • 使用 20 年后告别!Emacs 替代工具开发完成,新工具优势大
  • LLaMA-Factory结合DPO实现偏好对齐(RLHF简化方案)-方案选型对比
  • Fortran数组运算与循环优化实操案例详解
  • 从Django REST framework看NotImplementedError:打造更健壮的API视图与序列化器
  • 模型推理速度翻倍?深入浅出聊聊YOLO里的‘RepConv’重参数化黑科技
  • AI驱动知识管理市场爆发:2026年企业数字化转型的“必答题“
  • 2026金三银四,Java竞争依旧激烈!