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