我试图理解判别模型和生成模型之间的区别。堆栈溢出的有用答案之一是:生成算法和判别算法之间有什么区别?
在最上面的答案中(请参阅上面的链接),有一个简单的示例,其中只有四个
(x,y)
形式的数据点。答案的作者说了以下内容:分布p(y|x)
是将给定示例x
分类为类y
的自然分布,这就是为什么直接对此进行建模的算法被称为判别算法。生成算法模型p(x,y)
,可以通过应用贝叶斯规则将其转化为p(y|x)
,然后用于分类。然而,分布p(x,y)
也可以用于其他目的。例如,您可以使用 p(x,y)
来 生成 可能的 (x,y)
对。
我不太明白如何使用
p(x,y)
来生成可能的(x,y)
对。有人可以帮助我给出使用联合概率分布 (x,y)
生成的 p(x,y)
对的具体示例吗?另外,有人也可以告诉我为什么条件概率分布p(y|x)
不能用于生成新对吗?非常感谢。
我对此很困惑。请帮助我。
这是一个简单但真实的示例来说明这些概念。
棕色眼睛比蓝色眼睛占主导地位。我的祖母有蓝色的眼睛。她的丈夫出身于一个只有棕色眼睛的家庭。我的父亲也一样。我和一个蓝眼睛的女人育有两个孩子。让我们让
x
和 y
成为这些孩子的眼睛颜色,最大的孩子是 y
,较小的孩子是 x
。为了讨论潜在的遗传学,让我们使用 B
代表棕色眼睛的基因,使用 b
代表蓝色眼睛的基因。
首先让我们弄清楚
p(x, y)
。我母亲的基因是bB
。她有一双棕色的眼睛。我父亲的眼睛是BB
,他有棕色的眼睛。根据我妈妈给我的东西,我有偶数的bB
和BB
,但我不知道。
然后我和一个有基因的蓝眼睛女人生了孩子
bb
。
如果我的基因是
BB
,那么我的孩子都是 bB
并且会有棕色眼睛。
如果我的基因是
bB
,那么每个孩子都有 bb
和 bB
的偶数几率,彼此独立。因此,我的孩子们可能会以同等的可能性出现 (blue, blue)
、(blue, brown)
、(brown, blue)
和 (brown, brown)
。
当你把它加起来时,我们得到以下赔率:
(blue, blue): 1/8
(brown, blue): 1/8
(blue, brown): 1/8
(brown, brown): 5/8
那就是
p(x, y)
。让我们展示如何生成一对。
首先计算出累积概率。按照这个顺序是
1/8, 1/4, 3/8, 1
。现在只需滚动一个随机数即可。我刚刚得到0.7284333516674881
。与累积概率相比,我得到了 (brown, brown)
,所以这就是我生成的。 (有趣的是,这也是我孩子的眼睛颜色!)
如果我更改列出概率的顺序,则哪个随机数对应于哪个输出将发生变化。但输出会产生正确的频率。
现在我们来锻炼一下
p(x | y)
。如果您使用贝叶斯公式,您可以验证:
(blue|blue): 1/2
(brown|blue): 1/2
(blue|brown): 1/6
(brown|brown): 5/6
现在,根据第一个孩子的眼睛颜色,我们可以算出第二个孩子的眼睛颜色可能是什么。这正是我们所需要的判别算法。
但是我们完全不知道如何从这些数字中先验地判断第一个孩子拥有
brown
眼睛的几率是1/2
(天真的猜测)还是3/4
(真正的答案)。如果它们是 1/2
那么我们的第一张桌子将会是:
(blue, blue): 1/4
(brown, blue): 1/4
(blue, brown): 1/12
(brown, brown): 5/12
显然,这将生成比真实分布更均匀的分布。它恰好给出了相同的
p(x|y)
。因此,与判别算法相比,我们需要更多关于生成算法的信息。具体来说,我们需要知道p(y)
。
这让你明白了吗?