波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的“Hello World”。和大家对房价的普遍认知相同,波士顿地区的房价受诸多因素影响。该数据集统计了 13 种可能影响房价的因素和该类型房屋的均价,期望构建一个基于 13 个因素进行房价预测的模型。在机器学习领域,预测问题是一个核心研究方向,而房价预测作为其中的经典回归问题备受关注。波士顿房价数据集包含了与波士顿地区房屋相关的多种特征信息,通过对这些特征的分析和建模,我们可以尝试预测房屋价格。本文将详细介绍如何使用 Python 中的 scikit - learn
库对波士顿房价数据集进行处理、建模和评估。
波士顿房价数据集包含多个与房屋价格相关的特征,这些特征的具体含义如下:
属性名 | 解释 | 类型 |
---|---|---|
CRIM | 该镇的人均犯罪率 | 连续值 |
ZN | 占地面积超过 25,000 平方英尺的住宅用地比例 | 连续值 |
INDUS | 非零售商业用地比例 | 连续值 |
CHAS | 是否邻近 Charies River,1 = 邻近;0 = 不邻近 | 离散值 |
NOX | 一氧化氮浓度 | 连续值 |
RM | 每栋房屋的平均客房数 | 连续值 |
AGE | 1940 年之前建成的自用单位比例 | 连续值 |
DIS | 到波士顿 5 个就业中心的加权距离 | 连续值 |
RAD | 到径向公路的可达性指数 | 连续值 |
TAX | 全值财产税率 | 连续值 |
PTRATIO | 学生与教师的比例 | 连续值 |
B | 1000(BK - 0.63)^2 | 连续值 |
LSTAT | 低收入人群占比 | 连续值 |
数据集还包含一个目标变量——房屋价格中位数(MEDV
),其类型为连续值。这些特征涵盖了房屋的物理属性、周边环境、社会经济因素等多个方面,为预测房屋价格提供了丰富的信息。
需要波士顿房价数据集csv文件的欢迎评论区留言。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
import pandas as pd
这里我们导入了用于数据划分的 train_test_split
、线性回归模型 LinearRegression
、数据标准化工具 StandardScaler
、模型评估指标计算函数 mean_squared_error
和 r2_score
,以及数据处理库 pandas
。
# 使用原始字符串,以空格作为分隔符重新加载数据集
df = pd.read_csv('housing-data.csv', header=None, sep=r'\s+')
# 设置列名
df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
在加载数据集时,由于数据的特殊性,我们使用空格作为分隔符,并为数据设置了列名,以便后续的处理和分析。
# 数据预处理:标准化特征
scaler = StandardScaler()
X = df.drop('MEDV', axis=1)
y = df['MEDV']
X_scaled = scaler.fit_transform(X)
数据预处理阶段,我们首先将特征数据 X
和目标数据 y
进行分离,然后使用 StandardScaler
对特征数据进行标准化处理。标准化的目的是使不同特征具有相同的尺度,避免某些特征因数值范围过大而对模型训练产生过大影响。
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
这里我们使用 train_test_split
函数将标准化后的特征数据和目标数据划分为训练集和测试集。其中,测试集占总数据的 20%,random_state
参数设置为 42 是为了保证结果的可重复性。
# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X_train, y_train)
我们实例化了一个线性回归模型 LinearRegression
,并使用训练集数据 X_train
和 y_train
对模型进行训练。训练过程就是模型学习特征与目标变量之间线性关系的过程。
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
# 计算决定系数
r2 = r2_score(y_test, y_pred)
print('均方误差:', mse)
print('决定系数:', r2)
训练好的模型在测试集 X_test
上进行预测,得到预测结果 y_pred
。然后通过计算均方误差(mse
)和决定系数(r2
)来评估模型的性能。均方误差衡量了预测值与真实值之间的平均平方误差,数值越小表示模型预测越准确;决定系数表示模型对数据的拟合优度,取值范围在 0 到 1 之间,越接近 1 表示模型拟合效果越好。
运行代码后,得到均方误差约为 24.29,决定系数约为 0.67。这表明该线性回归模型在波士顿房价预测问题上有一定的预测能力,但仍有提升空间。均方误差相对较大,说明预测值与真实值之间存在一定的偏差;决定系数为 0.67 意味着模型能够解释约 67% 的房价变化情况,还有约 33% 的变化无法被模型解释。