Skip to content

Commit 7b02527

Browse files
committed
Create notes of GDA.
1 parent 5eb3a4e commit 7b02527

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# 4.0 生成学习算法
2+
3+
在分类问题中,我们之前的处理方法是:给定特征,输出它属于哪一类。基于图示,我们可以将其表示为两个大圆 $A$ 和 $B$,我们的工作就是在这两个大圆圈中找到一条分界线(即 $\theta^{\text T} x$,正式名称是决策边界),这条分界线对应着 $p(y \in A) = p(y \in B) = 1/2$. 如下图:
4+
5+
<img src="./images/J2-1-4-1-判别学习算法.png" style="zoom:72%;" />
6+
7+
现在我们介绍另一种算法。刚刚我们是给定特征判断属于哪一类,相当于是去计算 $p(y \mid x)$. 现在我们给定类去总结它有什么特征。比如,我们在绿色区域去总结其数据特点,然后在蓝色区域总结其数据特点,即计算 $p(x \mid y)$。现在我们的目标是给定某个特征,判断属于绿色区域还是蓝色区域,即我们需要通过 $p(x \mid y)$ 导出 $p(y \mid x)$,这就需要利用贝叶斯公式:
8+
$$
9+
p(y \mid x) = \frac{p(x \mid y) p(y)}{p(x)} = \frac{p(x \mid y) p(y)}{p(x \mid y = 1) p(y = 1) + p(x \mid y = 0) p(y = 0)}.
10+
$$
11+
其中 $p(y)$ 可以用样本中 $y$ 类的占比来估计,即以频率估计概率。
12+
13+
我们把第一种方法,即直接拟合 $p(y \mid x)$ 的方法称为判别学习算法,把第二种方法,即拟合 $p(x \mid y)$,然后通过贝叶斯公式间接导出 $p(y \mid x)$ 的方法称为生成学习算法。
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 4.1 高斯判别分析 GDA
2+
3+
## 多元高斯分布
4+
5+
$d$ 维高斯分布,亦称 $d$ 维正态分布,以期望向量 $\mu$ 和协方差矩阵 $\Sigma \in \mathbb R^{d \times d}$ 为参数,其中 $\Sigma$ 是半正定矩阵,记作 $\mathcal N(\mu, \Sigma)$。其联合分布为
6+
$$
7+
p(x; \mu, \Sigma) = \frac{1}{(2 \pi)^{d/2} |\Sigma|^{1/2}} \exp
8+
\left(
9+
-\frac{1}{2} (x - \mu)^{\text T} \Sigma^{-1} (x - \mu)
10+
\right).
11+
$$
12+
13+
## 高斯判别分析模型 GDA
14+
15+
虽然名为“判别”,但 GDA 实际上是一种生成学习算法。由于历史原因,我们姑且叫它“判别”。
16+
17+
在 GDA 中,我们用多元高斯分布来拟合 $p(x \mid y)$,即
18+
$$
19+
\begin{align}
20+
y & \sim \text{Bernoulli}(\phi) \\
21+
x \mid y = 0 &\sim \mathcal N(\mu_0, \Sigma) \\
22+
x \mid y = 1 &\sim \mathcal N(\mu_1, \Sigma) \\
23+
\end{align}
24+
$$
25+
写出分布:
26+
$$
27+
\begin{align}
28+
p(y) &= \phi^y (1 - \phi)^{1 - y} \\
29+
p(x \mid y = 0) &= \frac{1}{(2 \pi)^{d/2} |\Sigma|^{1/2}} \exp \left( -\frac{1}{2} (x - \mu_0)^{\text T} \Sigma^{-1} (x - \mu_0) \right) \\
30+
p(x \mid y = 1) &= \frac{1}{(2 \pi)^{d/2} |\Sigma|^{1/2}} \exp \left( -\frac{1}{2} (x - \mu_1)^{\text T} \Sigma^{-1} (x - \mu_1) \right)
31+
\end{align}
32+
$$
33+
在此处,参数为 $\phi, \mu_0, \mu_1, \Sigma$,两个高斯分布的期望向量不同,但协方差矩阵相同。对数似然函数为
34+
$$
35+
\begin{align}
36+
l(\phi, \mu_0, \mu_1, \Sigma) &= \log \prod_{i = 1}^{n} p(x^{(i)}, y^{(i)}; \phi, \mu_0, \mu_1, \Sigma) \\
37+
&= \log \prod_{i = 1}^{n} p(x^{(i)} \mid y^{(i)}; \mu_0, \mu_1, \Sigma) p(y^{(i)}; \phi).
38+
\end{align}
39+
$$
40+
为使对数似然函数最大化,通过计算对各参数的梯度,我们可以获得参数的值:
41+
$$
42+
\begin{align}
43+
\phi &= \frac{1}{n} \sum_{i = 1}^{n} I\set{y^{(i)} = 1} \\
44+
\mu_0 &= \frac{\sum_{i = 1}^{n} I\set{y^{(i)} = 0} x^{(i)}}{\sum_{i = 1}^{n} I\set{y^{(i)} = 1}} \\
45+
\mu_1 &= \frac{\sum_{i = 1}^{n} I\set{y^{(i)} = 1} x^{(i)}}{\sum_{i = 1}^{n} I\set{y^{(i)} = 1}} \\
46+
\Sigma &= \frac{1}{n} \sum_{i = 1}^{n} (x^{(i)} - \mu_{y^{(i)}})(x^{(i)} - \mu_{y^{(i)}})^{\text T}.
47+
\end{align}
48+
$$
49+
下图是 GDA 给出的决策边界:
50+
51+
<img src="./images/J2-1-4-2-1-GDA.png" style="zoom:72%;" />
52+
53+
在这条红线上,我们的预测是 $p(y = 0 \mid x) = p(y = 1 \mid x) = 0.5$;在其中一侧,$p(y = 0 \mid x) > p (y = 1 \mid x)$,因此我们预测这一侧为 $y = 0$;在另一侧则反之,$p(y = 1 \mid x) > p(y = 0 \mid x)$,因此我们预测这一侧为 $y = 1$.
54+
55+
## GDA 与逻辑回归
56+
57+
如果我们把上面的结果代入贝叶斯公式,有
58+
$$
59+
p(y = 1 \mid x; \phi, \Sigma, \mu_0, \mu_1) = \frac{1}{1 + \exp(-\theta^{\text T} x)},
60+
$$
61+
其中 $\theta$ 是 $\phi, \Sigma, \mu_0, \mu_1$ 的函数。而上式正是逻辑回归函数——一个判别算法。
62+
63+
那么,通过 GDA 预测和通过逻辑回归预测的效果是否相同呢?答案是否定的。
64+
65+
我们刚刚已经说明了如果 $p(x|y)$ 是一个多元高斯分布(且具有相同的协方差矩阵 $\Sigma$ ),那么 $p(y|x)$ 则必然符合一个逻辑函数。然而,逆命题是不成立的,即假如 $p(y|x)$ 是一个逻辑函数,这并不能保证 $p(x|y)$ 一定是一个多元高斯分布。
66+
67+
这就表明**高斯判别模型相比逻辑回归对数据做了更强的假设**。 这也就意味着,在这两种模型的假设都成立的时候(即 $p(x \mid y)$ 确实符合高斯分布时),用 GDA 去拟合数据是更好的,因为它保存了更多的信息,即此时 GDA 是**渐进有效的(asymptotically efficient)**。 实际上,在面对非常大的训练集(训练样本规模 $m$ 特别大)时,严格来说,可能就没有什么别的算法能比 GDA 更好(“好”的标准可能如:对 $p(y|x)$ 估计的准确度等)。所以在这种情况下就表明,GDA 是一个比逻辑回归更好的算法;即便对于小规模的训练集,我们最终也会发现高斯判别分析(GDA)是更好的。
68+
69+
反之,由于逻辑回归做出的假设要明显更弱一些,所以因此逻辑回归的**通用性**也更强,同时也对错误的建模假设不那么敏感。有很多不同的假设都能够将 $p(y|x)$ 引向逻辑回归函数。例如,如果 $x|y = 0\sim \text{Poisson}(\lambda_0)$ 是一个泊松分布,而$x|y = 1\sim \text{Poisson}(\lambda_1)$也是一个泊松分布,那么 $p(y|x)$ 也将符合逻辑函数。逻辑回归也适用于这类的泊松分布的数据。但对这样的数据,如果我们强行使用 GDA,然后用高斯分布来拟合这些非高斯数据,那么结果预测的准确性就会降低。
70+
71+
总结:高斯判别分析方法(GDA)能够建立更强的模型假设,并且在数据利用上更加有效(比如说,使用比较少的训练集就能有"还不错的"效果),当然前提是模型假设争取或者至少接近正确。逻辑回归建立的假设更弱,因此对于偏离的模型假设来说更加稳定。如果训练集数据的确是非高斯分布的,而且是有限的大规模数据,那么逻辑回归几乎总是比GDA要更好的。因此,在实际中,逻辑回归的使用频率要比 GDA 高得多。(关于判别和生成模型的对比的相关讨论也适用于我们下面要讲的朴素贝叶斯算法(Naive Bayes),但朴素贝叶斯算法还是被认为是一个非常优秀也非常流行的分类算法。)
28.4 KB
Loading
29.2 KB
Loading

0 commit comments

Comments
 (0)