Skip to content

Commit

Permalink
feat: 拉格朗日乘子法
Browse files Browse the repository at this point in the history
  • Loading branch information
tianxuzhang committed Dec 17, 2023
1 parent 9ec4a63 commit e9b9cae
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 5 deletions.
49 changes: 44 additions & 5 deletions docs/降维/LDA和QDA.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"id": "b55c768e",
"metadata": {},
"source": [
"#### LDA的数学表达\n",
"对于多分类,LDA的数学表达为[4]:\n",
"\n",
"LDA首先是为了分类服务的,因此只要找到一个投影方向ω,使得投影后的样本尽可能按照原始类别分开。\n",
Expand All @@ -46,29 +47,65 @@
"\n",
"那么,换成数学表达为:\n",
"\n",
"----------\n",
"1. 均值向量:对于每个类别 $i$,计算该类别所有样本特征向量的平均值。这个平均值被称为类别内均值向量 $\\mu_i$。\n",
"\n",
"公式:$\\mu_i = \\frac{1}{N_i} \\sum_{x \\in i} x$,其中 $x$ 属于类别 $i$,$N_i$ 是类别 $i$ 的样本数量。\n",
" \n",
"\n",
"2. 协方差矩阵:对于每个类别 $i$,计算该类别内样本与其类别内均值向量之间的协方差矩阵。协方差矩阵衡量了同一类别内样本之间的差异程度。\n",
"\n",
"公式:$S_i = \\frac{1}{N_i - C} \\sum_{x \\in i}(x - \\mu_i)(x - \\mu_i)^T$,其中 $C$ 是类别数量。\n",
"公式:$S_w = \\frac{1}{N_i - C} \\sum_{x \\in i}(x - \\mu_i)(x - \\mu_i)^T$,其中 $C$ 是类别数量。\n",
"\n",
"\n",
"3. 散度矩阵:计算不同类别之间的差异程度。通过计算每个类别均值向量 $\\mu_i$ 与总体均值向量 $\\mu$ 之间的协方差矩阵,可以得到类间散度矩阵 $S_b$。\n",
"\n",
"公式:$S_b = \\frac{1}{C-1} \\sum_{i=1}^{C} N_i (\\mu_i - \\mu)(\\mu_i - \\mu)^T$,其中 $\\mu$ 是总体均值向量。\n",
"\n",
"4. 解广义特征值:LDA的目标是找到一个投影向量 $w$,使得投影后的数据能够最大化同类样本之间的差异并最小化不同类样本之间的差异。\n",
"这可以通过求解广义特征值问题来实现。\n",
"这可以通过求解广义特征值问题来实现。我们分别定义“类内散度矩阵$S_w$”和“类间散度矩阵$S_b$”,可将最大化目标转变为$J$函数,即$S_b$与$S_w$的“广义瑞利商”:\n",
"\n",
"广义特征值问题的目标函数为:$J(w) = \\frac{w^T S_b w}{w^T S_w w}$,\n",
"其中 $S_b$ 是类间散度矩阵,$S_w$ 是类别内散度矩阵。\n",
"\n",
"通过求解这个特征值问题,我们可以得到最佳的投影向量 $w$,用于将高维数据映射到低维空间,并实现优秀的分类效果。\n",
"----------\n",
"\n",
"下面通过一个demo演示下sklearn中LDA的使用:"
"#### 拉格朗日乘子法最大化目标函数\n",
"下面推导下怎么求解这个目标函数:\n",
"\n",
"----------\n",
"我们需要使用拉格朗日乘子法来最大化目标函数,令分母为1,目标函数就转变为一个带约束条件 $w^T S_w w = 1$的优化问题。那么就可以用拉格朗日乘子法求解。\n",
"\n",
"首先,我们定义拉格朗日函数:\n",
"\n",
"$L(w, \\lambda) = w^T S_b w - \\lambda (w^T S_w w - 1)$\n",
"\n",
"其中,$\\lambda$ 是拉格朗日乘子。我们需要对 $L(w, \\lambda)$ 求解极大值。\n",
"\n",
"对 $L(w, \\lambda)$ 分别对 $w$ 和 $\\lambda$ 求偏导,并令其等于零,得到:\n",
"\n",
"$\\frac{\\partial L(w, \\lambda)}{\\partial w} = 2S_b w - 2\\lambda S_w w = 0$\n",
"\n",
"$\\frac{\\partial L(w, \\lambda)}{\\partial \\lambda} = w^T S_w w - 1 = 0$\n",
"\n",
"根据第一个方程可得:\n",
"\n",
"$S_b w = \\lambda S_w w$\n",
"\n",
"最终,我们得到了 $S_bw = \\lambda S_ww$ 的形式。\n",
"\n",
"-----\n",
"\n",
"这个推导过程是通过最大化目标函数并应用拉格朗日乘子法得到的。它将权重向量 $w$ 与类间散度矩阵 $S_b$ 和类内散度矩阵 $S_w$ 相关联,其中 $\\lambda$ 是一个常数。\n",
"\n",
"$S_bw = \\lambda S_ww$\n",
"\n",
"\n",
"我们可以发现:$w$的闭式解是 $S_w^{-1}S_b$ 的特征向量组成的矩阵,同时我们可以知道最多有$C-1$个特征值。\n",
"\n",
"若将W视为一个投影矩阵,则多分类LDA会将样本投影到最多$C-1$维的空间中,因此,可通过这个投影来减少样本点的维数,且投影过程中使用了类别信息,所以LDA也是一种经典的监督降维算法。\n",
"\n",
"下面通过一个demo演示下sklearn中LDA的使用:\n"
]
},
{
Expand Down Expand Up @@ -126,7 +163,9 @@
"\n",
"参考[3]书中的Fig 7. 两个类具有相等的协方差(变量 1 和变量 2 之间的关系对两个类来说是相同的)和不等的协方差的例子。\n",
"\n",
"![](../../images/qda.png)\n"
"![](../../images/qda.png)\n",
"\n",
"推导略,看懂了再补上~~~"
]
},
{
Expand Down
88 changes: 88 additions & 0 deletions docs/降维/线性代数.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,94 @@
"\\end{bmatrix}\n",
"$"
]
},
{
"cell_type": "markdown",
"id": "dccdb179",
"metadata": {},
"source": [
"## 广义特征值问题\n",
"广义特征值问题(Generalized Eigenvalue Problem)是指在求解形如 $Ax = λBx$ 的特征值问题中,矩阵 $A$ 和 $B$ 不一定是方阵,且矩阵 $A$ 和 $B$ 可能不对称。这个问题的解决方案是找到一个向量 $x$ 和一个标量 $λ$,使得等式成立。\n",
"\n",
"广义特征值问题可以通过广义瑞利商(Generalized Rayleigh quotient)来表示和求解。广义瑞利商是一种用于计算广义特征值的函数。\n",
"\n",
"给定两个非零向量 $x$ 和 $y$,并且矩阵 $B$ 是非奇异矩阵,则广义瑞利商定义为:\n",
"\n",
"$\n",
"R(x, y) = \\frac{x^T A y}{x^T B y}\n",
"$\n",
"\n",
"其中,$A$ 和 $B$ 是两个相关联的矩阵。\n",
"\n",
"要解决广义特征值问题,我们需要找到一个向量 $x$ 和一个标量 $λ$,使得它们满足:\n",
"\n",
"$Ax = λBx$\n",
"\n",
"或者,根据广义瑞利商的定义,我们可以将其表示为:\n",
"\n",
"$R(x, y) = \\frac{x^T A x}{x^T B x} = λ$\n",
"\n",
"通过求解广义瑞利商的最大值或最小值,我们可以找到最大或最小的特征值 $λ$,以及对应的特征向量 $x$。"
]
},
{
"cell_type": "markdown",
"id": "86a5fbb0",
"metadata": {},
"source": [
"## 非奇异矩阵\n",
"在线性代数中,一个矩阵被称为非奇异矩阵(non-singular matrix),也被称为可逆矩阵(invertible matrix)或满秩矩阵(full-rank matrix)。非奇异矩阵具有以下特点:\n",
"\n",
"* 行列式非零:一个矩阵 $A$ 如果其行列式(Determinant)不等于零,则矩阵$A$是非奇异的。行列式为零意味着矩阵的行或列之间存在线性相关关系,无法求逆。\n",
"\n",
"* 可逆性:非奇异矩阵是可逆的,即存在一个逆矩阵(Inverse Matrix)B,使得 $AB = BA = I$,其中 $I$ 是单位矩阵。逆矩阵用来撤销矩阵的效果,可以还原回原始数据。\n",
"\n",
"* 满秩性:非奇异矩阵是满秩的,即其行向量或列向量的个数与矩阵维度相同,并且线性无关。满秩矩阵的行向量和列向量构成了整个向量空间,不会存在多余的冗余信息。\n",
"\n",
"非奇异矩阵在线性代数和相关领域中具有重要作用和应用。它们具有良好的性质,并且可以用于求解线性方程组、计算矩阵的逆、寻找矩阵特征值等。\n",
"\n",
"相反,奇异矩阵(singular matrix)是指行列式为零的矩阵。奇异矩阵不可逆,无法求解逆矩阵,也无法撤销其作用。"
]
},
{
"cell_type": "markdown",
"id": "bcf539e7",
"metadata": {},
"source": [
"## 拉格朗日乘子法\n",
"\n",
"拉格朗日乘子法(Lagrange Multiplier Method)发生在18世纪。当时,数学家们对于优化问题和约束条件的研究正处于蓬勃发展的阶段。\n",
"\n",
"在这个时期,人们开始思考如何找到一个函数的最大值或最小值,并受到了经济学和物理学等领域的启发。然而,他们发现,在实际问题中,通常会存在一些限制条件,这使得求解最优解变得更加复杂。\n",
"\n",
"正是在这样的背景下,拉格朗日乘子法应运而生。当时的数学家拉格朗日(Joseph-Louis Lagrange)成为该方法的奠基人。\n",
"\n",
"拉格朗日将约束条件与目标函数结合起来,形成一个新的函数,称为拉格朗日函数。这个函数考虑了目标函数和约束条件之间的关系。拉格朗日乘子的作用是平衡目标函数和约束条件对最优解的影响。\n",
"\n",
"通过对拉格朗日函数进行求导,并令导数等于零,拉格朗日乘子法提供了一种寻找满足约束条件的最优解的方法。这些导数方程形成了一组方程,可以通过求解它们来获得最优解。\n",
"\n",
"拉格朗日乘子法在当时引起了广泛的关注,并随后被推广应用于处理不等式约束和更复杂的优化问题。\n",
"\n",
"----------\n",
"\n",
"假设我们有一个优化问题,目标函数为 $f(\\mathbf{x})$,约束条件为 $g(\\mathbf{x}) = 0$。使用拉格朗日乘子法,我们可以构建一个拉格朗日函数:\n",
"\n",
"$L(\\mathbf{x}, \\lambda) = f(\\mathbf{x}) + \\lambda g(\\mathbf{x})$\n",
"\n",
"其中,$\\lambda$ 是拉格朗日乘子。我们的目标是在满足约束条件的前提下,最大化或最小化拉格朗日函数 $L(\\mathbf{x}, \\lambda)$。\n",
"\n",
"要求解该问题,我们需要同时考虑目标函数和约束条件的梯度。首先,我们计算拉格朗日函数的梯度:\n",
"\n",
"$\\nabla L(\\mathbf{x}, \\lambda) = \\nabla f(\\mathbf{x}) + \\lambda \\nabla g(\\mathbf{x})$\n",
"\n",
"然后,我们将梯度等于零,并加上约束条件:\n",
"\n",
"$\\nabla L(\\mathbf{x}, \\lambda) = \\mathbf{0}$\n",
"\n",
"$g(\\mathbf{x}) = 0$\n",
"\n",
"这样就形成了一组方程,我们可以通过求解这个方程组来找到最优解。具体求解方法可能涉及到数值优化算法,如牛顿法、梯度下降法等。"
]
}
],
"metadata": {
Expand Down

0 comments on commit e9b9cae

Please sign in to comment.