线性回归是机器学习中最简单的模型之一,在许多应用中都有广泛的应用。本篇文章将介绍如何用线性函数、梯度下降来解决线性回归问题。
线性回归
线性回归是一种用来预测连续输出变量(也叫做响应变量)与一个或多个自变量(也叫做解释变量)之间关系的模型。它的基本形式是:
y=β0+β1x1+β2x2+⋯+βnxn+ϵ
其中,y是目标变量,xi是自变量,βi 是每个自变量对应的权重,ϵ 是随机误差。该方程表明,目标变量y 与自变量 xi 的关系是线性的。
线性回归的目标是找到一组权重 βi,使得通过βi 和自变量xi 求得的y 值与实际目标变量y 值的差别最小。这个差别通常使用平方误差(Mean Squared Error,MSE)来表示:
MSE=n1∑i=1n(yi−yi^)2
其中n 是训练数据的数量,yi 是目标变量的真实值,yi^ 是通过自变量和权重求得的预测值。
线性函数
为了使用线性函数来估计权重 βi,我们首先需要定义一个线性函数,它的形式是:
y^=f(x;w)=w0+w1x1+w2x2+⋯+wpxp
其中,wi 是权重向量,xi 是输入向量。我们还可以将输入向量 x i x_ixi 表示为 [1,x1,x2,⋯,xp],这样就可以用一个向量 w 来表示所有的权重。这个线性函数也可以写成矩阵乘法的形式:y^=Xw
其中,X 是输入矩阵,它的每一行表示一个样本,每一列表示一个特征(也就是输入向量中的 xi)。权重向量w 是一个列向量,它的长度等于输入向量的长度加一(因为我们增加了一个截距项w0)。
我们可以使用线性函数来估计训练数据中的目标变量y 的值,也就是将输入向量xi 代入线性函数中得到yi^。然后,我们可以使用 MSE 函数来计算估计值 yi^ 和真实值 yi 之间的平方误差,如下所示:
MSE=n1∑i=1n(yi−yi^)2
我们的目标是使 MSE 最小化。我们可以通过最小化MSE 来找到最优的权重向量w,使得基于该向量的线性函数可以最好地拟合数据。
梯度下降
现在我们已经定义了线性函数和目标函数,我们需要找到一种方法来最小化目标函数。一种常用的方法是使用梯度下降。
梯度下降是一种数值优化算法,用于寻找一个函数的最小值。梯度下降的基本思想是,沿着函数的梯度(也称导数)的反方向进行移动,直到达到函数的最小值。梯度下降的算法包括以下几个步骤:
- 随机初始化权重向量w 的值。
- 计算目标函数MSE 的梯度。
- 更新权重向量w 的值。
- 重复步骤 2-3,直到达到收敛条件。
在第 2 步中,我们需要计算目标函数MSE 对权重向量w 的梯度。梯度是一组偏导数,它表示函数在每个方向上的变化率。对于目标函数MSE,其对权重向量w 的梯度为:∇wMSE=n2XT(Xw−y)
其中,∇w 表示对 w 向量取偏导数。这个式子可以用来计算梯度向量,它包含了每个权重向量w 对 MSE 的影响程度。因此,我们可以使用梯度向量来更新权重向量,使得权重向量向最小化MSE 的方向移动。更新权重向量的公式如下所示:w=w−α∇wMSE
其中,α 是学习率,它是用来控制每次迭代中的权重调整量大小的参数。我们可以根据经验来设定学习率,通常取值范围在 0.01 到 0.0001 之间。
实现代码
下面是一个 Python 实现的线性回归模型,使用了梯度下降法来最小化目标函数。该模型包括以下几个部分:
- 计算 MSE 函数和梯度向量。
- 实现梯度下降算法,并在每次迭代中更新权重向量。
- 计算训练数据和测试数据的 MSE。
- 绘制训练数据和测试数据的预测结果。