【機器學習 | 基于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.pswp.cn/web/62202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62202.shtml
英文地址,請注明出處:http://en.pswp.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專欄” 今天給大家講課的角色是🍍菠蘿吹雪,“我菠蘿吹雪吹的不是雪,而…

Python Web 開發:使用 FastAPI 進行依賴注入與異常處理

Python Web 開發:使用 FastAPI 進行依賴注入與異常處理 目錄 🛠? 依賴注入與 FastAPI 高級特性?? 自定義異常類的實現與應用🚨 使用 HTTPException 處理常見錯誤🌍 全局異常處理器的設計與實現?? 異常處理與 API 響應的整合…

免押租賃系統助力資源共享新模式開創便捷租賃體驗

內容概要 免押租賃系統,聽起來是不是很酷?這個新模式不僅僅是為了讓你少花點錢,它的到來簡直就是個革命!以前,租東西時首先想到的就是那個令人心痛的押金,對吧?但現在,免押租賃系統…

oracle之用戶的相關操作

(1)創建用戶(sys用戶下操作) 簡單創建用戶如下: CREATE USER username IDENTIFIED BY password; 如果需要自定義更多的信息,如用戶使用的表空間等,可以使用如下: CREATE USER mall IDENTIFIED BY 12345…

第77期 | GPTSecurity周報

GPTSecurity是一個涵蓋了前沿學術研究和實踐經驗分享的社區,集成了生成預訓練Transformer(GPT)、人工智能生成內容(AIGC)以及大語言模型(LLM)等安全領域應用的知識。在這里,您可以找…

如何通過自學成長為一名后端開發工程師?

大家好,我是袁庭新。最近,有星友向我提出了一個很好的問題:如何通過自學成為一名后端開發工程師? 為了解答這個疑問,我特意制作了一個視頻來詳細分享我的看法和建議。 戳鏈接:如何通過自學成長為一名后端開…

Linux---對緩沖區的簡單理解--第一個系統程序

前序: 首先先理解一下什么是回車與換行;回車和換行是兩個概念,它們不是一個東西; 回車:光標回到開始;換行:換到下一行; 如下圖: 行緩沖區 如何理解緩沖區問題? 可以認為&#xff0…

力扣每日一題-999. 可以被一步捕獲的棋子數

題目 給定一個 8 x 8 的棋盤,只有一個 白色的車,用字符 R 表示。棋盤上還可能存在白色的象 B 以及黑色的卒 p。空方塊用字符 . 表示。車可以按水平或豎直方向(上,下,左,右)移動任意個方格直到它…

多模態大型語言模型MM-1.5采用數據驅動的方法,通過不斷優化數據組合提高模型性能

多模態大型語言模型MM-1.5采用數據驅動的方法,通過不斷優化數據組合提高模型性能 MM-1.5模型的設計核心在于其數據驅動的方法,這意味著模型的性能在很大程度上取決于所使用的數據類型和組合。這種方法的實施細節可以從以下幾個方面來展開: …

[Python學習日記-70] 元類

[Python學習日記-70] 元類 簡介 什么是元類 關鍵字 class 創建類的流程分析 自定義元類控制類的創建 自定義元類控制類的調用 自定義元類的屬性查找 自定義元類的應用與練習 簡介 在上一篇章當中我們已經了解了面向對象的各種內置函數了,本篇我們將講述“元類…

數據結構題庫11

第五章 樹和二叉樹 一、單項選擇題 1.關于二叉樹的下列說法正確的是 (1)。 (1):A.二叉樹的度為2 B.二叉樹的度可以小于2 C.每一個結點的度都為2 D.至少有一個結點的度為 2.設深度為h(h>0)的二…

【學習路線】Java

Java基礎 基礎 基礎語法 面向對象 集合框架 JCF 進階 并發編程 JVM 企業級開發 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 實戰 數據庫 MySQL Redis 計算機基礎 計算機組成原理 操作系統 計算機網絡 數據結構與算法 設計模式 參考:…

學生公寓智能限電系統的功能和作用

學生公寓智能限電系統?是一種用于管理和限制學生公寓用電的設備和技術,旨在確保用電安全、防止火災事故,并促進節能減排。以下是關于學生公寓智能限電系統的詳細介紹: 1、功能和作用 智能限電系統通過以下功能來管理和限制用電&#xff1a…

【開發語言】層次狀態機(HSM)介紹

層次狀態機(Hierarchical State Machine, HSM),從基本原理、結構設計、實現方法以及如何結合 Qt 進行具體實現等方面進行分析。 1. 層次狀態機的基本原理 層次狀態機是一種用于管理復雜系統行為的狀態機模型,它通過將狀態組織成…

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…

深入解析 Loss 減少方式:mean和sum的區別及其在大語言模型中的應用 (中英雙語)

深入解析 Loss 減少方式:mean 和 sum 的區別及其在大語言模型中的應用 在訓練大語言模型(Large Language Models, LLM)時,損失函數(Loss Function)的處理方式對模型的性能和優化過程有顯著影響。本文以 re…

基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知識庫問答機器人

導讀 本文將詳細介紹如何通過 PingCAP 開源項目 AutoFlow 實現快速搭建基于 TiDB 的本地知識庫問答機器人。如果提前準備好 Docker、TiDB 環境,整個搭建過程估計在 10 分鐘左右即可完成,無須開發任何代碼。 文中使用一篇 TiDB 文檔作為本地數據源作為示…