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

目录

  • 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)原理小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/678318.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

个人笔记-随意记录

常见问题? 1.linux重启服务 端口被占用如何解决? 查看某个端口被占用的进程 netstat -tulnp | grep :23454 强制杀死进程 kill -9 1776 重启服务即可

JDK 22 新特性

JDK各个版本特性查看地址:https://openjdk.org/projects/jdk/17/(修改后面数字即可,目前最新的是23) JDK 22 于 2024 年 3 月 19 日全面发布。 一,开发计划 2023/12/07Rampdown Phase One (fork from main line) 第…

10款你一定不知道的实用工具!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1. S激活工具——KMS激活工具 HEU_KMS_Activator,一款KMS激活工具,适用于Windows、Office及VL版本,无需联网…

MySql学习(一)——MySQL概述之MySQL的启动

文章目录 一、MySQl概述1.1 启动MySQL1.2 客户端连接1.3 关系型数据库1.4 总结 一、MySQl概述 数据库:存储数据的仓库,数据是有组织的进行存储,简称为(DB)数据库管理系统:操纵和管理数据库的大型软件&…

模拟散列表-java

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 一、模拟散列表 二、算法思路 1.散列表 2.拉链法 3.开放寻址法 三、代码如下 1.拉链法代码如下: 2.开放寻址法代码如下: 3.读入数据 3.代码运行结…

scipy.io.loadmat加载.mat文件,出现KeyError: ‘xxx‘

源代码: input_image loadmat(rC:\Users\admin\Downloads\Indian_Pines\SVM/aa.mat)[aa] #影像图 错误显示: 解决方法: 因为loadmat函数读取出来的高光谱数据是dict格式的所以需要定位才能进行后续操作,定位通常是通过列名&a…

GraphQL(4):GraphQL clients访问接口

下面演示在GraphQL clients访问GraphQL 接口 1 修改baseType.js 添加可供用户访问的静态资源路径 代码如下: const express require(express); const {buildSchema} require(graphql); const grapqlHTTP require(express-graphql).graphqlHTTP; // 定义schema…

深度学习500问——Chapter10:强化学习(1)

文章目录 10.1 强化学习的主要特点 10.1.1 定义 10.2 强化学习应用实例 10.3 强化学习和监督式学习、非监督式学习的区别 10.3.1 强化学习和监督式学习的区别 10.3.2 强化学习和非监督式学习的区别 10.1 强化学习的主要特点 其他许多机器学习算法中学习器都是学得怎样做&#…

0基础学习区块链技术——推演猜想

在《0基础学习区块链技术——入门》一文中,我们结合可视化工具,直观地感受了下区块的结构,以及链式的前后关系。 本文我们将抛弃之前的知识,从0开始思考和推演,区块链技术可能是如何构思出来的。 去中心 在一般的思维…

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解(源码级讲解,耐心看完)

SpringSecurity6从入门到实战之SpringSecurity整合自动装配详解 这里我先引出问题然后再来一步步进行剖析,SpringSecurity到底是如何实现引入依赖后所有请求都需要进行认证并且会弹出login登录表单页面. 接下来会对SpringBoot的自动装配进行详解,SpringSecurity也是通过自动装配…

【渗透测试】DC-1靶机实战(上)漏洞扫描获取反弹shell

目录 一、范围界定 二、信息收集 三、目标识别 1)主机发现 2)端口扫描 四. 服务枚举 1)网站首页 2)Web指纹识别 3)nikto报告 4)robots.txt 5)UPGRADE.txt 五. 漏洞映射 1&#xff…

【项目管理常见问题大揭秘】每个管理者都要Get的「五维思维」~

走上管理岗☸要懂得五维思维 💼自我管理——做自己的CEO 严于律己:严格要求自己,注重个人品牌建设 宽以待人:接纳不同观点,提升团队凝聚力 尊重事实:鼓励团队成员发挥优势,避免负面评价 坚守诚…

Mysql基础教程(15):别名

MySQL 别名 在本文中,我们讨论了 MySQL 中的列别名,表别名和派生表别名,以及使用别名来简化 SQL 和提高 SQL 的可读性。 如果在一个 SQL 中涉及到多个表,我们需要使用 table_name.column_name 这样的方式来引用每个表的字段&…

《科技和产业》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《科技和产业》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊 问:《科技和产业》是什么级别的? 答:国家级。主管单位:中国科学技术协会 主办单位&…

猫毛过敏的克星!宠物空气净化器,铲屎官的终极武器~

现在很多人都喜欢养猫,但约有10%的人会对猫咪产生过敏反应。常见的症状包括打喷嚏、流鼻涕,严重时甚至会呼吸困难。 过敏源依附在宠物的毛发和皮屑上,通过空气传播,遍布家中的各个角落,如地面、衣物和家具。这不仅增加…

Jenkins+Rancher2.7部署构建

在Jenkins中使用rancher插件时需要去查找工作负载地址 在Rancher2.7没有查看Api按钮了需要自己去查找 1.进入https://192.168.x.xx:6443/v3/projects/ 2.输入在rancher中要查找的的项目名称并点击deployment连接进入下一个页面 3.找到自己的deployment随便点一个进去 4.浏览…

【数据结构】树与二叉树——二叉树的概念

二叉树的概念 导读一、二叉树的定义及其主要特性1.1 二叉树的定义1.2 二叉树的主要特性 二、特殊的二叉树2.1 满二叉树2.2 完全二叉树2.3 二叉排序树2.4 平衡二叉树 三、二叉树的性质3.1 性质一3.2 性质二3.3 性质三3.4 性质四3.5 性质五 结语 导读 大家好,很高兴又…

MFC 使用sapi文字转换为语音

文章目录 添加头文件声明变量 添加头文件 声明变量 pSpVoice NULL; //默认构造函数中初始化为空 bool CChKBarSCCodeApp::InitSpVoice() {HRESULT hr ::CoInitialize(NULL); // COM初始化if (!SUCCEEDED(hr)){AfxMessageBox(_T("声音环境初始化失败!…

高中数学:解三角形-大题练习(第二问解题方法整理)

一、题型归纳 1、最值问题 例题1、例题2 2、恒等变换 例题3、例题4、例题5、例题6 3、图形问题 例题7、例题8 例题1 解析 第二小问 首先,正弦定理和余弦定理都可以解决这一题。下面我给出两种解法 1、余弦定理基本不等式 2、正弦定理辅助角公式 例题2 解析…

智能投顾:重塑金融理财市场,引领行业新潮流

一、引言 在数字化浪潮的推动下,金融行业正经历着前所未有的变革。其中,智能投顾作为金融科技的重要分支,以其高效、便捷和个性化的服务,逐渐成为金融理财市场的新宠。本文旨在探讨智能投顾如何引领金融理财新潮流,通过丰富的案例及解决方案,展示其独特的魅力和价值。 二…