机器学习小项目之加利福尼亚房价数据分析
创作时间:
作者:
@小白创作中心
机器学习小项目之加利福尼亚房价数据分析
引用
CSDN
1.
https://m.blog.csdn.net/qq_35313692/article/details/145720183
本文将通过一个加利福尼亚房价预测的小项目,详细介绍如何使用Python实现线性回归模型。从数据加载、预处理、模型训练到评估,每个步骤都配有详细的代码示例和解释,非常适合机器学习初学者学习和参考。
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
将加载的数据转换成 pandas 的 DataFrame 便于操作,并查看数据的前几行:
# 将数据转换为 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()
总结
在这个项目中,我们使用加利福尼亚房价数据集来实现一个回归任务,通过线性回归模型来预测房价。整个过程包括:
- 数据加载
- 数据预处理(特征和目标变量划分、数据标准化)
- 模型训练
- 模型评估与可视化
热门推荐
冬游漓江:邂逅最宁静的桂林山水
骑行装备选购全攻略
长途骑行身体保护指南:关键部位防护与舒适骑行策略
面对烦恼:自我调节与寻求专业帮助的重要性
企业裁员要提前多久告知员工
公司裁员流程详解:从提前通知到最终实施
赵本山春晚金句大回顾:笑点满满!
《宝可梦 朱/紫》初始阵容选择推荐 最佳角色搭配解析
春节、元宵、清明、端午、七夕、中秋、重阳:中国传统节日的顺序与文化传承
安徽这个千年古都,藏着中国最强县级博物馆
福清东壁岛:东海壁垒 华丽蜕变
从晋商掌柜到现代经理人:古老管理制度的现代启示
从农村娃到航天员:宋令东的飞天逐梦之旅
宋令东太空漫步,成中国90后航天新星
春节高速免费后,你的爱车需要这些保养!
冬季游泳如何避免嘴唇发紫?这份实用指南请收好
嘴唇发紫可能是心脏在求救?
冬季嘴唇发紫?可能是你没做好这一步!
冬季护唇新方法:山西老陈醋+维C,轻松告别紫唇困扰
书法用墨九法:从浓墨到冲墨的艺术探索
铁观音茶叶属于什么茶?快来揭秘!
老年人与保姆结婚:现象、挑战与建议
阳台地砖&厨房瓷砖:高性价比装修指南
装修老司机揭秘:瓷砖铺贴费用大起底!
瓷砖平方计算小窍门:省钱又省心!
甲状腺结节患者的情绪管理指南
海带与甲状腺健康:科学食用指南
上海明珠医院中医科:范杰主任亲述甲状腺结节调理法
甲状腺结节患者如何优雅地吃出健康?
中秋节,这4种蔬菜再贵也要买,从不打农药,可惜很多人还不知道