From 5423003f546b90c6c9d6793c52602df74a70b8c5 Mon Sep 17 00:00:00 2001 From: jackfrued Date: Wed, 15 Jan 2025 18:47:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E6=9C=BA=E5=99=A8?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E9=83=A8=E5=88=86=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Day81-90/85.回归模型.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Day81-90/85.回归模型.md b/Day81-90/85.回归模型.md index cf057e5..47483da 100755 --- a/Day81-90/85.回归模型.md +++ b/Day81-90/85.回归模型.md @@ -29,9 +29,9 @@ $$ 上面的公式也可以用向量的形式简化表示为: $$ - y = \mathbf{x}^{T} \mathbf{\beta} + \varepsilon + y = \bf{x}^{T} \bf{\beta} + \varepsilon $$ - 其中,$\small{\mathbf{x} = [1, x_{1}, x_{2}, \dots, x_{n}]^{T}}$ 是包含截距的输入向量,$\small{\mathbf{\beta} = [\beta_{0}, \beta_{1}, \beta_{2}, \dots, \beta_{n}]^{T}}$ 是模型参数(包括截距 $\small{\beta_{0}}$ 和回归系数 $\small{\beta_{1}, \beta_{2}, \cdots, \beta_{n}}$),$\small{\varepsilon}$ 是误差项。 + 其中,$\small{\bf{x} = [1, x_{1}, x_{2}, \dots, x_{n}]^{T}}$ 是包含截距的输入向量,$\small{\bf{\beta} = [\beta_{0}, \beta_{1}, \beta_{2}, \dots, \beta_{n}]^{T}}$ 是模型参数(包括截距 $\small{\beta_{0}}$ 和回归系数 $\small{\beta_{1}, \beta_{2}, \cdots, \beta_{n}}$),$\small{\varepsilon}$ 是误差项。 2. **多项式回归**(Polynomial Regression):引入高阶特征,使模型能拟合更复杂的非线性关系,属于线性模型的扩展,因为因为它对参数 $\small{\beta}$ 的求解仍然是线性形式,如下面所示的二次关系: $$ @@ -49,42 +49,42 @@ ### 回归系数的计算 -建立回归模型的关键是找到最佳的回归系数 $\small{\mathbf{\beta}}$,所谓最佳回归系数是指让模型对数据的拟合效果达到最好的模型参数,即能够最小化模型的预测值 $\small{\hat{y}_{i}}$ 与实际观测值 $\small{y_{i}}$ 之间差异的模型参数。为此,我们先定义如下所示的损失函数。 +建立回归模型的关键是找到最佳的回归系数 $\small{\bf{\beta}}$,所谓最佳回归系数是指让模型对数据的拟合效果达到最好的模型参数,即能够最小化模型的预测值 $\small{\hat{y}_{i}}$ 与实际观测值 $\small{y_{i}}$ 之间差异的模型参数。为此,我们先定义如下所示的损失函数。 $$ -L(\mathbf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} +L(\bf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} $$ 其中,$\small{m}$表示样本容量,代入回归模型,有: $$ -L(\mathbf{\beta}) = \sum_{i=1}^{m}(y_{i} - \mathbf{x}_{i}^{T}\mathbf{\beta})^{2} +L(\bf{\beta}) = \sum_{i=1}^{m}(y_{i} - \bf{x}_{i}^{T}\bf{\beta})^{2} $$ 如果用矩阵形式表示,有: $$ -L(\mathbf{\beta}) = (\mathbf{y} - \mathbf{X\beta})^{T}(\mathbf{y} - \mathbf{X\beta}) +L(\bf{\beta}) = (\bf{y} - \bf{X\beta})^{T}(\bf{y} - \bf{X\beta}) $$ -其中,$\mathbf{y}$ 是目标值的向量,大小为 $\small{m \times 1}$,$\mathbf{X}$ 是特征矩阵,大小为 $\small{m \times n}$,$\small{\mathbf{\beta}}$ 是回归系数的向量,大小为 $\small{n \times 1}$。 +其中,$\bf{y}$ 是目标值的向量,大小为 $\small{m \times 1}$,$\bf{X}$ 是特征矩阵,大小为 $\small{m \times n}$,$\small{\bf{\beta}}$ 是回归系数的向量,大小为 $\small{n \times 1}$。 -通过最小化损失函数 $\small{L(\mathbf{\beta})}$,我们可以得到线性回归模型的解析解。对 $\small{L(\mathbf{\beta})}$ 求导并令其为 0,有: +通过最小化损失函数 $\small{L(\bf{\beta})}$,我们可以得到线性回归模型的解析解。对 $\small{L(\bf{\beta})}$ 求导并令其为 0,有: $$ -\frac{\partial{L(\mathbf{\beta})}}{\partial{\mathbf{\beta}}} = -2\mathbf{X}^{T}(\mathbf{y} - \mathbf{X\beta}) = 0 +\frac{\partial{L(\bf{\beta})}}{\partial{\bf{\beta}}} = -2\bf{X}^{T}(\bf{y} - \bf{X\beta}) = 0 $$ 整理后得到: $$ -\mathbf{\beta} = (\mathbf{X}^{T}\mathbf{X})^{-1}\mathbf{X}^{T}\mathbf{y} +\bf{\beta} = (\bf{X}^{T}\bf{X})^{-1}\bf{X}^{T}\bf{y} $$ -对于矩阵 $\small{\mathbf{X}^{T}\mathbf{X}}$ 不满秩的情况,可以通过添加正则化项的方式使得矩阵可逆,如下所示,这个就是线性回归的解析解。 +对于矩阵 $\small{\bf{X}^{T}\bf{X}}$ 不满秩的情况,可以通过添加正则化项的方式使得矩阵可逆,如下所示,这个就是线性回归的解析解。 $$ -\mathbf{\beta} = (\mathbf{X}^{T}\mathbf{X} + \mathbf{\lambda \mit{I}})^{-1}\mathbf{X}^{T}\mathbf{y} +\bf{\beta} = (\bf{X}^{T}\bf{X} + \bf{\lambda \mit{I}})^{-1}\bf{X}^{T}\bf{y} $$ > **说明**:如果你对这里提到的正则化不理解可以先放放,后面我们再来讨论这个问题。 -上述方法适用于小规模数据集,当数据体量不大(样本和特征数量较少)时,计算效率是没有问题的。对于大规模数据集或更为复杂的优化问题,我们可以使用**梯度下降法**,通过迭代更新参数来逐步逼近最优解。梯度下降法的目标也是最小化损失函数,该方法通过计算梯度方向进行参数更新。梯度是一个向量,包含了目标函数在各个参数方向上的偏导数。对于上面的损失函数 $\small{L(\mathbf{\beta})}$,梯度可以表示为: +上述方法适用于小规模数据集,当数据体量不大(样本和特征数量较少)时,计算效率是没有问题的。对于大规模数据集或更为复杂的优化问题,我们可以使用**梯度下降法**,通过迭代更新参数来逐步逼近最优解。梯度下降法的目标也是最小化损失函数,该方法通过计算梯度方向进行参数更新。梯度是一个向量,包含了目标函数在各个参数方向上的偏导数。对于上面的损失函数 $\small{L(\bf{\beta})}$,梯度可以表示为: $$ -\nabla L(\mathbf{\beta}) = \left[ \frac{\partial{L}}{\partial{\beta_{1}}}, \frac{\partial{L}}{\partial{\beta_{2}}}, \cdots, \frac{\partial{L}}{\partial{\beta_{n}}} \right] +\nabla L(\bf{\beta}) = \left[ \frac{\partial{L}}{\partial{\beta_{1}}}, \frac{\partial{L}}{\partial{\beta_{2}}}, \cdots, \frac{\partial{L}}{\partial{\beta_{n}}} \right] $$ -梯度下降法通过以下更新规则来更新参数 $\small{\mathbf{\beta}}$: +梯度下降法通过以下更新规则来更新参数 $\small{\bf{\beta}}$: $$ -\mathbf{\beta}^{\prime} = \mathbf{\beta} - \alpha \nabla L(\mathbf{\beta}) \\ -\mathbf{\beta} = \mathbf{\beta^{\prime}} +\bf{\beta}^{\prime} = \bf{\beta} - \alpha \nabla L(\bf{\beta}) \\ +\bf{\beta} = \bf{\beta^{\prime}} $$ 其中,$\small{\alpha}$​ 是学习率(step size),通常是一个较小的正数,用于控制每次更新的幅度。如果学习率 $\small{\alpha}$ 选择得当,梯度下降法将收敛到目标函数的局部最小值。如果学习率过大,可能导致震荡不收敛;如果学习率过小,则收敛的速度缓慢,需要更多次的迭代。 @@ -283,7 +283,7 @@ print(f'决定系数: {r2:.4f}') 岭回归是在线性回归的基础上引入 $\small{L2}$ 正则化项,目的是防止模型过拟合,尤其是当特征数较多或特征之间存在共线性时。岭回归的损失函数如下所示: $$ -L(\mathbf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} + \lambda \sum_{j=1}^{n}\beta_{j}^{2} +L(\bf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} + \lambda \sum_{j=1}^{n}\beta_{j}^{2} $$ 其中,$\small{L2}$ 正则化项 $\small{\lambda \sum_{j=1}^{n} \beta_{j}^{2}}$ 会惩罚较大的回归系数,相当于缩小了回归系数的大小,但不会使系数为 0(即不会进行特征选择)。可以通过 scikit-learn 库`linear_model`模块的`Ridge`类实现岭回归,代码如下所示。 @@ -313,7 +313,7 @@ print(f'决定系数: {r2:.4f}') 套索回归引入 $\small{L1}$ 正则化项,不仅防止过拟合,还具有特征选择的功,特别适用于高维数据。套索回归的损失函数如下所示: $$ -L(\mathbf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} + \lambda \sum_{j=1}^{n}|\beta_{j}| +L(\bf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} + \lambda \sum_{j=1}^{n}|\beta_{j}| $$ 其中,$\small{L1}$ 正则化项 $\small{\lambda \sum_{j=1}^{n}|\beta_{j}|}$ 会将某些不重要的回归系数缩减为 0,从而实现特征选择。可以通过 scikit-learn 库`linear_model`模块的`Lasso`类实现岭回归,代码如下所示。 @@ -345,7 +345,7 @@ print(f'决定系数: {r2:.4f}') 弹性网络回归结合了岭回归和套索回归的优点,通过同时引入 $\small{L1}$ 和 $\small{L2}$ 正则化项,适用于高维数据且特征之间存在相关的情况,其损失函数如下所示: $$ -L(\mathbf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} + \alpha \lambda \sum_{j=1}^{n}|\beta_{j}| + (1 - \alpha) \lambda \sum_{j=1}^{n}\beta_{j}^{2} +L(\bf{\beta}) = \sum_{i=1}^{m}(y_{i} - \hat{y}_{i})^{2} + \alpha \lambda \sum_{j=1}^{n}|\beta_{j}| + (1 - \alpha) \lambda \sum_{j=1}^{n}\beta_{j}^{2} $$ 其中,$\small{\alpha}$ 是控制 $\small{L1}$ 和 $\small{L2}$ 正则化的权重比例。