机器学习小项目之加利福尼亚房价数据分析

1. 安装必要的库

首先,确保安装了以下必要的 Python 库:

pip install scikit-learn pandas matplotlib

2. 导入所需库

在代码中,我们需要导入一些常用的库来处理数据、训练模型和评估结果:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing  # 加载加利福尼亚房价数据集
from sklearn.model_selection import train_test_split  # 划分训练集和测试集
from sklearn.linear_model import LinearRegression  # 线性回归模型
from sklearn.metrics import mean_squared_error, r2_score  # 评估指标
from sklearn.preprocessing import StandardScaler  # 特征标准化

3. 加载加利福尼亚房价数据集

使用 fetch_california_housing 函数加载加利福尼亚房价数据集:

# 加载加利福尼亚房价数据集
california = fetch_california_housing()

# 查看数据集的基本信息
print(california.DESCR)

california.DESCR 可以打印出数据集的详细描述,包括每个特征的含义。california.data 是特征数据,而 california.target 是房价中位数(目标变量)。

4. 创建 DataFrame

将加载的数据转换成 pandasDataFrame 便于操作,并查看数据的前几行:

# 将数据转换为 DataFrame
df = pd.DataFrame(data=california.data, columns=california.feature_names)

# 添加目标变量(房价中位数)
df['PRICE'] = california.target

# 查看前五行数据
print(df.head())

这将输出类似如下的内容:

mathematica

   MedInc  HouseAge  AveRooms  AveOccup  ...  Longitude  Latitude  PRICE
0   8.3252     41.0     6.984  2.5550  ...   -122.23    37.88  4.526
1   8.3014     21.0     6.238  2.5470  ...   -122.22    37.86  3.585
2   7.2574     52.0     8.288  2.5450  ...   -122.24    37.85  3.521
3   5.6431     33.0     5.682  2.5470  ...   -122.25    37.85  3.413
4   3.8462     60.0     5.011  2.5470  ...   -122.25    37.85  3.422

5. 数据预处理

特征和目标变量

将特征(X)和目标变量(y)分开:

# 特征数据
X = df.drop('PRICE', axis=1)

# 目标变量(房价)
y = df['PRICE']
划分训练集和测试集

使用 train_test_split 将数据集划分为训练集和测试集,通常测试集占比 20% - 30%:

# 划分训练集和测试集,测试集占比 30%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 打印数据集大小
print(f"训练集大小: {X_train.shape}")
print(f"测试集大小: {X_test.shape}")
特征标准化

特征标准化可以帮助提高模型的收敛速度,并避免某些特征因为量纲问题主导模型。我们使用 StandardScaler 来对数据进行标准化:

# 初始化标准化器
scaler = StandardScaler()

# 拟合并转换训练集数据
X_train_scaled = scaler.fit_transform(X_train)

# 转换测试集数据
X_test_scaled = scaler.transform(X_test)

6. 训练线性回归模型

现在我们使用标准化后的数据来训练一个线性回归模型:

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train_scaled, y_train)

7. 预测与评估

模型训练完成后,使用测试集数据进行预测,并评估模型的性能:

# 用测试集数据进行预测
y_pred = model.predict(X_test_scaled)

# 计算均方误差 (MSE) 和均方根误差 (RMSE)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)

# 计算 R² 分数
r2 = r2_score(y_test, y_pred)

# 打印评估结果
print(f"均方误差 (MSE): {mse:.2f}")
print(f"均方根误差 (RMSE): {rmse:.2f}")
print(f"R² 分数: {r2:.2f}")
  • 均方误差 (MSE):衡量预测值和真实值之间的差异,越小越好。
  • 均方根误差 (RMSE):MSE 的平方根,使误差的单位与目标变量一致。
  • R² 分数:衡量模型的拟合度,越接近 1 表示模型越好。

8. 可视化结果

我们可以通过绘制真实房价与预测房价的对比图来直观地展示模型效果:

