Python 實現機器學習的 房價預測回歸項目

項目目標:

??????基于房屋特征(如房間數、地理位置等)預測加州地區的房價中位數。

????? 使用 Python 實現機器學習的 房價預測回歸項目(使用 California Housing 數據集)

環境準備

# 安裝必要庫(若未安裝)
# pip install numpy pandas matplotlib scikit-learn seaborn
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error, r2_score

完整代碼實現

步驟 1: 加載數據集
# 加載加州房價數據集
california = fetch_california_housing()
X = california.data  # 特征數據
y = california.target  # 目標變量(房價中位數,單位:萬美元)
feature_names = california.feature_namesprint("特征名稱:", feature_names)
print("樣本數量:", X.shape[0])
print("特征數量:", X.shape[1])
步驟 2: 數據探索
# 轉換為DataFrame
df = pd.DataFrame(X, columns=feature_names)
df['MedHouseVal'] = y# 查看數據概覽
print("\n數據前5行:")
print(df.head())# 統計信息
print("\n數據描述:")
print(df.describe())# 繪制房價分布圖
plt.figure(figsize=(8,5))
sns.histplot(df['MedHouseVal'], bins=50, kde=True)
plt.title("房價中位數分布")
plt.xlabel("房價(萬美元)")
plt.show()# 特征相關性熱力圖
plt.figure(figsize=(10,8))
corr_matrix = df.corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title("特征相關性矩陣")
plt.show()
步驟 3: 數據預處理
# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
)# 特征標準化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
步驟 4: 模型訓練與比較
# 初始化模型
models = {"Linear Regression": LinearRegression(),"Decision Tree": DecisionTreeRegressor(max_depth=5)
}# 訓練與評估
results = {}
for name, model in models.items():model.fit(X_train_scaled, y_train)y_pred = model.predict(X_test_scaled)# 計算指標mse = mean_squared_error(y_test, y_pred)r2 = r2_score(y_test, y_pred)results[name] = {"MSE": round(mse, 2),"R2": round(r2, 3)}# 展示結果
print("\n模型性能對比:")
for model_name, metrics in results.items():print(f"{model_name}:")print(f"  MSE: {metrics['MSE']}")print(f"  R2分數: {metrics['R2']}\n")
步驟 5: 結果可視化
# 獲取最佳模型預測結果
best_model = LinearRegression()
best_model.fit(X_train_scaled, y_train)
y_pred = best_model.predict(X_test_scaled)# 繪制實際值與預測值對比
plt.figure(figsize=(8,6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([0, 5], [0, 5], 'r--')  # 理想對角線
plt.xlabel("實際房價")
plt.ylabel("預測房價")
plt.title("實際值 vs 預測值")
plt.show()# 繪制殘差圖
residuals = y_test - y_pred
plt.figure(figsize=(8,6))
sns.histplot(residuals, kde=True)
plt.title("殘差分布")
plt.xlabel("預測誤差")
plt.show()
步驟 6: 特征重要性分析(決策樹)
# 獲取決策樹特征重要性
dt_model = DecisionTreeRegressor(max_depth=5).fit(X_train_scaled, y_train)
importances = dt_model.feature_importances_# 可視化特征重要性
plt.figure(figsize=(10,6))
sns.barplot(x=importances, y=feature_names, palette="viridis")
plt.title("特征重要性排序(決策樹模型)")
plt.xlabel("重要性分數")
plt.show()

輸出示例

特征名稱: ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']
樣本數量: 20640
特征數量: 8模型性能對比:
Linear Regression:MSE: 0.56R2分數: 0.602Decision Tree:MSE: 0.68R2分數: 0.517

關鍵分析點

  1. 數據特征MedInc(收入中位數)與房價正相關最強

  2. 模型對比:線性回歸表現優于決策樹(R2分數更高)

  3. 殘差分析:誤差大致呈正態分布,但存在高價房低估現象

  4. 地理因素:經度(Longitude)在決策樹中顯示較高重要性

擴展建議

  1. 嘗試其他回歸模型(隨機森林、梯度提升樹)

  2. 添加特征交互項(如收入×房間數)

  3. 使用網格搜索優化超參數

  4. 將經緯度轉換為地理位置聚類特征

  5. 部署為API服務(使用Flask/FastAPI)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73389.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聚力·突破·共贏|修飾組學服務聯盟正式成立,共啟協同發展新篇章

2025年3月13日,上海——由中科新生命、杭州微米生物、廣科安德、承啟生物、派森諾生物、胡珀生物等十余家行業標桿企業共同發起的“修飾組學服務聯盟”成立儀式在上海紫竹新興產業技術研究院隆重舉行。聯盟以“聚力突破共贏”為主題,致力于整合修飾組學全…

【Docker項目實戰】使用Docker部署serverMmon青蛇探針(詳細教程)

【Docker項目實戰】使用Docker部署serverMmon青蛇探針 一、serverMmon介紹1.1 serverMmon 簡介1.2 主要特點二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、下載serverMmon鏡像五、…

力扣刷題(數組篇)

日期類 #pragma once#include <iostream> #include <assert.h> using namespace std;class Date { public:// 構造會頻繁調用&#xff0c;所以直接放在類里面&#xff08;類里面的成員函數默認為內聯&#xff09;Date(int year 1, int month 1, int day 1)//構…

【通縮螺旋的深度解析與科技破局路徑】

通縮螺旋的深度解析與科技破局路徑 一、通縮螺旋的形成機制與惡性循環 通縮螺旋&#xff08;Deflationary Spiral&#xff09;是經濟學中描述價格持續下跌與經濟衰退相互強化的動態過程&#xff0c;其核心邏輯可拆解為以下鏈條&#xff1a; 需求端萎縮&#xff1a;居民消費信…

單一責任原則在Java設計模式中的深度解析

在軟件開發中&#xff0c;設計模式提供了一種解決特定問題的思路。在眾多的設計原則中&#xff0c;單一責任原則&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;是一個非常重要的概念。它主要強調一個類應該只有一個責任&#xff0c;也就是說&#xf…

開源后臺管理系統推薦

前言 在當今數字化時代&#xff0c;企業和組織對于管理和運營資源的需求日益增加。開源后臺管理系統應運而生&#xff0c;為用戶提供了一個靈活、可定制化的管理平臺。本文將介紹開源后臺管理系統的概念和優勢&#xff0c;探討常見的開源后臺管理系統&#xff0c;以及如何選擇…

原生微信小程序實現導航漫游(Tour)

效果&#xff1a; 小程序實現導航漫游 1、組件 miniprogram/components/tour/index.wxml <!--wxml--> <view class"guide" wx:if"{{showGuide}}"><view style"{{guideStyle}}" class"guide-box"><view class&quo…

Docker容器命令速查表

這是 Docker 的快速參考備忘單。 你可以在這里找到最常見的 Docker 命令。 安裝 curl -sSL https://get.docker.com/ | sh sudo chmod 777 /var/run/docker.sock在后臺創建和運行容器 $ docker run -d -p 80:80 docker/getting-started-d - 以分離&#xff08;后臺&#xff0…

Qt QML實現鼠標自由選擇不規則區域進行截圖

背景 不規則區域進行截圖是一種常見的應用場景&#xff0c;通常用于程序截圖工具或者圖像處理軟件中。主要是為了讓用戶可以自由選擇任意形狀的區域進行截圖&#xff0c;而不僅僅局限于矩形區域。這樣用戶可以更靈活地進行截圖操作&#xff0c;特別是對于需要截取特定形狀區域…

SpringDataRedis存儲Redis的數據序列化

在使用Spring Data Redis存儲數據至Redis時&#xff0c;選擇合適的序列化策略至關重要。它不僅影響數據存儲的效率和空間利用率&#xff0c;還關系到跨語言兼容性和系統的擴展性。適當的序列化方式可以確保數據正確無誤地被存儲和讀取&#xff0c;提升系統的穩定性和維護性&…

交易系統【三】網關

第二章本來是要講消息總線&#xff0c;審核說是過度宣傳&#xff0c;就放棄了&#xff0c;不糾結&#xff0c;先跳過。 網關和消息總線的底層技術都和網絡相關&#xff0c;兩者也有很重要的差別。消息總線主要用于內網&#xff0c;受交換機和網卡影響比較大&#xff0c;網絡狀…

eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN側uplink接口、FE接口、GE接口介紹

路由器常見接口的詳細介紹及其應用示例&#xff1a; 1. CON/AUX 接口 全稱&#xff1a;Console/Auxiliary&#xff08;控制臺/輔助接口&#xff09;作用&#xff1a; CON&#xff08;Console&#xff09;&#xff1a;通過命令行界面&#xff08;CLI&#xff09;直接配置路由器…

iOS底層原理系列04-并發編程

在移動應用開發中&#xff0c;流暢的用戶體驗至關重要&#xff0c;而并發編程是實現這一目標的關鍵技術。本文將深入探討iOS平臺上的并發編程和多線程架構&#xff0c;幫助你構建高性能、響應迅速的應用程序。 1. iOS線程調度機制 1.1 線程本質和iOS線程調度機制 線程是操作…

Vmware下的openEuler

1.下載openEuler操作系統鏡像 https://repo.openeuler.org/openEuler-20.03-LTS/ISO/ 2.在VM新建虛擬機 3.虛擬機聯網 我是出現了沒有網絡&#xff0c;ping不通的問題 參考&#xff1a;https://blog.csdn.net/FHY26828/article/details/140941234 修改文件&#xff1a; 在…

帶寬管理配置實驗

一、實驗拓撲 配置流程&#xff1a; 1、帶寬通道&#xff1a;整體帶寬、每個用戶帶寬、連接數、優先級信息 2、帶寬策略 3、策略通道&#xff0c;引用 4、配置接口出入帶寬 二、實驗需求和配置 1、基礎配置 接口配置 [dianxin]interface GigabitEthernet 0/0/0 [dianxin-G…

【STM32】從新建一個工程開始:STM32 新建工程的詳細步驟

STM32 開發通常使用 Keil MDK、STM32CubeMX、IAR 等工具來創建和管理工程。此處是 使用 Keil MDK5 STM32CubeMX 創建 STM32 工程的詳細步驟。 新建的標準庫工程文件已上傳至資源中&#xff0c;下載后即可直接使用。 標準庫新建 STM32 工程的基本目錄結構&#xff1a;STD_STM…

探索 Trossen AI:從 Aloha到智能機器人平臺的進化之路

在人工智能與機器人技術快速發展的當下&#xff0c;科研硬件的性能與成本成為影響行業創新的重要因素。Trossen Robotic為在機器人領域二十余年的知名企業&#xff0c;近日推出的 Trossen AI 系列產品&#xff0c;為科研機構與開發者提供了高性能、高性價比的解決方案。 Trosse…

C語言:5.20程序練習題

打印一個菱形圖案。程序分為兩部分&#xff1a;上半部分和下半部分。上半部分打印一個逐漸增大的星號圖案&#xff0c;下半部分打印一個逐漸縮小的星號圖案。 #include<stdio.h> int main() {int row 5;//定義行數int t 2;for (int i row; 0 < i; i--){for (int k…

一些docker命令

一、基礎命令 查看 Docker 版本 docker --version 或 docker version&#xff1a;顯示 Docker 客戶端和服務器的版本信息。 查看 Docker 系統信息 docker info&#xff1a;顯示 Docker 系統的詳細信息&#xff0c;包括鏡像、容器數量、存儲驅動類型等。 Docker 服務管理 s…

C語言內容

C語言是一門經典且廣泛應用的編程語言&#xff0c;具有以下基礎要點&#xff1a; 基本數據類型 包括整型&#xff08;如 int &#xff09;、字符型&#xff08; char &#xff09;、浮點型&#xff08; float 和 double &#xff09;等&#xff0c;用于定義不同類型的變量來…