【梯度下降应用于波士顿房价预测(岭回归应用)】

前言

线性回归回顾

在介绍岭回归之前,回顾一下线性回归(Linear Regression)。线性回归是一种用于建立输入特征(自变量)和输出目标(因变量)之间关系的方法。其基本公式如下:

Y = β 0 + β 1 X 1 + β 2 X 2 + … + β p X p + ϵ Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \ldots + \beta_pX_p + \epsilon Y=β0+β1X1+β2X2++βpXp+ϵ

其中, Y Y Y 是目标变量, X 1 , X 2 , … , X p X_1, X_2, \ldots, X_p X1,X2,,Xp 是特征变量, β 0 , β 1 , β 2 , … , β p \beta_0, \beta_1, \beta_2, \ldots, \beta_p β0,β1,β2,,βp 是回归系数, ϵ \epsilon ϵ 是误差项。线性回归的目标是找到最佳的回归系数,使得预测值与实际值之间的残差平方和最小化。

多重共线性问题

多重共线性是指在线性回归中,特征变量之间存在高度相关性的情况。这会导致回归系数的估计变得不稳定,因为存在多个可能的系数组合可以得到相似的拟合效果。多重共线性的存在使得模型在新数据上的泛化性能下降,容易过拟合。

岭回归的提出

岭回归是由统计学家Arthur E. Hoerl和Robert W. Kennard于1970年提出的,它的目标是解决多重共线性问题。岭回归的核心思想是在线性回归的损失函数中添加一个正则化项,以限制回归系数的大小。这个正则化项通常是L2范数(欧几里得范数)的平方,即:

L2 正则化项 = α ∑ i = 1 p β i 2 \text{L2 正则化项} = \alpha \sum_{i=1}^{p} \beta_i^2 L2 正则化项=αi=1pβi2

其中, α \alpha α 是正则化参数,用于控制正则化的强度。增大 α \alpha α会导致回归系数趋向于零,从而减小多重共线性的影响。

岭回归的优点

  1. 解决多重共线性:岭回归可以有效地处理特征变量之间的高度相关性,提高模型的稳定性。

  2. 防止过拟合:通过正则化项,岭回归可以限制回归系数的大小,防止模型在训练数据上过度拟合。

  3. 可调参数:正则化参数 α \alpha α可以根据需要进行调整,以平衡模型的拟合度和泛化能力。

岭回归的实现

在实际应用中,岭回归可以使用各种机器学习框架和库来实现,例如Scikit-Learn(Python)等。

from sklearn.linear_model import Ridge

# 创建岭回归模型
ridge_reg = Ridge(alpha=1.0)

# 拟合模型
ridge_reg.fit(X_train, y_train)

# 预测
y_pred = ridge_reg.predict(X_test)

实战

数据准备

首先,我们需要获取波士顿房价数据集,并对数据进行处理。我们从CMU统计学习数据集库中获取数据,并将其划分为训练集和测试集。

import pandas as pd
import numpy as np

data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data, target)

然后,我们对数据进行标准化处理,确保特征在相同的尺度范围内。这是为了避免模型训练过程中特征权重的不合理变化。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

岭回归

岭回归是一种线性回归的正则化方法,它通过在损失函数中添加L2范数的惩罚项,对模型参数进行限制。我们将使用岭回归作为梯度下降的优化方式。

from sklearn.linear_model import Ridge

ridge = Ridge()
ridge.fit(X_train, y_train)

训练完成后,我们可以查看岭回归模型的参数和截距,并评估模型在训练集和测试集上的性能。

print("岭回归模型参数:{}".format(ridge.coef_))
print("岭回归模型截距:{}".format(ridge.intercept_))
print("岭回归模型训练集得分:{:.2f}".format(ridge.score(X_train, y_train)))
print("岭回归模型测试集得分:{:.2f}".format(ridge.score(X_test, y_test)))

模型评估

我们使用均方误差(Mean Squared Error, MSE)来评估模型的性能,MSE越小表示模型拟合效果越好。

from sklearn.metrics import mean_squared_error

y_pred = ridge.predict(X_test)
print("岭回归模型均方误差:{:.2f}".format(mean_squared_error(y_test, y_pred)))

可视化展示

最后,我们使用可视化工具matplotlib展示测试集的真实房价和预测房价,直观地观察模型的预测效果。

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
plt.plot(range(len(y_test)), y_test, "r", label="y_test")
plt.plot(range(len(y_pred)), y_pred, "b--", label="y_pred")
plt.legend()
plt.show()

在图中,红色的曲线代表测试集中的真实房价,蓝色的虚线代表岭回归模型对测试集的房价预测结果。我们可以直观地看到预测结果是否与真实房价趋势一致。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你在学习Python数据分析的时候,是否遇到过在这些问题? 别慌!这些都是数据科学入门常见问题。从入门到上手再到解决实际问题,数据科学看似复杂,但如果你掌握了正确的学习方法,完全可以极速入门。 【职场人进阶必备  数据分析/挖掘一点通】 如今的职场上,90%以上的岗位都会涉及数据问题。 以产品文案岗位为例,在一个新产品推向市场之前,文案需要考虑: 此时,可以关注一下市场上已有的相关产品推广数据,如:哪些文案打开率更高?哪些文案转化更好?目标用户的购买习惯如何? 以此作为下一步工作开展的依据,对产品文案工作者来说,可以少走很多弯路。 学会数据分析/挖掘,等于站巨人的肩膀上工作,轻松且高效。 【爬虫、数据分析、数据挖掘知识点三合一】数据问题一网打尽 本课程将知识点悉数融入实战项目,不空谈语法,帮助学员在实践中获知识,目标是:让学员能自主完成数据采集、数据分析与数据挖掘。 学习完本课程,你可以熟练掌握: 【实战案例超实用,轻松拥有“睡后收入”!】 本课程以股票案例为主线,串联爬虫、数据分析以及数据挖掘多个知识点。 通过实战案例演练,你可以全面掌握股票收益的分析和预判方法,在收获新技能的同时,也有机会获得“睡后收入”! 四大优势: 三重权益:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武帝为此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值