从线性回归到最小二乘法和梯度下降法

线性回归

如下图,要对样本点进行线性拟合,求得使预测尽可能准确的函数,这个过程就是线性回归

 

线性函数

单变量

上升到两个变量即为如下形式

两个变量

image

多个变量即可以写成

多变量

我们可以使用误差平方和(几何中可视为欧式距离的平方)来度量回归任务的性能。

那么我们如何找到一条直线,使所有样本到直线地距离之和最小呢? 这就是最小二乘法(least square method)————基于误差平方和最小化来进行模型求解.

如果上升到更高维的空间,我们如何解释最小二乘呢。下面一小节尝试使用最大似然估计来解释最小二乘的合理性。

从最大似然解释最小二乘

线性回归似然函数如下

似然函数

假设误差 ​是独立同分布的,服从均值为 0,方差为 σ 平方的高斯分布(中心极限定理)。

中心极限定理的意义

实际问题中,很多随机现象可以看做众多因素的独立影响的综合反应,往往近似服从正态分布

  • 城市耗电量: 大量用户的耗电总和
  • 测量误差: 许多观察不到的、微小误差的总和

注: 应用前提是多个随机变量的和,有些问题是乘性误差,则需要鉴别或者取对数后再使用

根据以上,有概率密度以及似然估计

概率密度-似然估计

求解似然函数,将其取对数

求解似然函数

要使 l(θ) 最大,则上式减号右边的式子最小,即下式最小。下式形式与最小二乘相同,由此可解释最小二乘的合理性。

image

最小二乘与极大似然的区别

  • 最小二乘法:即观测值与实际数据误差平方和最小,其没有假设,几何意义上就是距离最小

  • 最大似然估计:估计参数可能值,使样本发生概率最大

最小二乘求解

将 m 个 n 维样本组成矩阵 X,每行对应一个样本,每列对应一个维度,额外一维常数项,全为 1

目标函数

目标函数

对上式求梯度

求梯度

令其最小,求驻点,则有

求驻点

损失函数增加正则项防止过拟合

常见的有以下三种

  • L1-norm (LASSO)

    L1 正则

    L1 正则可以做特征选择

  • L2-norm (Ridge)

    L2 正则

    L2 正则比较常用

  • Elastic Net

    Elastic Net

    结合 L1 和 L2

梯度下降法 (Gradient Descent)

接下来我们使用梯度下降法来求解上文中的目标函数 J(θ) ​,步骤如下

  1. 随机初始化 ​θ

  2. 沿着负梯度方向迭代,使更新后的 θ​ 令 J(θ) ​ 更小,公式如下

    迭代公式

    ​ α 为学习率、步长

  3. 当下降到无法下降或某个定义的极小值时,则停止下降。

注:梯度下降的最终点并非是全局最小点,可能是一个局部最小点

梯度下降

梯度方向,偏导数计算

偏导

批量梯度下降法(Batch Gradient Descent)

批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新,也就是上文中的计算方法

批量梯度下降

随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本来求梯度。

随机梯度下降

对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样本来迭代,即若干个样本的平均梯度作为更新方向,1<x<m。一般可以取 x=10,当然根据样本的数据,可以调整这个x的值。



作者:Skye_kh
链接:https://www.jianshu.com/p/1c86f9770aa7
來源:简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您解答。 首先,最小二乘法梯度下降都是线性回归的常见求解方之一。它们的目标都是最小化预测值与真实值之间的平均误差,即最小化损失函数。下面我将分别给出两种方的实现过程。 1. 最小二乘法实现线性回归 最小二乘法是一种基于最小化残差平方和的线性回归,它的数学推导可以参考统计学习方中的第三章。在这里,我们直接给出最小二乘法的实现代码。 ```python import numpy as np class LinearRegression: def __init__(self): self.w = None def fit(self, X, y): X = np.hstack((np.ones((X.shape[0], 1)), X)) self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) def predict(self, X): X = np.hstack((np.ones((X.shape[0], 1)), X)) return X.dot(self.w) ``` 在上述代码中,fit方中的X为输入数据,y为对应的真实值。在实现中,我们将X的第一列加上了全为1的一列,以便于计算截距项。然后,我们直接调用numpy的线性代数库求解w的最优解。最后,predict方用于对新的数据进行预测,其中同样需要将输入数据的第一列加上全为1的一列。 2. 梯度下降实现线性回归 梯度下降是一种基于不断迭代更新权重的方,通过最小化损失函数来求解线性回归的最优解。其数学推导可以参考统计学习方中的第四章。下面是梯度下降的实现代码。 ```python import numpy as np class LinearRegression: def __init__(self, lr=0.01, max_iter=1000): self.lr = lr self.max_iter = max_iter self.w = None def fit(self, X, y): X = np.hstack((np.ones((X.shape[0], 1)), X)) self.w = np.zeros(X.shape[1]) for i in range(self.max_iter): grad = X.T.dot(X.dot(self.w) - y) / X.shape[0] self.w -= self.lr * grad def predict(self, X): X = np.hstack((np.ones((X.shape[0], 1)), X)) return X.dot(self.w) ``` 在上述代码中,fit方中的lr为学习率,max_iter为最大迭代次数,X为输入数据,y为对应的真实值。在实现中,我们同样将X的第一列加上了全为1的一列,以便于计算截距项。然后,我们通过不断迭代更新权重w来最小化损失函数,其中grad为损失函数对权重的梯度。最后,predict方用于对新的数据进行预测,其中同样需要将输入数据的第一列加上全为1的一列。 至此,我已经为您分别基于最小二乘法梯度下降实现了书上小花数量预测的线性回归。如有疑问,欢迎继续追问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值