当前位置: 首页 > news >正文

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

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()

在这里插入图片描述

在这里插入图片描述

总结

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

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

相关文章:

  • 【Spring详解三】默认标签的解析
  • BuildFarm Worker 简要分析
  • Git命令行入门
  • 【数据分析】通过个体和遗址层面的遗传相关性网络分析
  • 前端面试题-异步任务队列控制
  • 叠焊和平面焊
  • Mongoose 详解
  • 小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面
  • Page Assist - 本地Deepseek模型 Web UI 的安装和使用
  • Spring Cloud 服务调用 Feign
  • C++:iterator迭代器失效
  • c++播放音频
  • top命令输出内容详解
  • 【设计模式】【创建型模式】建造者模式(Builder)
  • FreeRTOS-rust 编译分析
  • 【C++】实现一个JSON解析器
  • ubuntu上如何查看coredump文件默认保存在哪个路径?
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑲】
  • Xilinx FPGA工程移植步骤---包含软核工程
  • LeetCode刷题---哈希表---215
  • 马上评丨75万采购300元设备,仅仅终止采购还不够
  • 中共中央、国务院印发《生态环境保护督察工作条例》
  • 农行深圳市分行原副行长王国彪涉嫌严重违纪违法被查
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险