生成和区分algorithm有什么区别?
请帮助我理解生成式algorithm和区分algorithm之间的区别,牢记我只是一个初学者。
假设您有input数据x,并且想要将数据分类到标签y中。 一个生成模型学习联合概率分布p(x,y)
,一个判别模型学习条件概率分布p(y|x)
– 你应该读作“给定x的概率” 。
这是一个非常简单的例子。 假设你有以下forms(x,y)的数据:
(1,0), (1,0), (2,0), (2, 1)
p(x,y)
是
y=0 y=1 ----------- x=1 | 1/2 0 x=2 | 1/4 1/4
p(y|x)
是
y=0 y=1 ----------- x=1 | 1 0 x=2 | 1/2 1/2
如果你花几分钟时间盯着这两个matrix,你就会明白两个概率分布之间的差别。
分布p(y|x)
是将给定的例子x
分类成y
类的自然分布,这就是为什么直接build模的algorithm被称为区分algorithm。 生成algorithm模型p(x,y)
,可以通过应用贝叶斯规则转化为p(y|x)
,然后用于分类。 但是,分布p(x,y)
也可以用于其他目的。 例如,你可以使用p(x,y)
来生成可能的(x,y)
对。
从上面的描述中,您可能会认为生成模型更普遍有用,因此更好,但并不那么简单。 本文是一个非常stream行的歧视性与生成性分类器主题的参考,但它是相当沉重的。 总的来说,判别模型通常在分类任务中优于生成模型。
生成algorithm模拟如何生成数据以对信号进行分类。 它提出了这样一个问题:根据我这一代的假设,哪一类最有可能产生这个信号?
区分algorithm不关心数据是如何生成的,只是对给定的信号进行分类。
想象一下你的任务是把一个演讲分类到一种语言:
你可以这样做:
1)学习每种语言,然后用你刚刚获得的知识进行分类
要么
2)确定语言模型的差异,而不学习语言,然后对语音进行分类。
第一个是生成方法,第二个是判别方法。
检查这个参考更多细节: http : //www.cedar.buffalo.edu/~srihari/CSE574/Discriminative-Generative.pdf
虽然这个话题已经很老了,但我认为值得加上这个重要的区别。 在实践中,模型使用如下。
在训练样例x中预测标签y的区分性模型中,您必须评估:
哪个只select考虑x的最可能的课程。 这就像我们试图模拟类之间的决策边界 。 这种行为在neural network中是非常清楚的,计算的权重可以看作是一个复杂的形状曲线,将空间中一个类的元素隔离开来。
现在使用贝叶斯的规则,让我们来replace 在等式中 。 既然你只是对arg max感兴趣,你可以消除分母,对于每一个y都是一样的。 所以你离开了
您在生成模型中使用哪个等式? 在第一种情况下,你有条件概率分布 p(y | x),它模拟了类之间的边界,在第二种情况下,有联合概率分布 p(x,y),因为p(x,y)= p (x | y)p(y),它明确地模拟每个类的实际分布 。
使用联合概率分布函数,给定y,可以计算(“生成”)其各自的x。 为此,他们被称为生成模型。
我从CS299的讲义中读了一个例子,这有助于我真正理解区分性学习algorithm和生成 性学习algorithm的区别:
假设我们有两类动物,象(y = 1)和狗(y = 0)。 x是动物的特征。
给定一个训练集,像逻辑回归或感知器algorithm(基本上)的algorithm试图find一条直线,即决定边界,将大象和狗分开。 然后,将新的动物分类为大象或狗,它检查它所处的决策边界的哪一边,并据此做出预测。 我们把这些判别式学习algorithm称为。
这是一个不同的方法。 首先,看大象,我们可以build立一个大象模型。 然后,看着狗,我们可以build立一个狗看起来像一个单独的模型。 最后,为了对新的动物进行分类,我们可以将新动物与大象模型进行匹配,并将其与狗模型进行匹配,以查看新动物是否看起来更像大象,或者更像是我们在训练集中看到的狗。 我们将这些生成学习algorithm称为。
一般来说,机器学习社区有一个习惯,不要去学习你不想要的东西。 例如,考虑一个分类问题,其目标是将y标签分配给给定的xinput。 如果我们使用生成模型
p(x,y)=p(y|x).p(x)
我们必须为p(x)build模,这与手头的任务无关。 像数据稀疏这样的实际限制会迫使我们用一些弱的独立性假设来模拟p(x)
。 因此,我们直观地使用区分模型进行分类。
另外的信息点,与上面的StompChicken的答案很好。
区分模型和生成模型的根本区别在于:
区分模型学习类之间的(硬或软)边界
生成模型模拟各个类的分布
我的两分:歧视方法突出差异生成方法不关注差异; 他们试图build立一个代表class级的模式。 两者之间有重叠。 理想情况下,两种方法都应该被使用:find相似性是有用的,而另一种方法将有助于发现不相似之处。