多元线性回归案例:加州房价预测

📅 2026/7/9 3:06:07 👁️ 阅读次数 📝 编程学习
多元线性回归案例:加州房价预测

1.多元线性回归解决了什么问题?

多元线性回归,解决了多个特征变量和目标变量之间的相关性问题,并根据结论进行预测。 在加州房价数据集的例子中,解决了平均房间数、平均收入和户主平均年龄这三个特征变量和平均房价之间的关系,并以此进行房价的预测,最后用误差分析系数,对模型的表现进行评估。

2.多元线性回归的过程:

  • 导入数据分析和模型预测相关的库,加载加州房价数据集。
  • 绘制热力图,查看各变量之间的相关性。
  • 根据图像,确定特征变量和目标变量,有时需要对变量进行数据处理得到特征变量。
  • 对特征变量进行标准化处理,消除量纲。
  • 对线性回归模型进行训练和预测。
  • 对模型的预测表现进行评估,用R2,MSE,RMSE这些指标。
  • 绘制预测房价与真实房价的对比图,以散点图的形式。
  • 也可以绘制残差分析散点图和残差分布直方图,对预测值进行进一步分析。
  • 采用5折交叉验证法对R2系数进行评估。
  • 最后,将得到的结果以文件的形式保存。

3.代码块解释:

导入数据分析和模型预测相关的库,加载加州房价数据集


import os

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn.datasets import fetch_california_housing #加载加州房价数据集

from sklearn.linear_model import LinearRegression #多元线性回归模型

from sklearn.preprocessing import StandardScaler #标准化处理

from sklearn.metrics import mean_squared_error,r2_score

from sklearn.model_selection import cross_val_score #交叉验证模块

#正常显示中文标签

plt.rcParams['font.sans-serif'] = ['SimHei']

#正常显示负号

plt.rcParams['axes.unicode_minus'] = False

df = pd.read_csv("./cal_housing.csv")

df.head()


绘制热力图,查看各变量之间的相关性 用变量间的相关性系数作为指标,显示相关系数数值,规定热力图的色彩风格和系数显示方式。


plt.figure(figsize=(12,8))

sns.heatmap(df.corr(),annot=True,cmap='coolwarm',fmt=".2f")

plt.title("特征与房价(MedHouseVal)相关性热力图")

plt.show()


根据图像,确定特征变量和目标变量,有时需要对变量进行数据处理得到特征变量 在这里,我选择avgRooms,medianIncome和housingMedianAge作为特征变量,因为这三个特征变量的相关性最高,用medianHouseValue作为目标变量。


df['avgRooms'] = df['totalRooms']/df['households']

features = ['medianIncome','avgRooms','housingMedianAge']

X = df[features]

y = df["medianHouseValue"]


特征标准化处理,消除量纲


scaled = StandardScaler()

X_scaled = scaled.fit_transform(X)


对线性回归模型进行训练和预测

model = LinearRegression()

model.fit(X_scaled, y)

predictions = model.predict(X_scaled)


对模型的预测表现进行评估,用R2,MSE,RMSE这些指标,打印模型的斜率和截距

mse = mean_squared_error(y,predictions)

rmse = np.sqrt(mse)

r2 = r2_score(y,predictions)

print("模型系数:",model.coef_)

print("模型截距:",model.intercept_)

print("均方误差:",mse)

print("均方根误差:",rmse)

print("决定系数:",r2)


模型系数: [84115.11433906 -6718.06656196 21171.01321494]

模型截距: 206855.81690891474

均方误差: 6496608827.746702

均方根误差: 80601.54358166289

决定系数: 0.5121018839958533

可以从结果看出,决定系数R2约51%,在50%~70%之间,可以接受。


绘制预测结果与真实房价的对比图,以散点图的形式

plt.figure(figsize = (8,5))

plt.scatter(range(len(y)),y,label='实际价格',alpha=0.7)

plt.scatter(range(len(y)),predictions,label='预测价格',alpha=0.7)

plt.title('房价预测对比图')

plt.xlabel('样本编号')

plt.ylabel('价格')

plt.legend()

plt.show()

从图像看出,预测价格在真实价格之间波动


绘制残差分析散点图和残差分布直方图,对预测值进行进一步分析

residuals = y - predictions

plt.figure(figsize = (8,5))

plt.scatter(predictions,residuals,alpha=0.6)

plt.hlines(y=0,xmin = predictions.min(),xmax = predictions.max(),colors = 'red')

plt.title('残差图')

plt.xlabel('预测值')

plt.ylabel('残差')

plt.grid(True)

plt.show()

从残差图看,大部分残差点在横轴附近对称分布。


plt.figure(figsize = (8,5))

sns.histplot(residuals,kde=True,bins=30,color = 'purple')

plt.title('残差分布图')

plt.xlabel('残差值')

plt.ylabel('频率')

plt.grid(True)

plt.show()

从残差分布直方图看出,残差分布呈现正态分布形式。


采用5折交叉验证法对R2系数进行评估

cross_val_scores = cross_val_score(model,X_scaled,y,cv = 5,scoring = 'r2')

print("5折交叉验证 R2 分数:",cross_val_scores)

print("平均交叉验证得分:",cross_val_scores.mean())

5折交叉验证 R2 分数: [0.460717 0.39491883 0.48956221 0.40375787 0.54777794]

平均交叉验证得分: 0.4593467712230394

从交叉验证得分看出,0.45得分偏低,但考虑到在房价预测这种多元线性回归模型中,0.45较为常见。


将结果以文件形式保存

results_df = pd.DataFrame({

'特征名称':features,

'回归系数':model.coef_

})

summary_df = pd.DataFrame({

'项':['截距','MSE','RMSE','R2','交叉验证均值R2'],

'值':[model.intercept_,mse,rmse,r2,cross_val_scores.mean()]

})

full_results_df = pd.concat([results_df,pd.DataFrame([{}]),summary_df],ignore_index=True)

full_results_df.to_csv('regression_results.csv',index = False,encoding = 'utf-8-sig')

print('回归分析结果已保存至 regression_results.csv')

pred_df = pd.DataFrame({

'实际房价':y,

'预测房价':predictions,

'残差':residuals

})

pred_df.to_csv('predictions_residuals.csv',index = False,encoding = 'utf-8-sig')

print('预测值与残差数据已保存至 predictions_residuals.csv')

将特征名称、回归系数和一系列模型预测评估指标保存至csv文件中;将预测结果、实际房价和残差保存至另一个csv文件中。


4. 总结:

用加州房价数据集作为样本,分析了多个特征变量与目标变量之间的关系,用多元线性回归模型进行预测,并对其表现进行评估,以指标系数得分的形式,将预测结果和残差可视化分析,综合评估模型的性能,最后将结果保存至文件中。