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),"R²": round(r2, 3)}# 展示结果
print("\n模型性能对比:")
for model_name, metrics in results.items():print(f"{model_name}:")print(f"  MSE: {metrics['MSE']}")print(f"  R²分数: {metrics['R²']}\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.56R²分数: 0.602Decision Tree:MSE: 0.68R²分数: 0.517

关键分析点

  1. 数据特征MedInc(收入中位数)与房价正相关最强

  2. 模型对比:线性回归表现优于决策树(R²分数更高)

  3. 残差分析:误差大致呈正态分布,但存在高价房低估现象

  4. 地理因素:经度(Longitude)在决策树中显示较高重要性

扩展建议

  1. 尝试其他回归模型(随机森林、梯度提升树)

  2. 添加特征交互项(如收入×房间数)

  3. 使用网格搜索优化超参数

  4. 将经纬度转换为地理位置聚类特征

  5. 部署为API服务(使用Flask/FastAPI)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.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;用于定义不同类型的变量来…