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

目录

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

1. 作者介绍

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

孙思伟,男,西安工程大学电子信息学院,23级研究生
研究方向:深度强化学习与人工智能
电子邮件: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.rhkb.cn/news/339662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文精读--Swin Transformer

想让ViT像CNN一样分成几个block,做层级式的特征提取,从而使提取出的特征有多尺度的概念 Abstract This paper presents a new vision Transformer, called Swin Transformer, that capably serves as a general-purpose backbone for computer vision. …

对人脸图像进行性别和年龄的判断

判断性别和年龄 导入必要的库加载预训练的人脸检测模型加载预训练的性别和年龄识别模型定义性别和年龄的标签列表创建Tkinter窗口:定义选择图片的函数:创建一个按钮,用于打开文件选择对话框定义显示图片的函数创建预测性别和年龄的函数创建预…

vue2 bug求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)

我的vue2项目出现了一个超级恶心的bug 过程: 1 操作流程:页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 2 结果:返回页面后页面没有刷新导致用户名还显示着,页面没有发生任何变化&a…

基于Pytorch框架的深度学习ShufflenetV2神经网络十七种猴子动物识别分类系统源码

第一步:准备数据 17种猴子动物数据: self.class_indict ["白头卷尾猴", "弥猴", "山魈", "松鼠猴", "叶猴", "银色绒猴", "印度乌叶猴", "疣猴", "侏绒"…

​研学活动方案模板,详细制作步骤!​

研学活动,作为教育实践的重要组成部分,为我们的学生提供了一个广阔的学习平台。在这个平台上,学生们能够将书本上的知识与现实世界紧密联系起来,通过实践探索来培养能力。但对于咱们老师来说,学校组织研学活动要考虑到…

“雪糕刺客”爆改“红薯刺客”,钟薛高给了消费品牌哪些启示?

夏日袭来,一支价格高昂却让人眼前一亮的雪糕,曾一度成为市场热议的焦点。然而,随着消费者对性价比的日益关注,曾经的“雪糕刺客”钟薛高,其创始人林盛近期以直播带货红薯开启他的还债之路,高打情怀“直播自…

STM32学习和实践笔记(33):待机唤醒实验

1.STM32待机模式介绍 很多单片机具有低功耗模式,比如MSP430、STM8L等,我们的STM32也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。这…

java配置文件解析yml/xml/properties文件

XML 以mybatis.xml:获取所有Environment中的数据库并连接session为例 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder; impo…

springboot基本使用十一(自定义全局异常处理器)

例如:我们都知道在java中被除数不能为0,为0就会报by zero错误 RestController public class TestController {GetMapping("/ex")public Integer ex(){int a 10 / 0;return a;}} 打印结果: 如何将这个异常进行处理? 创…

2024年06月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名(每月更新) 2024年06月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

跨越百亿营收的今世缘,全国化进程仍挑战重重?

当前,白酒市场正在经历一场深度调整,随着存量时代到来,白酒品牌地位的更替和竞争格局的重构已经展开。这一背景下,今世缘等地方性酒企也正在凭借对区域市场的深耕,展现出较快的成长速度,并希望能借此占领市…

AI视频下载:ChatGPT数据科学与机器学习课程

ChatGPT是一个基于OpenAI开发的GPT-3.5架构的AI对话代理。作为一种语言模型,ChatGPT能够理解并对各种主题生成类似人类的响应,使其成为聊天机器人开发、客户服务和内容创作的多用途工具。 此外,ChatGPT被设计为高度可扩展和可定制的,允许开发人员对其响应进行微调并将其集成到…

C/C++动态内存管理(new与delete)

目录 1. 一图搞懂C/C的内存分布 2. 存在动态内存分配的原因 3. C语言中的动态内存管理方式 4. C内存管理方式 4.1 new/delete操作内置类型 4.2 new/delete操作自定义类型 1. 一图搞懂C/C的内存分布 说明: 1. 栈区(stack):在…

ERV-Net:一种用于脑肿瘤分割的高效3D残差神经网络| 文献速递-深度学习肿瘤自动分割

Title 题目 ERV-Net: An efficient 3D residual neural network for brain tumor segmentation ERV-Net:一种用于脑肿瘤分割的高效3D残差神经网络 01 文献速递介绍 脑肿瘤在全球范围内是致命的,与其他类型的肿瘤相比。胶质瘤是最具侵略性的脑肿瘤类…

【机器学习】深入探索机器学习:利用机器学习探索股票价格预测的新路径

❀机器学习 📒1. 引言📒2. 多种机器学习算法的应用📒3. 机器学习在股票价格预测中的应用现状🎉数据收集与预处理🎉模型构建与训练🌈模型评估与预测🌞模型评估🌙模型预测⭐注意事项 &…

教你本地化部署与使用一款免费的LLM应用工程化平台

随着LLM应用的不断成熟,特别是在B端企业场景中的逐渐落地,其不再停留在原型与验证阶段,将面临着更高的工程化要求,无论是输出的稳定性、性能、以及成本控制等,都需要实现真正的“生产就绪”;但由于大量的应…

剖析【C++】——类和对象(下篇)——超详解——小白篇

目录 1.再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 关键字 2. Static成员 2.1 概念 2.2 特性 3. 友元 3.1 友元函数 3.2 友元类 3.3总结: 4. 内部类 1.概念 2.特性 示例代码: 代码分析 3.总结 5.再次理解类和对象 …

【Java面试】七、SpringMvc的执行流程、SpringBoot自动装配原理

文章目录 1、SpringMVC的执行流程1.1 视图阶段1.2 前后端分离阶段 2、SpringBoot自动配置原理3、框架常用的注解3.1 Spring的注解3.2 SpringMvc的注解3.3 SpringBoot的注解 4、面试 1、SpringMVC的执行流程 1.1 视图阶段 旧项目中,未前后端分离时,用到…

《mysql轻松学习·二》

1、创建数据表 contacts:数据表名 auto_increament:自动增长 primary key:主键 engineInnoDB default charsetutf8; 默认字符集utf8,不写就默认utf8 对数据表的操作: alter table 数据表名 add sex varchar(1); //添…

【C语言】字符串左旋(三种方法)

(方法3只给出思路参考) 问题 描述: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 分析 我们先来理解一下,什么叫“左旋”?其实是这…