基于梯度提升树回归模型的房地产价格估计

2024-06-06 13:12

本文主要是介绍基于梯度提升树回归模型的房地产价格估计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. 作者介绍
  • 2. 梯度提升树回归算法介绍
    • 2.1 算法原理
    • 2.2 算法讲解与分析
  • 3. 实验过程
    • 3.1 数据集介绍
    • 3.2 代码介绍
    • 3.3 完整代码实现
    • 3.4 测试结果
  • 参考文献

1. 作者介绍

雷强,男,西安工程大学电子信息学院,2023级研究生
研究方向:机器视觉与人工智能
电子邮件:3160698422@qq.com

孙思伟,男,西安工程大学电子信息学院,2023级研究生
研究方向:深度强化学习与人工智能
电子邮件:sunsiwei0109@163.com

2. 梯度提升树回归算法介绍

2.1 算法原理

梯度提升树回归算法的原理是通过迭代地训练多棵决策树,每棵树基于前一棵树的残差进行学习,以最小化预测误差,并将它们的预测结果进行加权融合,从而提高对连续变量的预测精度。
当使用梯度提升树回归算法(Gradient Boosting Decision Tree, GBDT)来估计房地产价格时,原理是通过迭代地训练多棵决策树模型,并将它们的预测结果进行加权融合。在每一轮迭代中,都会基于前一轮模型对房地产价格的预测残差来训练一棵新的决策树,这个残差表示了真实价格与当前模型预测价格之间的差异。通过这种方式,GBDT能够逐步减小预测误差,提升对房地产价格的预测准确性。这个过程不断重复,直至达到预设的迭代次数或模型性能提升不再显著,最终得到一个强大的预测模型,能够有效地估计房地产价格。

2.2 算法讲解与分析

在这里插入图片描述
在这里插入图片描述

3. 实验过程

3.1 数据集介绍

数据集来源于UCI机器学习存储库。这个存储库包含了从各种领域收集的真实世界和模拟生成的数据集,用于支持机器学习算法的开发、测试、评估和比较。选取台湾新北市新店区房地产数据进行房地产价格估计。
为了使估计结果更准确,这里使用一个包含交易日期、房龄、到最近捷运站的距离、便利店的数量、经度、维度、多个特征和对应房屋销售价格的数据集。这些数据集会包含大量的样本和多个特征,以便机器学习算法能够学习到房屋价格与特征之间的复杂关系
在这里插入图片描述
根据房地产数据表,选取以下6个特征:
X1交易日期(时间)
X2房龄(年)
X3到最近捷运站的距离(米 )
X4便利店数量(个)
X5经度(度)
X6维度(度)
Y商品房平均销售价格(万元/平方米)

3.2 代码介绍

先查看基本数据分布:
在这里插入图片描述
划分数据集:
在这里插入图片描述
在这里插入图片描述
得到特征重要性:
在这里插入图片描述
构建梯度回归树模型预测房价:
在这里插入图片描述
对模型进行评估:
在这里插入图片描述

3.3 完整代码实现

import pandas as pd  
import numpy as np  
from sklearn.ensemble import GradientBoostingRegressor  
from sklearn.metrics import mean_squared_error, mean_absolute_error  
import matplotlib.pyplot as plt  
from sklearn.model_selection import train_test_split  # 读取数据数据,查看数据基本分布 
house = pd.read_csv('D:/AAD/datads.csv', index_col=0, encoding='gb2312')  
print(house.shape)  
print(house.describe())  # 清理列名  
house.columns = [col.strip() for col in house.columns]  # 定义特征和标签  
features_tree = ['X1', 'X2', 'X3', 'X4', 'X5', 'X6']  
target = 'Y'  # 检查特征是否存在于数据集中  
if not all(feature in house.columns for feature in features_tree):  print("以下列名在 DataFrame 中不存在:", set(features_tree) - set(house.columns))  
else:  # 划分数据集为训练集和测试集  house_train, house_test = train_test_split(house, test_size=0.3, random_state=0)  print('训练集描述性统计:')  print(house_train[features_tree + [target]].describe().round(2))  print('测试集描述性统计:')  print(house_test[features_tree + [target]].describe().round(2))  # 提取特征和标签  X_train = house_train[features_tree]  y_train = house_train[target]  X_test = house_test[features_tree]  y_test = house_test[target]  # 构建梯度提升树回归模型预测房价gbr = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=0)  gbr.fit(X_train, y_train)  # 在训练集和测试集上进行预测  y_gbr_train = gbr.predict(X_train)  y_gbr_test = gbr.predict(X_test)  # 评估模型在测试集上的性能  mse_test = mean_squared_error(y_test, y_gbr_test)  mae_test = mean_absolute_error(y_test, y_gbr_test)  print(f"测试集均方误差: {mse_test:.2f}")  print(f"测试集平均绝对误差: {mae_test:.2f}")  # 得到特征重要性  plt.barh(range(len(features_tree)), gbr.feature_importances_, tick_label=features_tree)  plt.xlabel('Feature Importance')  plt.ylabel('Feature')  plt.title('Feature Importances')  plt.show()  # 使用训练好的模型对原始数据集进行预测data_pre = pd.read_csv('D:/AAD/datads.csv', index_col=0, encoding='gb2312')  data_pre.columns = [col.strip() for col in data_pre.columns]  gbr_pre = gbr.predict(data_pre[features_tree])  # 创建结果DataFrame  house_result_reg = pd.DataFrame()  house_result_reg[u'梯度提升树回归预测'] = gbr_pre  house_result_reg[u'真实值'] = data_pre[target]  # 注意:这里的真实值可能包含训练集数据  # 打印结果DataFrame的前几行  print(house_result_reg.head())  # 保存预测结果到CSV文件  house_result_reg.to_csv('D:/AAD/datads_predictions_.csv', encoding='gb2312')

3.4 测试结果

在这里插入图片描述

参考文献

[1]用python构建线性回归和决策树模型实现房价预测
[2]基于梯度提升树实现波士顿房价预测
[3]梯度提升树(GBDT)原理小结

这篇关于基于梯度提升树回归模型的房地产价格估计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036202

相关文章

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结