案例1:线性回归预测房价

引言

在机器学习领域,线性回归是一种基本且重要的监督学习算法,常用于预测连续型变量。本文将利用加州房价数据集,通过线性回归模型来分析房价的影响因素,并评估模型的性能。

数据加载与初步探索

  1. 数据加载:首先,使用 sklearn 库中的 fetch_california_housing 函数加载加州房价数据集。该数据集包含了关于房屋的多种特征信息,如房间数量、人口密度等,以及对应的房价目标变量。
california = fetch_california_housing()
  1. 创建DataFrame:将数据集转换为 pandasDataFrame 格式,方便后续的数据处理和分析。同时,将目标变量 MedHouseVal 添加到 DataFrame 中。
df = pd.DataFrame(california.data, columns=california.feature_names)
df['MedHouseVal'] = california.target
  1. 查看数据前几行:使用 head() 方法查看数据集的前 5 行,对数据的结构和内容有一个初步的了解。
print(df.head())
  1. 描述性统计:通过 describe() 方法获取数据的描述性统计信息,包括均值、标准差、最小值、最大值等,有助于了解数据的分布情况。
print(df.describe())
  1. 查看缺失值:检查数据集中是否存在缺失值,使用 isnull().sum() 方法统计每列的缺失值数量。
print(df.isnull().sum())

结果显示该数据集没有缺失值,减少了数据预处理的工作量。

  1. 相关性热图:为了直观地了解各个特征之间以及特征与目标变量之间的相关性,绘制相关性热图。
plt.figure(figsize=(12,10))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.title('Feature Correlation Heatmap')
plt.show()

热图中的颜色表示相关性的强弱,通过观察可以发现某些特征之间存在较强的正相关或负相关关系。

数据划分与模型训练

  1. 特征与目标变量:将数据集分为特征矩阵 X 和目标变量 y
X = df.drop('MedHouseVal', axis=1)
y = df['MedHouseVal']
  1. 划分数据集:使用 train_test_split 函数将数据集划分为训练集和测试集,其中训练集占 80%,测试集占 20%。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  1. 初始化线性回归模型:实例化 LinearRegression 类,创建线性回归模型对象。
lr = LinearRegression()
  1. 训练模型:使用训练集数据对模型进行训练,拟合线性回归模型的参数。
lr.fit(X_train, y_train)
  1. 查看模型参数:获取模型的截距和回归系数。
print('Intercept:', lr.intercept_)
print('Coefficients:', lr.coef_)

截距表示当所有特征都为 0 时的预测值,回归系数则反映了每个特征对目标变量的影响程度。

模型评估

  1. 预测:使用训练好的模型对测试集数据进行预测。
y_pred = lr.predict(X_test)
  1. 计算评价指标:计算均方误差(MSE)和决定系数(R²)来评估模型的性能。
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print('Mean Squared Error:', mse)
print('R² Score:', r2)

均方误差衡量了预测值与真实值之间的平均误差平方,值越小表示模型的预测效果越好。决定系数 R² 表示模型对数据的拟合优度,取值范围在 0 到 1 之间,越接近 1 表示模型的拟合效果越好。

  1. 残差分析:计算残差,即真实值与预测值之间的差值。
residuals = y_test - y_pred

绘制残差分布图,观察残差的分布情况。

plt.figure(figsize=(10,6))
sns.histplot(residuals, kde=True)
plt.title('Residuals Distribution')
plt.xlabel('Residuals')
plt.ylabel('Frequency')
plt.show()

如果残差服从正态分布,说明模型的假设是合理的。同时,绘制真实值与预测值的散点图,并添加一条对角线作为参考。

plt.figure(figsize=(10,6))
plt.scatter(y_test, y_pred, color='blue', alpha=0.5)
plt.plot([y.min(), y.max()], [y.min(), y.max()], color='red', linewidth=2)
plt.xlabel('真实房价 (MedHouseVal)')
plt.ylabel('预测房价 (MedHouseVal)')
plt.title('真实值 vs 预测值')
plt.show()

从散点图可以直观地看出预测值与真实值的接近程度。

  1. 特征重要性分析:将回归系数整理成 DataFrame 格式,并按系数大小进行排序。
coefficients = pd.DataFrame({'Feature': X.columns, 'Coefficient': lr.coef_})
coefficients = coefficients.sort_values(by='Coefficient', ascending=False)

绘制条形图展示各个特征的系数大小,从而了解哪些特征对房价的影响较大。

plt.figure(figsize=(12,8))
sns.barplot(x='Coefficient', y='Feature', data=coefficients)
plt.title('线性回归系数')
plt.show()

结论

通过对加州房价数据集的线性回归分析,我们建立了一个能够预测房价的模型,并对模型进行了全面的评估和分析。从结果来看,该模型在一定程度上能够较好地拟合数据,但也存在一定的误差。通过残差分析和特征重要性分析,我们可以进一步了解模型的优缺点,并为后续的模型改进提供方向。在实际应用中,线性回归模型可以作为一种简单有效的房价预测工具,但还需要结合更多的领域知识和数据进行优化。

最后

机器学习实战百例训练营正在持续更新中!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值