在大数据与人工智能时代,数据处理与分析已成为解决复杂问题、揭示内在规律的关键手段。本章节将以加州房屋数据集(California Housing Dataset)为例,通过一系列的数据预处理、特征工程、模型构建及评估步骤,展示如何利用线性回归模型预测房屋价格。此案例不仅能够帮助读者深入理解数据处理流程,还能掌握线性回归模型在实际问题中的应用。
加州房屋数据集是机器学习领域广泛使用的公开数据集之一,它包含了加州不同地区房屋的价格及其相关属性,如房间数量、卧室数量、街区平均收入、房屋年龄等。该数据集非常适合用于回归分析,尤其是线性回归,以探索各因素如何影响房屋价格。
首先,使用Python的Pandas库加载数据集。加载后,通过head()
, describe()
, info()
等方法对数据集进行初步探索,了解数据的基本结构、缺失值情况、数据类型及统计特性。
import pandas as pd
# 加载数据
url = "https://lib.stat.cmu.edu/datasets/boston" # 假设URL(实际需从适当源获取)
data = pd.read_csv(url, sep='\s+', skiprows=22, header=None)
# 假设数据已适当处理,通常加州房屋数据集有更明确的列名和来源
# 此处仅为示例,实际需根据数据集格式调整
# 重命名列(以实际数据集为准)
columns = ['longitude', 'latitude', 'median_house_value', 'housing_median_age', 'total_rooms', 'total_bedrooms', 'population', 'households', 'median_income']
data.columns = columns
# 初步查看数据
print(data.head())
print(data.describe())
检查数据中的缺失值,并根据具体情况选择合适的填充策略,如均值填充、中位数填充、插值法或删除含有缺失值的行。
# 检查缺失值
missing_values = data.isnull().sum()
print(missing_values[missing_values > 0])
# 以中位数填充缺失的'median_income'
data['median_income'].fillna(data['median_income'].median(), inplace=True)
根据需要对数据进行进一步清洗,如去除异常值、转换数据类型、创建新特征等。例如,可以计算每间卧室的平均房间数作为新特征。
# 计算每间卧室的平均房间数
data['rooms_per_household'] = data['total_rooms'] / data['households']
# 转换数据类型(如果必要)
# data['some_column'] = pd.to_numeric(data['some_column'], errors='coerce')
特征工程是提升模型性能的关键步骤,包括特征选择、特征缩放等。
根据业务理解和数据分析结果,选择对预测目标(房屋价格)有显著影响的特征。在本例中,可以保留housing_median_age
、total_rooms
、population
、households
、median_income
以及新创建的rooms_per_household
作为特征。
由于不同特征的量纲和范围差异较大,直接用于模型训练可能会导致梯度下降过程不稳定。因此,需要对特征进行缩放,常用的方法包括标准化(Z-score)和归一化(Min-Max Scaling)。
from sklearn.preprocessing import StandardScaler
# 选择特征列
X = data[['housing_median_age', 'total_rooms', 'population', 'households', 'median_income', 'rooms_per_household']]
y = data['median_house_value']
# 特征缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
使用Scikit-learn库中的LinearRegression
类初始化线性回归模型。
from sklearn.linear_model import LinearRegression
# 初始化模型
model = LinearRegression()
使用缩放后的特征数据训练模型。
# 训练模型
model.fit(X_scaled, y)
通过计算模型在测试集上的性能指标(如均方误差MSE、决定系数R²)来评估模型性能。
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 在测试集上评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
print(f"R^2 Score: {r2}")
通过模型的系数(coef)和截距(intercept)解释各特征对房屋价格的影响程度。
# 打印模型系数和截距
print(f"Coefficients: {model.coef_}")
print(f"Intercept: {model.intercept_}")
根据模型评估结果和特征重要性分析,考虑进行特征重选、增加交互项、使用正则化技术(如岭回归、Lasso回归)等方法优化模型。
本章节通过处理加州房屋数据集,展示了从数据预处理、特征工程到模型构建与评估的完整流程。通过线性回归模型,我们成功预测了房屋价格,并对影响价格的关键因素有了深入理解。未来,可以进一步探索更复杂的模型(如随机森林、梯度提升树)或集成学习方法,以及利用深度学习技术提升预测精度。
通过以上内容,本章不仅传授了处理加州房屋数据并构建线性回归模型的具体技能,还引导读者思考如何在更广泛的数据分析项目中应用这些技能,促进理论与实践的深度融合。