【机器学习 | 基于Lasso回归和随机森林的上海链家二手房房价预测】

文章目录

  • 🏳️‍🌈 1. 导入模块
  • 🏳️‍🌈 2. Pandas数据处理
    • 2.1 读取数据
    • 2.2 查看数据信息
    • 2.3 去除重复数据
    • 2.4 去除缺失数据
    • 2.5 面积、价格、单价、楼层、建筑时间数据提取
    • 2.6 朝向数据处理
  • 🏳️‍🌈 3. 特征分析
    • 3.1 二手房面积分析
    • 3.2 二手房建筑时间分析
    • 3.3 二手房楼层分析
    • 3.4 二手房价格分析
  • 🏳️‍🌈 4. 模型分析
    • 4.1 Lasso回归
    • 4.2 随机森林
    • 4.3 总结
  • 🏳️‍🌈 5. 可视化项目源码+数据

大家好,我是 👉 【Python当打之年(点击跳转)】

本期将利用Lasso回归和随机森林模型对上海链家二手房数据进行分析与预测 看看哪些特征对上海二手房房价影响比较大、不同算法模型对房价预测准确度如何等,希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

涉及到的库:

  • Pandas — 数据处理
  • Matplotlib/Seaborn — 数据可视化
  • Sklearn — 机器学习

🏳️‍🌈 1. 导入模块

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split

🏳️‍🌈 2. Pandas数据处理

2.1 读取数据

df = pd.read_excel('./上海链家二手房数据.xlsx')

在这里插入图片描述

2.2 查看数据信息

df.info()

在这里插入图片描述

一共有 28201 条数据
包含小区名称、户型、面积、区域、楼层、朝向、价格、单价、建筑时间等字段

2.3 去除重复数据

df1 = df.drop_duplicates()

2.4 去除缺失数据

df1 = df1.dropna()

2.5 面积、价格、单价、楼层、建筑时间数据提取

df1['面积'] = pd.to_numeric(df1['面积'].str.extract(r'(\d+\.?\d+)', expand=False))
df1['价格'] = pd.to_numeric(df1['价格'].str.extract(r'(\d+)', expand=False))
df1['单价'] = pd.to_numeric(df1['单价'].str.extract(r'(\d+)', expand=False))
df1['楼层'] = pd.to_numeric(df1['楼层'].str.extract(r'(\d+)', expand=False))
df1['建筑时间'] = pd.to_numeric(df1['建筑时间'].str.replace('年建',''))

在这里插入图片描述

2.6 朝向数据处理

df1['朝向'] = df1['朝向'].str.replace('朝','')
df1['朝向'] = df1['朝向'].str.replace('(进门) ','')
df1['朝向'] = df1['朝向'].str.replace('(进门)','')
df1 = df1[df1['朝向'] != '']

🏳️‍🌈 3. 特征分析

3.1 二手房面积分析

def get_area_analyze():
    plt.figure(figsize=(12, 6), dpi=80)
    plt.subplot(1, 2, 1)
    sns.boxplot(df1['面积'],color=range_color[0])
    plt.title('面积分布箱线图')
    plt.xlabel('面积(㎡)')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)
    plt.subplot(1, 2, 2)
    sns.histplot(df1['面积'], kde=True, bins=50,color=range_color[1])
    plt.title('面积分布直方图')
    plt.xlabel('面积(㎡)')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)

在这里插入图片描述

  • 根据面积分布可以看出,大部分面积在200㎡以下,少部分在200㎡以上,所以过滤面积200㎡以下的数据。

3.2 二手房建筑时间分析

在这里插入图片描述

  • 根据建筑时间分布可以看出,大部分二手房建筑时间在1980年以后,所以过滤建筑时间1980年以后的数据。

3.3 二手房楼层分析

def get_floor_analyze():
    plt.figure(figsize=(12, 6), dpi=80)
    plt.subplot(1, 2, 1)
    sns.boxplot(df1['楼层'],color=range_color[2])
    plt.title('楼层分布箱线图')
    plt.xlabel('楼层')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)
    plt.subplot(1, 2, 2)
    sns.histplot(df1['楼层'], kde=True, bins=50,color=range_color[3])
    plt.title('楼层分布直方图')
    plt.xlabel('楼层')
    plt.ylabel('数量')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)

