【机器学习 | 基于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. 可视化项目源码+数据

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


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

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

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

相关文章

【HarmonyOS NEXT】flexShrink属性

一、背景 希望达到的布局效果是文字与按钮左右对齐,居中显示,但实际效果中按钮的显示与效果不符,如下图所示 二、问题 按钮是用row组件包裹的text,左右padding给的是一样的大小,但是明显右边padding会比左边padding大…

CentOS 7 上安装 MySQL 8.0.40 (二进制安装)

要在 CentOS 7 上安装 MySQL 8.0.40,按照以下步骤操作: 下载安装包。 https://dev.mysql.com/downloads/mysql/ 下载之前查看系统c版本 解压安装包 首先,解压下载的 .tar.xz 安装包。 cd /path/to/your/downloads tar -xvf mysql-8.0…

PHP语法学习(第六天)

💡依照惯例,回顾一下昨天讲的内容 PHP语法学习(第五天)主要讲了PHP中的常量和运算符的运用。 🔥 想要学习更多PHP语法相关内容点击“PHP专栏” 今天给大家讲课的角色是🍍菠萝吹雪,“我菠萝吹雪吹的不是雪,而…

免押租赁系统助力资源共享新模式开创便捷租赁体验

内容概要 免押租赁系统,听起来是不是很酷?这个新模式不仅仅是为了让你少花点钱,它的到来简直就是个革命!以前,租东西时首先想到的就是那个令人心痛的押金,对吧?但现在,免押租赁系统…

oracle之用户的相关操作

(1)创建用户(sys用户下操作) 简单创建用户如下: CREATE USER username IDENTIFIED BY password; 如果需要自定义更多的信息,如用户使用的表空间等,可以使用如下: CREATE USER mall IDENTIFIED BY 12345…

第77期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

如何通过自学成长为一名后端开发工程师?

大家好,我是袁庭新。最近,有星友向我提出了一个很好的问题:如何通过自学成为一名后端开发工程师? 为了解答这个疑问,我特意制作了一个视频来详细分享我的看法和建议。 戳链接:如何通过自学成长为一名后端开…

Linux---对缓冲区的简单理解--第一个系统程序

前序: 首先先理解一下什么是回车与换行;回车和换行是两个概念,它们不是一个东西; 回车:光标回到开始;换行:换到下一行; 如下图: 行缓冲区 如何理解缓冲区问题? 可以认为&#xff0…

[Python学习日记-70] 元类

[Python学习日记-70] 元类 简介 什么是元类 关键字 class 创建类的流程分析 自定义元类控制类的创建 自定义元类控制类的调用 自定义元类的属性查找 自定义元类的应用与练习 简介 在上一篇章当中我们已经了解了面向对象的各种内置函数了,本篇我们将讲述“元类…

数据结构题库11

第五章 树和二叉树 一、单项选择题 1.关于二叉树的下列说法正确的是 (1)。 (1):A.二叉树的度为2 B.二叉树的度可以小于2 C.每一个结点的度都为2 D.至少有一个结点的度为 2.设深度为h(h>0)的二…

学生公寓智能限电系统的功能和作用

学生公寓智能限电系统‌是一种用于管理和限制学生公寓用电的设备和技术,旨在确保用电安全、防止火灾事故,并促进节能减排。以下是关于学生公寓智能限电系统的详细介绍: 1、功能和作用 智能限电系统通过以下功能来管理和限制用电&#xff1a…

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人

导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境,整个搭建过程估计在 10 分钟左右即可完成,无须开发任何代码。 文中使用一篇 TiDB 文档作为本地数据源作为示…

基于XML的AOP开发

AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程。 AOP相关术语: 目标对象(Target): 你要去代理的对象,可以理解为之前很单纯的那个对象。 代理对象(Proxy): 你把你那个单纯的对象给我&#xff0c…

记录blender学习过程中遇到的问题

物体发射的方向不对 被发射物体(例如一棵树)n键看旋转归0 切换正视图 将被发射物体的局部坐标的Z轴 指向 全局方向的X轴时 并且把粒子系统设置的物体旋转勾选上 方向就对了 做倒角发现有问题 检查缩放应用、面朝向、有没有重合点(融合点&am…

Ubuntu系统中Redis的安装步骤及服务配置

目录 内容概括 系统环境 安装方式 1、apt包管理器安装 (1)安装redis服务 (2)安装客户端(进入命令行操作使用,包含redis-cli) (3)安装检验 (4&#xf…

半导体设备中的微型导轨应如何选择合适的润滑油?

微型导轨的润滑对于保证其高精度和高稳定性至关重要,尤其是在半导体设备中,微型导轨的润滑油选择需要考虑多个因素,以确保设备的最佳性能和寿命。以下是一些关键点: 1、黏度:润滑油的黏度是影响其流动性和润滑效果的重…

RocketMq详解:六、RocketMq的负载均衡机制

上一章:《SpringBootAop实现RocketMq的幂等》 文章目录 1.背景1.1 什么是负载均衡1.2 负载均衡的意义 2.RocketMQ消息消费2.1 消息的流转过程2.2 Consumer消费消息的流程 3.RocketMq的负载均衡策略3.1 Broker负载均衡3.2 Producer发送消息负载均衡3.3 消费端的负载均…

主打极致性价比,AMD RX 8600/8800显卡定了

*以下内容仅为网络爆料及传闻,一切以官方消息为准。 这谁能想到,率先掏出下一代桌面独立显卡的不是老大哥 NVIDIA,也不是 AMD,反而是三家中存在感最弱的 Intel! 就在 12 月 3 日,Intel 正式发布了自家第二…