# 绘制真实值与预测值的对比图
plt.scatter(y_test, y_pred)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--', lw=2)  # 添加对角线
plt.xlabel('真实房价')
plt.ylabel('预测房价')
plt.title('真实房价 vs 预测房价')
plt.show()

9. 完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler

# 加载加利福尼亚房价数据集
california = fetch_california_housing()

# 将数据转换为 DataFrame
df = pd.DataFrame(data=california.data, columns=california.feature_names)

# 添加目标变量(房价中位数)
df['PRICE'] = california.target

# 查看数据前五行
print(df.head())

# 特征数据
X = df.drop('PRICE', axis=1)

# 目标变量(房价)
y = df['PRICE']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 标准化数据
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train_scaled, y_train)

# 预测房价
y_pred = model.predict(X_test_scaled)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)

# 输出评估结果
print(f"均方误差 (MSE): {mse:.2f}")
print(f"均方根误差 (RMSE): {rmse:.2f}")
print(f"R² 分数: {r2:.2f}")

# 绘制对比图
plt.scatter(y_test, y_pred)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--', lw=2)  # 添加对角线
plt.xlabel('真实房价')
plt.ylabel('预测房价')
plt.title('真实房价 vs 预测房价')
plt.show()

在这里插入图片描述

在这里插入图片描述

总结

在这个项目中,我们使用 加利福尼亚房价数据集 来实现一个 回归任务,通过 线性回归模型 来预测房价。整个过程包括:

  • 数据加载
  • 数据预处理(特征和目标变量划分、数据标准化)
  • 模型训练
  • 模型评估与可视化

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

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

相关文章

基于MATLAB的均匀面阵MUSIC算法DOA估计仿真

基于MATLAB的均匀面阵MUSIC算法DOA估计仿真 文章目录 前言一、二维MUSIC算法原理二、二维MUSIC算法MATLAB仿真三、MATLAB源代码总结 前言 \;\;\;\;\; 在波达角估计算法中,MUSIC 算法与ESPRIT算法属于特征结构子空间算法,是波达角估计算法中的基石。在前面…

【SQL】SQL多表查询

多表查询案例联系点击此处 🎄概念 一般我们说的多表查询都涉及外键和父子表之间的关系。比如一对多:一般前面指的是父表后面指的是子表。 ⭐分类 一对多(多对一) 多对多 一对一 ⭐一对多 📢案例:部门与员工的关系 📢关系&…

【架构】分层架构 (Layered Architecture)

一、分层模型基础理论 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0365cf0bfa754229bdedca6b472bffc7.png 1. 核心定义 分层架构(Layered Architecture)模型是一种常见的软件设计架构,它将软件系统按照功能划分为不同的层次,每个层次都有特定的职责和功能…

2025年02月19日Github流行趋势

项目名称:OmniParser 项目地址url:https://github.com/microsoft/OmniParser 项目语言:Jupyter Notebook 历史star数:12878 今日star数:2153 项目维护者:yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kr…

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header:设置请求的 header,header 中不能设置 Referer; method:请求方法; timeout:超时时间,单位 ms&a…

Scrapy:DownloaderAwarePriorityQueue队列设计详解

DownloaderAwarePriorityQueue 学习笔记 1. 简介 DownloaderAwarePriorityQueue 是 Scrapy 中一个高级的优先级队列实现,它不仅考虑请求的优先级,还会考虑下载器的负载情况。这个队列为每个域名(slot)维护独立的优先级队列&#…

用DeepSeek零基础预测《哪吒之魔童闹海》票房——从数据爬取到模型实战

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 **一、为什么要预测票房?****二、准备工作****三、实战步骤详解****Step 1:数据爬取与清洗&am…

django连接mysql数据库

1.下载mysqlclient第三方库 2.在settings.py里连接数据库(提前建好) DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: 学生信息,USER: root,PASSWORD: 999123457,HOST: localhost,POST: 3306,} } 3.在models.py里创建一个类&#xff0…