在这里插入图片描述

  • 根据楼层分布可以看出,大部分二手房楼层在30层以下,所以过滤楼层30层以下的数据。

3.4 二手房价格分析

在这里插入图片描述

  • 根据二手房价格分布可以看出,大部分二手房价格在1000万以下,所以过滤价格1000万以下的数据。

🏳️‍🌈 4. 模型分析

筛选需要用到的列数据:

df_model = df1[['面积', '区域', '楼层', '朝向', '建筑时间', '室', '厅', '价格']]

各特征相关性:

corrdf = df_model.corr()
plt.figure(figsize=(12, 12), dpi=80)
sns.heatmap(corrdf, annot=True,cmap="rainbow", linewidths=0.05,square=True,annot_kws={"size":8}, cbar_kws={'shrink': 0.8})
plt.title("各特征相关性热图",size=16)

在这里插入图片描述

4.1 Lasso回归

# 建立模型
model = Lasso()
# 训练模型
model.fit(X_train, y_train)
print(f'训练集得分:{round(model.score(X_train, y_train), 2)}')
print(f'测试集得分:{round(model.score(X_test, y_test), 2)}')
# 预测
y_predict = model.predict(X_test)
# 评估
R_square = model.score(X_test, y_test)
print('模型决定系数: ', round(R_square,2))

训练集得分:0.77
测试集得分:0.77
模型决定系数:0.77

真实值预测值对比图

在这里插入图片描述

Loss预测:

# 特征参数
mj = 99     # 面积(㎡)
lc = 3      # 楼层
sj = 1999   # 建筑时间
ws = 3      # 卧室数量
kt = 3      # 客厅数量
xzq = '闵行区'# 行政区
cx = '南北'   # 朝向
get_price()

闵行区、1999年、南北朝向、3室3厅、3层、99平米二手房预测价格:535万

4.2 随机森林

训练集得分:0.98
测试集得分:0.84
模型决定系数:0.84
真实值预测值对比图

在这里插入图片描述

随机森林预测:

# 特征参数
mj = 99     # 面积(㎡)
lc = 3      # 楼层
sj = 1999   # 建筑时间
ws = 3      # 卧室数量
kt = 3      # 客厅数量
xzq = '闵行区'# 行政区
cx = '南北'   # 朝向
get_price()

闵行区、1999年、南北朝向、3室3厅、3层、99平米二手房预测价格:458万

4.3 总结

  • Loss回归与随机森林模型相比,随机森林在测试集和训练集上的表现均优于Loss回归。
  • Loss回归与随机森林预测的结果相差比较大,可采用多组数据进行预测对比。

🏳️‍🌈 5. 可视化项目源码+数据

点击跳转:【全部可视化项目源码+数据】


以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享注明出处)让更多人知道。

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

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

相关文章

npm, yarn, pnpm之间的区别

前言 在现代化的开发中,一个人可能同时开发多个项目,安装的项目越来越多,所随之安装的依赖包也越来越臃肿,而且有时候所安装的速度也很慢,甚至会安装失败。 因此我们就需要去了解一下,我们的包管理器&#…

使用Java将PDF文件解析成Excel文件

安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…

Celery使用小结

介绍 Celery 是异步任务调度工具就&#xff0c;或分布式任务队列&#xff08;Distributed Task Queue&#xff09;&#xff0c;有多个worker。 Broker&#xff1a;中间人&#xff0c;所有任务放在broker中&#xff0c;worker到broker中提取任务执行。 这样系统为开环系统&am…

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录 1、什么是注解的解析&#xff1f; 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类&#xff0c;使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…

VUE脚手架练习

脚手架安装的问题&#xff1a; 1.安装node.js,配置环境变量,cmd输入node -v和npm -v可以看到版本号&#xff08;如果显示不是命令&#xff0c;确认环境变量是否配置成功&#xff0c;记得配置环境变量之后重新打开cmd&#xff0c;再去验证&#xff09; 2.在安装cnmp时&#xf…

unity3d—demo(实现给出图集名字和图片名字生成对应的图片)

目录 实现给出图集名字和图片名字生成对应的图片&#xff1a; 代码示例&#xff1a; dic: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片&#xff0c;结构如图&#xff1a; 测试代码&#xff1a; 结果&#xff1a; SpriteRenderer 讲解&#xff1a; Resour…

国内外网络安全政策动态(2024年11月)

▶︎ 1.13项网络安全国家标准自11月1日起实施 11月1日起&#xff0c;《网络安全技术 信息技术安全评估准则》等13项网络安全国家标准开始实施&#xff0c;其中&#xff0c;《网络安全技术 信息技术安全评估准则 第1-5部分》《网络安全技术 信息技术安全评估方法》等6项推荐性国…

Modbus Poll的使用

最近从串口调试助手接触到了Modbus Poll&#xff0c;一开始用的时候有些生疏&#xff0c;了解之后不得不说真香。 相对于串口调试助手&#xff0c;有些设备厂家会给一些点表和指令码&#xff0c;有些也可以通过modbus协议解析出来&#xff0c;相对来说&#xff0c;使用Modbus …

写NFC标签支持Android安卓Ohos纯血鸿蒙唤醒微信小程序

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b8bEEGz&ftt&id61539185785 Python languagecodestr "en".encode(gbk) titlestrself.lineEdit_title.text().strip().encode(gbk) uriheaderindex sel…

利用oracle spool配置数据导出脚本

一&#xff0c;spool配置项 set colsep |   //域输出分隔符 set echo off   //显示start启动的脚本中的每个sql命令&#xff0c;缺省为on set feedback off //回显本次sql命令处理的记录条数&#xff0c;缺省为on set heading off  //输出域标题&#xff0c;缺省为on…

单端和差分信号的接线法

内容来源&#xff1a;【单端信号 差分信号与数据采集卡的【RSE】【 NRES】【 DIFF】 模式的连接】 此篇文章仅作笔记分享。 单端输入 单端信号指的是输入信号由一个参考端和一个信号端构成&#xff0c;参考端一般是地端&#xff0c;信号就是通过计算信号端口和地端的差值所得…

前端基础——CSS

美化文档 HTML内部添加样式 本节我们来学习如何在标签中引入CSS样式。 1 在标签中添加声明 声明的关键字是style后接等号&#xff08;&#xff09;再接引号&#xff08;""&#xff09;&#xff0c;即style"" 具体声明如下&#xff1a; <input typ…

MATLAB 最小二乘点云拟合球 (89)

MATLAB 最小二乘点云拟合球 (89) 一、算法介绍二、算法实现1.代码2.结果这是缘,亦是最美的相见 一、算法介绍 球面拟合算法是一种通过数学方法将一组三维点(通常在三维空间中分布)拟合到一个理想的球形表面上。这个过程通常涉及使用最小二乘法来最小化实际数据点与拟合的…

安防视频监控平台Liveweb视频汇聚管理系统管理方案

智慧安防监控Liveweb视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚Liveweb平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

elasticsearch-如何给文档新增/更新的字段

文章目录 前言elasticsearch-如何给文档新增/更新的字段1. 如何给某些文档新增/更新的字段2. 给所有文档添加/更新一个新的字段3. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且…

浅谈网络 | 应用层之流媒体与P2P协议

目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女&#xff1f;RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络&#xff08;DHT&#xff09;哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火&#xff0c;…

性能测试基础知识jmeter使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 性能指标 1. 并发数 (Con…

【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法

ID3&#xff08;Iterative Dichotomiser 3&#xff09;是决策树的一种构造算法&#xff0c;由 Ross Quinlan 在 1986 年提出。它主要用于分类问题&#xff0c;通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征&#xff0c;且不支持连续型数据。 1. 核心思想 划分标…

记录:ubuntu 使用chattts的过程。

你知道什么是穷人吗&#xff1f;穷人就是没钱还想学习。 git GitHub - 2noise/ChatTTS: A generative speech model for daily dialogue. 因为所以。cosyvoice&#xff0c;gpt-s . 0.先找一个目录吧。 1.命令行模式 duyichengduyicheng-computer:~/gitee$ git clone https:…

LabVIEW氢同位素单质气体定量分装系统

氢同位素单质气体在多个行业中有重要应用&#xff0c;如能源和化工。传统的分装方法面临精度和自动化程度不足的问题。为此&#xff0c;开发了一套基于LabVIEW和质量流量控制器的定量分装系统&#xff0c;提高分装精度和效率&#xff0c;同时减少资源浪费和环境污染。 项目背景…