Linux中的Ctrl+C与Ctrl+Z

CtrlC与CtrlZ的区别 在Linux中,当我们在执行一个命令运行代码时,由于运行时间过长或中途出现报错,此时,我们可能需要终止该操作,这时候,该使用CtrlC还是CtrlZ呢? 1、CtrlC CtrlC:终…

新手向:SpringBoot后端查询到数据,前端404?(附联调时各传参方式注解总结-带你一文搞定联调参数)

前言: 在 Spring Boot 项目开发中,后端小伙伴可能经常遇到这样诡异的场景: 后台日志显示查询到了数据,但前端却一脸懵逼地告诉你 404 Not Found?接口明明写好了,Postman 直接访问却提示找不到&#xff1f…

网络安全重点总结

第一章 网络安全基础 信息安全的三个目标 1.保密性 2. 完整性 3. 可用性 4. 合法使用网络安全的发展态势: 1. 计算机病毒层出不穷 2. 黑客对全球网络的恶意攻击石头逐年上升 3. 由于技术不完备,导致系统催在缺陷,漏洞 4. 世界各国军方在加紧…

电解电容的参数指标

容量 这个值通常是室温25℃,在一定频率和幅度的交流信号下测得的容量。容量会随着温度、直流电压、交流电压值的变化而改变。 额定电压 施加在电容上的最大直流电压,通常要求降额使用。 例如额定电压是4V,降额到70%使用,最高施…

百问网(100ask)的IMX6ULL开发板的以太网控制器(MAC)与物理层(PHY)芯片(LAN8720A)连接的原理图分析(包含各引脚说明以及工作原理)

前言 本博文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145663029 。 本博文和博文 https://blog.csdn.net/wenhao_ir/article/details/145663029 的目录是找出百问网(100ask)的IMX6ULL开发板与NXP官方提供的公板MCIMX6ULL-EVK(imx6ull14x14evk)在以太网硬件…

python入门笔记4

Python 中的列表(List)是 有序、可变 的序列类型,用方括号 [] 定义。以下是列表的核心语法和常用操作: list1 [Google, W3Cschool, 1997, 2000] list2 [7, 2, 3, 4, 5, 6, 1 ] #索引操作 print ("list1 first: ", li…

玩转SpringCloud Stream

背景及痛点 现如今消息中间件(MQ)在互联网项目中被广泛的应用,特别是大数据行业应用的特别的多,现在市面上也流行这多个消息中间件框架,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka等,这些消息中间件各有各的优劣,但是想…

Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)

文章目录 Redis下载地址:一、zip压缩包方式下载安装 1、下载Redis压缩包2、解压到文件夹3、启动Redis服务4、打开Redis客户端进行连接5、使用一些基础操作来测试 二、msi安装包方式下载安装 1、下载Redis安装包2、进行安装3、进行配置4、启动服务5、测试能否正常工…

SOME/IP--协议英文原文讲解9

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.1.4 T…

容器网络(三)- calico网络IPIP模式

一、前置知识 calico的IPIP模式使用到了tun设备,先来了解下什么是tun设备,它的作用是什么,以及使用到tun设备的IPIP隧道是如何工作的。 1.1 tun设备 tun是网络层的虚拟网络设备,可以收发第三层数据报文包,如IP封包&…

网络原理-HTTP/HTTPS

文章目录 HTTPHTTP 是什么?理解“应用层协议”理解 HTTP 协议的⼯作过程HTTP 协议格式抓包⼯具的使用抓包⼯具的原理抓包结果协议格式总结 HTTP 请求(Request)认识 URLURL 的基本格式关于URL encode 认识“⽅法”(method&#xff…

sentinel集成nacos做持久化配置

sentinel提供了非常强大的控制台来提供流控等功能,但是控制台只是临时的配置,想要将流控配置永久的保存,或者在项目启动的时候就加载,不需要手动设置,就需要使用到nacos与sentinel做集成配置。这里都是不变代码&#x…