精华内容
下载资源
问答
  • 今天补了一下机器学习的数学知识,突然又遇到了判别模型和生成模型这两个词语,之前学习统计学习方法的时候也遇到过,当时就模模糊糊的,如今再遇到,发现我还是没明白, 但这次哪有轻易再放过去之理?所以查了很多...
  • 基于深度学习的儿童肺炎病原学类型判别模型.pdf
  • 生成模型判别模型

    千次阅读 2017-12-22 21:11:12
    生成模型判别模型  Ian在论文Generative Adversarial Nets中提出来的。  记录下自己的理解,日后忘记了也能用于复习。  本文地址:  http://blog.csdn.net/sxf1061926959/article/details/54630462 ...

    author:DivinerShi

    对抗网络是14年Goodfellow

    生成模型和判别模型

     Ian在论文Generative Adversarial Nets中提出来的。 
    记录下自己的理解,日后忘记了也能用于复习。 
    本文地址: 
    http://blog.csdn.net/sxf1061926959/article/details/54630462

    理解对抗网络,首先要了解生成模型和判别模型。判别模型比较好理解,就像分类一样,有一个判别界限,通过这个判别界限去区分样本。从概率角度分析就是获得样本x属于类别y的概率,是一个条件概率P(y|x).而生成模型是需要在整个条件内去产生数据的分布,就像高斯分布一样,他需要去拟合整个分布,从概率角度分析就是样本x在整个分布中的产生的概率,即联合概率P(xy)。具体可以参考博文http://blog.csdn.net/zouxy09/article/details/8195017

    对抗网络思想

    理解了生成模型和判别模型后,再来理解对抗网络就很直接了,对抗网络只是提出了一种网络结构,总体来说,整个框架还是很简单的。GANs简单的想法就是用两个模型,一个生成模型,一个判别模型。判别模型用于判断一个给定的图片是不是真实的图片(从数据集里获取的图片),生成模型的任务是去创造一个看起来像真的图片一样的图片,有点拗口,就是说模型自己去产生一个图片,可以和你想要的图片很像。而在开始的时候这两个模型都是没有经过训练的,这两个模型一起对抗训练,生成模型产生一张图片去欺骗判别模型,然后判别模型去判断这张图片是真是假,最终在这两个模型训练的过程中,两个模型的能力越来越强,最终达到稳态。(这里用图片举例,但是GANs的用途很广,不单单是图片,其他数据,或者就是简单的二维高斯也是可以的,用于拟合生成高斯分布。)

    详细实现过程

    下面我详细讲讲: 
    假设我们现在的数据集是手写体数字的数据集minst。 
    初始化生成模型G、判别模型D(假设生成模型是一个简单的RBF,判别模型是一个简单的全连接网络,后面连接一层softmax)这些都是假设,对抗网络的生成模型和判别模型没有任何限制。 
    这里写图片描述

    前向传播阶段

    一、可以有两种输入 
    1、我们随机产生一个随机向量作为生成模型的数据,然后经过生成模型后产生一个新的向量,作为Fake Image,记作D(z)。 
    2、从数据集中随机选择一张图片,将图片转化成向量,作为Real Image,记作x。 
    二、将由1或者2产生的输出,作为判别网络的输入,经过判别网络后输入值为一个0到1之间的数,用于表示输入图片为Real Image的概率,real为1,fake为0。 
    使用得到的概率值计算损失函数,解释损失函数之前,我们先解释下判别模型的输入。根据输入的图片类型是Fake Image或Real Image将判别模型的输入数据的label标记为0或者1。即判别模型的输入类型为 这里写图片描述或者这里写图片描述 。

    判别模型的损失函数:

    这里写图片描述 
    当输入的是从数据集中取出的real Iamge 数据时,我们只需要考虑第二部分,D(x)为判别模型的输出,表示输入x为real 数据的概率,我们的目的是让判别模型的输出D(x)的输出尽量靠近1。 
    当输入的为fake数据时,我们只计算第一部分,G(z)是生成模型的输出,输出的是一张Fake Image。我们要做的是让D(G(z))的输出尽可能趋向于0。这样才能表示判别模型是有区分力的。 
    相对判别模型来说,这个损失函数其实就是交叉熵损失函数。计算loss,进行梯度反传。这里的梯度反传可以使用任何一种梯度修正的方法。 
    当更新完判别模型的参数后,我们再去更新生成模型的参数。

    给出生成模型的损失函数:

    这里写图片描述 
    对于生成模型来说,我们要做的是让G(z)产生的数据尽可能的和数据集中的数据一样。就是所谓的同样的数据分布。那么我们要做的就是最小化生成模型的误差,即只将由G(z)产生的误差传给生成模型。 
    但是针对判别模型的预测结果,要对梯度变化的方向进行改变。当判别模型认为G(z)输出为真实数据集的时候和认为输出为噪声数据的时候,梯度更新方向要进行改变。 
    即最终的损失函数为: 
    这里写图片描述 
    其中这里写图片描述表示判别模型的预测类别,对预测概率取整,为0或者1.用于更改梯度方向,阈值可以自己设置,或者正常的话就是0.5。

    反向传播

    我们已经得到了生成模型和判别模型的损失函数,这样分开看其实就是两个单独的模型,针对不同的模型可以按照自己的需要去是实现不同的误差修正,我们也可以选择最常用的BP做为误差修正算法,更新模型参数。

    其实说了这么多,生成对抗网络的生成模型和判别模型是没有任何限制,生成对抗网络提出的只是一种网络结构,我们可以使用任何的生成模型和判别模型去实现一个生成对抗网络。当得到损失函数后就安装单个模型的更新方法进行修正即可。

    原文给了这么一个优化函数: 
    这里写图片描述看上去很难理解,我个人的理解是,它做的是去最大化D的区分度,最小化G和real数据集的数据分布。

    算法流程图

    下图是原文给的算法流程,noise 就是随机输入生成模型的值。上面的解释加上这个图应该就能理解的差不多了。

    这里写图片描述

    noise输入的解释

    上面那个noise也很好理解。如下图所示,假设我们现在的数据集是一个二维的高斯混合模型,那么这么noise就是x轴上我们随机输入的点,经过生成模型映射可以将x轴上的点映射到高斯混合模型上的点。当我们的数据集是图片的时候,那么我们输入的随机噪声其实就是相当于低维的数据,经过生成模型G的映射就变成了一张生成的图片G(x)。 
    这里写图片描述 
    原文中也指出,最终两个模型达到稳态的时候判别模型D的输出接近1/2,也就是说判别器很难判断出图片是真是假,这也说明了网络是会达到收敛的。

    GANs review

    GANs一些新的应用在这篇博文中有所介绍,写的挺好: 
    https://adeshpande3.github.io/adeshpande3.github.io/Deep-Learning-Research-Review-Week-1-Generative-Adversarial-Nets

    *#################################################### 
    比如使用拉普拉斯金字塔做图片细化,将之前的单个输入,改成金字塔类型的多层序列输入,后一层在前一层的基础上进行上采样,使得图片的精细程度越来越高

    这里写图片描述
    *#####################################################

    使用GANs实现将描述文本转化成图片,在模型中输入一段文本,用于表示一张图片,引入了一些NPL的概念,特别有意思的idea。网络结构如下图所示:

    这里写图片描述
    这里写图片描述

    展开全文
  • 2020年C题--面向康复工程的脑电信号分析和判别模型.doc
  • 文档是在听取斯坦福大学机器学习网上公开课后,结合前人所写的文档整理而成,文档中包含了斯坦福大学教授NG在课堂上讲的见解、建议等,主要讲解了判别模型、生成模型与朴素贝叶斯方法及其应用。文档写得清晰易懂,...
  • 生成模型判别模型的区别与联系

    千次阅读 2018-12-19 12:31:46
    1、概述 监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出。这个模型的一般形式为决策函数: ...所学到的模型分别称为生成模型(generative model)和判别模型(discriminative mode...

    1、概述

    监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出。这个模型的一般形式为决策函数:

    Y=f(X)

    或者条件概率分布:

    p(Y|X)

    监督学习方法又可以分为生成方法(generative approach)和判别方法(discriminative approach)。所学到的模型分别称为生成模型(generative  model)和判别模型(discriminative model)。

    2、判别模型

    2.1 判别方法的定义

    判别方法由数据直接学习决策函数f(X)或者条件概率分布p(Y|X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入X,应该预测什么样的输出Y。典型的判别模型包括:k近邻法、感知机、决策树等。

    2.2 判别模型的思想

    判别模型直接对条件概率p(Y|X)建模,基本思想是在有限样本条件下,建立判别函数,直接研究预测模型。下面我们利用贝叶斯决策论里面的知识,利用判别方法对测试数据进行建模求解。

    这里定义训练数据为(X,Y)Y=\left \{ y_{1},y_{2},...,y_{n} \right \}是n个训练样本的标签,X=\left \{ x_{1},x_{2},...,x_{n} \right \}是n个训练样本的特征。定义单个测试数据为(\tilde{x},\tilde{y}),\tilde{y}为测试数据的类别,\tilde{x}是测试样本的特征。

    训练完毕后,输入测试数据,判别模型直接给出的是p(\tilde{y}|\tilde{x}),即输出(类别)关于输入(特征)的条件分布,实际上,这个分布的条件还有训练数据---------因为实际上我们是“看过”训练数据之后,学习到了对数据分布的后验认识,然后根据这个认识和测试样本的特征来做出测试样本属于哪个类别的决策的,所以有p(\tilde{y}|\tilde{x})=p(\tilde{y}|\tilde{x},X,Y)

    我们认为这个条件分布p(\tilde{y}|\tilde{x},X,Y)由参数\theta决定的,即p(\tilde{y}|\tilde{x},\theta )……(2.1)
    那么如何由p(\tilde{y}|\tilde{x},\theta )得到p(\tilde{y}|\tilde{x})呢?如果我们可以求出参数\theta关于训练数据的的后验分布P(\theta |X,Y)(这其实就是学习过程),那么就可以由

    P(\tilde{y}|\tilde{x})=P(\tilde{y}|\tilde{x},X,Y)=\int P(\tilde{y},\theta |\tilde{x},X,Y)d\theta =\int P(\tilde{y}|\tilde{x},\theta )\cdot P(\theta |X,Y)d\theta……(2.2)
    来得到想要的答案(关于②如何得到,请参考其他地方的讨论PRML第一章公式1.68如何推导? - 机器学习 - 知乎第31页公式1.68怎么推导的啊..)。

    所以现在问题转化成了求条件分布的参数\theta关于训练数据(X,Y)的后验分布P(\theta |X,Y)。那么我们来看看怎么求这个后验分布。条件分布关于训练数据的似然函数

    P(Y|X,\theta )=L(\theta )=\prod_{i-1}^{n}P(y_{i}|x_{i},\theta )……(2.3)
    有没有发现P(Y|X,\theta )P(\theta |X,Y)有一点像?像是\theta和Y互换了位置,互为条件概率,可以考虑使用贝叶斯公式来进行转化,即

    P(\theta |X,Y)=\frac{P(Y|X,\theta )\cdot P(\theta )}{P(Y|X)}……(2.4)
    所以现在问题又进行了转化,变成了求条件分布关于训练数据的似然函数、参数\theta的先验分布和Y关于X的条件分布三个小问题。我们已经知道似然函数怎么求,先验分布也不需要求(先验知识,就是我们在解决问题之前已经知道的知识,在这里就是我们认为参数是未观察到的随机变量,其本身也可有分布【贝叶斯学派】),而

    P(Y|X)=\int P(Y,\theta |X)d\theta =\int P(Y|X,\theta )\cdot P(\theta )d\theta……(2.5)
    至此问题已经解决,综合上述(1)-(5)各式,我们终于可以求出输出关于输入的条件分布啦!

    P(\tilde{y}|\tilde{x})=\int P(\tilde{y}|\tilde{x},\theta )\cdot \frac{P(Y|X,\theta )\cdot P(\theta )}{\int P(Y|X,\theta )\cdot P(\theta )d\theta }d\theta……(2.6)

    (6)中的两个积分的计算是很麻烦的,在实际解决问题的过程中要想办法省略掉。
    对于(2)中积分公式可以使用variational inference的方法干掉,variational inference用一句话来说就是:如果训练样本足够多的话,可以使用\theta的最大后验分布\theta _{map}来对\theta进行点估计(point estimate)。即有:

    P(\tilde{y}|\tilde{x})=P(\tilde{y}|\tilde{x},X,Y)=P(\tilde{y}|\tilde{x},\theta _{map})……(2.7)
    所以我们干掉了第一个积分问题,把问题简化成了求\theta的最大后验概率P(\theta |X,Y)
    观察(2.4)式可以发现分母P(Y|X)对于我们想要估计的问题而言,可以看作一个标量,如果我们省略掉(4)中的分母P(Y|X)对结果是没有影响的(只需要对分子进行normalize就可以得到后验概率P(\theta |X,Y)),那么我们又干掉了第二个积分公式,将问题简化成了求P(Y|X,\theta )\cdot P(\theta )的最大值。如果先验分布在似然函数较大的区间是固定不变或变化较小的,那么问题又可以转化成求最大似然函数!
    实际上,在噪声高斯分布的假设下,最小误差平方和优化问题(即求使误差平方和最小的参数)等价于求最大似然函数(即使似然函数最大的参数)

    2.3 极大似然估计

    似然(likelihood,可能性的意思),描述的是事件发生可能性的大小。

    极大似然估计是频率主义学派的观点,主要就是根据采样来估计概率分布参数。

    假设我们要根据样本所属的类别来对一组样本进行分类。这样我们就有c个样本集D_{1},D_{2},...,D_{c}D_{c}表示训练集D中第c类样本组成的集合,任意一个D_{j},j\in \left \{ 1,2,...,c \right \}中的样本都是独立的根据类条件概率密度函数P(X|Y_{j})来抽取的。因此我们可以成每一个样本集中的样本都是独立同分布的随机变量。我们还假设每一个类条件概率密度P(X|Y_{j})的形式是已知的,其未知的就是具体的参数向量\theta

    数据集D_{j}有n个样本x_{1},x_{2},...,x_{n},因为样本是独立同分布的,则参数\theta关于数据集D_{j}的似然函数是:

    P(D_{j}|\theta)=\prod_{k=1}^{n}P(x_{k}|\theta)……(2.8)。

    \theta进行极大似然估计,就是去寻找能最大化似然P(D_{j}|\theta)的参数值\hat{\theta }。直观上看,极大似然估计是试图寻找\theta所有可能取值中,找到一个能使数据出现的“可能性”的最大的值

    然而使用连乘的操作易造成下溢,通常使用对数似然:

    L(\theta})=log P(D_{j}|\theta )=\sum_{k=1}^{n}log P(x_{k}|\theta)……(2.9)

    此时参数\theta的极大似然估计\hat{\theta }为:\hat{\theta }=arg max_{\theta }l(\theta )……(2.10)。

    例如,在连续特征情形下,假设概率密度函数p(x|c)\sim N(\mu _{j},\sigma _{j}^{2}),则参数\mu _{j}\sigma _{j}^{2}的极大似然估计为:

    \hat{\mu _{j}}=\frac{1}{n}\sum_{k=1}^{n}x_{k}……(2.11)

    \hat{\sigma _{j}^{2}}=\frac{1}{n}\sum_{k=1}^{n}(x_{k}-\hat{\mu _{j}})(x_{k}-\hat{\mu _{j}})^T……(2.12)

    通过上式,我们可以发现,通过极大似然估计得到的正态分布均值就是样本均值,方差就是样本协方差,这显然也是一个符合直觉的结果。在离散特征情形下,也可以通过类似的方法估计类条件概率密度。

    2.4 对数似然到分类问题

    对数似然函数的表达式如(2.9)式所列,我们在右端除以n,代表我们从样本中采样的概率是均等的。表达式可以写为:

    L(\theta )=\frac{1}{n}\sum_{k=1}^{n}log P(x_{k}|\theta )=E_{x\sim D_{j}}\left [ log P(x_{k}|\theta ) \right ]=E_{x\sim D_{j}}\left [ log P_{\theta }(x_{k}) \right ]……(2.13)

    \hat{\theta}=arg max_{\theta}E_{x\sim D_{j}}\left [ log P_{\theta}(x_{k}) \right ]……(2.14)

    这里面\frac{1}{n}代表每一个样本x_{k}从真实样本数据中采样的概率,也就是假设真实数据的分布是均匀分布,而P_{\theta}(x_{k})相当于我们训练后的模型的预测标记分布对x_{k}的采样概率,这样就可以表现为将-L(\theta )看作交叉熵。

    当然,理论上,根据已有的数据,我们可以得到每个x的统计频率P_{data}(x),那么(2.13)式的等价形式可以变为:

    L(\theta )=\sum_{k=1}^{n}P_{data}(x_{k})log P_{\theta }(x_{k})……(2.15)

    \hat{\theta}=arg max_{\theta}\sum_{k=1}^{n}P_{data}(x_{k})log P_{\theta }(x_{k})……(2.16)

    但是实际上,我们几乎都不可能得到P_{data}(x)(尤其是连续分布),我们能直接算的是关于它的期望,也就是(2.14)式,因为求期望只需要把每个样本的值算出来,然后求和除以n就行了。所以(2.16)式只有理论价值,能够方便后面的推导。

    现在我们来看一下监督学习的分类问题是如何与最大似然联系在一起的。

    假设我们有输入x_{k},标签y_{k},那么(x_{k},y_{k})就构成了一个事件,X是训练数据集D中所有x_{k}的集合,Y是训练数据集D中所有y_{k}的集合于是我们根据(2.14)式就有:

    \hat{\theta}=arg max_{\theta}E_{(x_{k},y_{k})\sim D}\left [ log P_{\theta}(x_{k},y_{k}) \right ]==arg max_{\theta}E_{X,Y}\left [ log P_{\theta}(x_{k},y_{k}) \right ]……(2.17)

    这样的一个对(x_{k},y_{k})整体求数学期望的式子对我们而言,是不够实用的。以分类问题为例,我们通常建模的是P(y_{k}|x_{k}),而不是P(x_{k},y_{k}),也就是我们要根据输入确定输出的分布,而不是他们的联合分布,所有我们还是要从(2.16)式出发,先得到:

    \hat{\theta}=arg max_{\theta}\sum_{X,Y}P_{data}(x_{k},y_{k})log P_{\theta }(x_{k},y_{k})=arg max_{\theta}\sum_{X,Y}P_{data}(x_{k},y_{k})log\left [ P_{\theta }(x_{k})P_{\theta }(y_{k}|x_{k}) \right ]……(2.18)

    因为我们只对P(y_{k}|x_{k})建模,因此P_{\theta }(x_{k})就可以理解为P_{data}(x_{k})就是一个未知的常数了,优化模板有个常数项,可以省去,因此(18)式就等价于:

    \hat{\theta}\\=arg max_{\theta}\sum_{X,Y}P_{data}(x_{k},y_{k})log\left [ P_{\theta }(x_{k})P_{\theta }(y_{k}|x_{k}) \right ]\\=arg max_{\theta}\sum_{X,Y}P_{data}(x_{k},y_{k})logP_{\theta }(y_{k}|x_{k})+arg max_{\theta}\sum_{k=1}^{n}P_{data}(x_{k},y_{k})logP_{\theta }(x_{k})\\ =arg max_{\theta}\sum_{X,Y}P_{data}(x_{k},y_{k})logP_{\theta }(y_{k}|x_{k})……(2.19)

    其实\sum_{X,Y}P_{data}(x_{k},y_{k})logP_{\theta }(y_{k}|x_{k})就是已知训练数据的经验分布P_{data}(x_{k},y_{k}),条件概率分布P_{\theta }(y_{k}|x_{k})的对数似然函数的表示。

    然后,根据乘法公式,(2.19)式就等价于

    \hat{\theta}=arg max_{\theta}\sum_{X}P_{data}(x_{k})\sum_{Y}P_{data}(y_{k}|x_{k})logP_{\theta }(y_{k}|x_{k})……(2.20)

    与偶遇我们处理的是监督学习中的分类问题,一般而言在训练数据中对于确定的输入x_{k}就只有一个类标y_{k}与之对应,即P_{data}(y_{kt}|x_{k})=1,其余都为0,y_{kt}就是x_{k}对应的真实的目标类别,所以:

    \hat{\theta}=arg max_{\theta}\sum_{X}P_{data}(x_{k})logP_{\theta }(y_{kt}|x_{k})……(2.21)

    将(2.21)式写成期望的形式,就变成最常见的分类问题的极大似然函数:

    \hat{\theta}=arg max_{\theta}E_{X\sim D}\left [ logP_{\theta }(y_{kt}|x_{k}) \right ]……(2.22)

    当然,在分类问题中,使用极大似然函数也只是为了求出我们所建立的模型的参数,也就是说这个极大似然函数可以作为我们的优化目标,假如该极大似然函数是一个可以转换成一个凸优化问题,那我们就可以利用经典的数值优化算法如梯度下降法、牛顿法等来求解参数。

    关于在这里写上极大似然到分类问题,只是为了承接上文。其实对于分类问题,无论是判别模型还是生成模型在贝叶斯的框架下,都可以这样理解。

    2.4 判别模型总结

    1、判别模型的求解形式:直接对决策函数或条件概率分布建模。

    2、判别模型的求解思路:求解条件分布关于训练数据的似然函数(3)式,转化为模型参数后验概率最大(4)式,转化为(似然函数\cdot参数先验)最大,转化为最大似然(10)式。举例理解:我们训练神经网络的时候,就是在找一个能够最大限度使特征和类别标签能够对应上的参数。

    3、判别模型的学习过程:

    ①明确要求解的问题。②建模。③设计目标函数,例如分类问题中,我们经常使用极大似然函数作为我们的目标函数。④利用优化方法求解目标函数的参数。

    3、生成模型

    3.1 生成方法的定义

    生成方法由数据学习联合概率分布P(X,Y), 然后求出条件概率分布P(Y|X)作为预测的模型, 即生成模型:

    P(Y|X)=\frac{P(X,Y)}{P(X)}……(3.1)
    这样的方法之所以称为生成方法, 是因为模型表示了给定输入X产生输出Y的生成关系。典型的生成模型有: 朴素贝叶斯法、深度学习里面的GAN、VAE等。

    3.2 生成模型的思想

    对于生成算法必然考虑(3.1)式。基于贝叶斯定理,(3.1)式可以写为:

    P(Y|X)=\frac{P(Y)P(X|Y)}{P(X)}……(3.2)

    其中,P(X)是类先验概率分布;P(X|Y)是样本X相对于类标签Y的类条件概率,或称为“似然”;P(X)是用于归一化的“证据”因子。对于给定样本X,证据因子P(X)与类标签无关,因此估计P(Y|X)的问题就转化为如何基于训练数据D来估计先验P(X)和似然P(X|Y)

    先验概率P(X)表达了样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布的样本时,P(X)可通过各类样本出现的频率来进行估计。

    对于类条件概率P(X|Y)来说,由于它涉及关于X所有属性的联合概率,直接根据样本出现的频率来估计将会造成严重的困难。但朴素贝叶斯算法不这样看,它做出了一个极强的假设:特征条件独立。条件独立假设等于是说用于分类的特征在类确定的条件下都是条件独立的。 这一假设使朴素贝叶斯法变得简单, 但有时会牺牲一定的分类准确率。

    3.3 朴素贝叶斯算法

    假设输入空间X\subseteq \mathbb{R}^{n}为n维向量的集合,输出空间为类标签集合Y=\left \{ y_{1},y_{2},...y_{k} \right \}。输入为特征向量x\in X,输出为类标签y\in Y.X是定义在输入空间X上的随机变量,Y是定义在输出空间Y上的随机变量。P(X,Y)是X和Y的联合概率密度。训练数据集D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})\right \}P(X,Y)独立同分布产生。

    朴素贝叶斯通过训练数据集学习联合概率分布P(X,Y)。具体地,学习先验概率分布和条件概率分布。先验概率分布:

    P(Y=y_{k}),k=1,2,...,K……(3.3)

    条件概率分布:

    P(X=x|Y=y_{k})=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=y_{k}),k=1,2,...K……(3.4)

    x^{(j)}表示第j个特征。由(3.3)和(3.4)式我们可以求得联合概率分布P(X,Y)

    事实上,条件概率分布P(X=x|Y=y_{k})有指数量级的参数,其估计是不可行的。因为假设x^{(j)}可取值有S_{j}个,j=1,2,...,n,Y可取值有K个,那么参数个数为K\prod_{j=1}^{n}S_{j}个。

    朴素贝叶斯法对条件概率分布作了条件独立性的假设。 由于这是一个较强的假设, 朴素贝叶斯法也由此得名。 具体地, 条件独立性假设是:

    P(X=x|Y=y_{k})=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=y_{k})\\ =\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k})……(3.5)

    在运用朴素贝叶斯法进行分类时,对于给定的输入数据x,通过学习的模型根据贝叶斯定理计算后验概率:

    P(Y=y_{k}|X=x)=\frac{P(X=x|Y=y_{k})P(Y=y_{k})}{\sum_{k}P(X=x|Y=y_{k})P(Y=y_{k})}……(3.6)

    将(3.5)式带入(3.6)式可得:

    P(Y=y_{k}|X=x)=\frac{P(Y=y_{k})\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k})}{\sum_{k}P(Y=y_{k})\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k})}……(3.7)

    这就是朴素贝叶斯法进行分类的基本公式,于是,朴素贝叶斯分类器可表示为:

    y=argmax_{y_{k}}\frac{P(Y=y_{k})\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k})}{\sum_{k}P(Y=y_{k})\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k})}……(3.8)
    其实(3.8)式中的分母对于每一类y_{k}都是相同的,也就是这里的分母可看做一个标量因子,我们要求得后验概率P(Y=y_{k}|X=x)主要是由先验概率和似然函数的乘积所决定的。所以(3.8)式等价于:

    y=argmax_{y_{k}}P(Y=y_{k})\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k})……(3.9)

    假如我们采用极大似然估计先验概率分布和条件概率分布。先验概率P(Y=y_{k})的极大似然估计是:

    P(Y=y_{k})=\frac{\sum_{i=1}^{N}I(\hat{y_{i}}=y_{k})}{N},k=1,2,...,K……(3.10)

    设第j个特征x^{(j)}可能取值的集合为\left \{ a_{j1},a_{j2},...,a_{jS_{j}} \right \},条件概率P(X^{(j)}=a_{jl}|Y=y_{k})的极大似然估计是:

    P(X^{(j)}=a_{jl}|Y=y_{k})=\frac{\sum_{i=1}^{N}I(x_{i}^{(j)}=a_{jl},\hat{y_{i}}=y_{k})}{\sum_{i=1}^{N}I(\hat{y_{i}}=y_{k})}\\ j=1,2,...,n;l=1,2,...,S_{j};k=1,2,...K……(3.11)

    式中,x_{i}^{(j)}是第i个样本的第j个特征;a_{jl}是第j个特征可能取得第l个值;I为指示函数。

    证明暂略。

    朴素贝叶斯算法:

    训练数据集D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N})\right \},其中x_{i}=( x_{i}^{(1)},x_{i}^{(2)},...,x_{i}^{(n)} )^{T}x_{i}^{(j)}是第i个样本的第j个特征x_{i}^{(j)}\in \left \{ a_{j1},a_{j2},...,a_{jS_{j}} \right \},a_{jl}是第j个特征可能取得第l个值。

    输出:实例x的分类。

    (1)根据(3.10)和(3.11)式计算先验概率及条件概率;

    (2)对于给定的实例x=( x^{(1)},x^{(2)},...,x^{(n)} )^{T},计算

    P(Y=y_{k})\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=y_{k}),k=1,2,...,K

    (3)根据(3,9)式确定实例x的类。

    3.4 朴素贝叶斯算法的实现

    我们将在本部分基于贝叶斯定理与特征条件独立假设使用iris数据集进行分类,利用Python实验的模型为高斯模型,也就是假定属性/特征服从正态分布的。(除此之外,常见的模型还有:多项式模型,伯努利模型)

    1、首先引入必要的包

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    
    from collections import Counter
    import math

    2、利用sklearn库直接加载iris数据,并做简要的数据处理

    # data
    def create_data():
        # 利用sklearn库中的load_iris()方法,加载数据
        iris = load_iris()
        df = pd.DataFrame(iris.data, columns=iris.feature_names)
        df['label'] = iris.target
        df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
        # iloc使用数字来索引数据
        data = np.array(df.iloc[:100, :])
        # print(data)
        return data[:,:-1], data[:,-1]

    3、划分数据集:训练集和测试集

    X, y = create_data()
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

    4、将特征取值的可能性假设为高斯。概率密度函数为:

    P(x_{i}|y_{k})=\frac{1}{\sqrt{2\pi \sigma _{yk}^{2}}}exp(-\frac{(x_{i}-\mu _{yk}^{2})}{2\sigma _{yk}^{2}})

    数学期望:\mu =\frac{1}{n}\sum _{k=1}^{n}x_{k},方差:\sigma ^{2}=\frac{\sum _{k=1}^{n}(x_{k}-\mu )^{2}}{n}

    利用高斯的概率密度函数分布求出数学期望和标准差,之后计算条件分布的概率,再利用似然函数求出最有可能的类别,将这一整套的过程封装到类当中:

    class NaiveBayes:
        def __init__(self):
            self.model = None
    
        # 数学期望
        @staticmethod
        def mean(X):
            return sum(X) / float(len(X))
    
        # 标准差(方差)
        def stdev(self, X):
            avg = self.mean(X)
            return math.sqrt(sum([pow(x-avg, 2) for x in X]) / float(len(X)))
    
        # 概率密度函数
        def gaussian_probability(self, x, mean, stdev):
            exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(stdev,2))))
            return (1 / (math.sqrt(2*math.pi) * stdev)) * exponent
    
        # 处理X_train
        def summarize(self, train_data):
            summaries = [(self.mean(i), self.stdev(i)) for i in zip(*train_data)]
            return summaries
    
        # 分类别求出数学期望和标准差
        def fit(self, X, y):
            labels = list(set(y))
            data = {label:[] for label in labels}
            for f, label in zip(X, y):
                data[label].append(f)
            self.model = {label: self.summarize(value) for label, value in data.items()}
            return 'gaussianNB train done!'
    
        # 计算概率
        def calculate_probabilities(self, input_data):
            # summaries:{0.0: [(5.0, 0.37),(3.42, 0.40)], 1.0: [(5.8, 0.449),(2.7, 0.27)]}
            # input_data:[1.1, 2.2]
            probabilities = {}
            for label, value in self.model.items():
                probabilities[label] = 1
                for i in range(len(value)):
                    mean, stdev = value[i]
                    probabilities[label] *= self.gaussian_probability(input_data[i], mean, stdev)
            return probabilities
    
        # 类别
        def predict(self, X_test):
            # {0.0: 2.9680340789325763e-27, 1.0: 3.5749783019849535e-26}
            label = sorted(self.calculate_probabilities(X_test).items(), key=lambda x: x[-1])[-1][0]
            return label
    
        def score(self, X_test, y_test):
            right = 0
            for X, y in zip(X_test, y_test):
                label = self.predict(X)
                if label == y:
                    right += 1
    
            return right / float(len(X_test))

    5、训练模型

    model = NaiveBayes()
    model.fit(X_train, y_train)

    6、预测

    print(model.predict([4.4,  3.2,  1.3,  0.2]))

    预测结果为:0.0

    7、模型测试或模型评估

    model.score(X_test, y_test)

    评估结果得分1.0。

    当然,上述实现过程是我们自己写的过程,我们其实可以直接调取sklearn的naive_bayes包下面的各种包来实现朴素贝叶斯不同模型的方法。

    from sklearn.naive_bayes import GaussianNB
    from sklearn.model_selection import cross_val_score
    from sklearn import datasets
    iris = datasets.load_iris()
    gnb = GaussianNB()
    scores=cross_val_score(gnb, iris.data, iris.target, cv=10)
    print("Accuracy:%.3f"%scores.mean())
    

    输出: Accuracy:0.953。

    还可以引入不同的包实现其他模型:

    from sklearn.naive_bayes import BernoulliNB, MultinomialNB # 伯努利模型和多项式模型

    3.5 生成模型的总结

    1、生成模型的求解形式:求解联合分布,再利用联合分布求解条件概率分布。

    2、生成模型的求解思路:求解联合分布转化为求解类别先验概率和类别条件概率。

    4、判别模型和生成模型的特点

    4.1 判别模型的特点

    • 判别方法寻找不同类别之间的最优分类面,反映的是异类数据之间的差异;
    • 判别方法利用了训练数据的类别标识信息,直接学习的是条件概率P(Y|X)或者决策函数f(X),直接面对预测,往往学习的准确率更高;
    • 由于直接学习条件概率P(Y|X)或者决策函数f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
    • 缺点是不能反映训练数据本身的特性

    4.2 生成模型的特点

    • 从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度;
    • 生成方法还原出联合概率分布,而判别方法不能;
    • 生成方法的学习收敛速度更快、即当样本容量增加的时候,学到的模型可以更快地收敛于真实模型;
    • 当存在隐变量时,仍可以用生成方法学习,此时判别方法不能用,比如混合高斯模型就是含有隐变量的生成方法。
    • 天下没有免费午餐,联合分布是能提供更多的信息,但也需要更多的样本和更多计算,尤其是为了更准确估计类别条件分布,需要增加样本的数目,而且类别条件概率的许多信息是我们做分类用不到,因而如果我们只需要做分类任务,就浪费了计算资源。
    • 另外,实践中分类问题多数情况下判别模型效果更好。

     

    展开全文
  • 判别模型 从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi。 生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。 判别...

    生成模型 VS. 判别模型

    从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi。

    生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。

    判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。

    数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。

    生成模型

    在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。它给观测值和标注数据序列指定一个联合概率分布。在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。条件概率分布可以由生成模型根据贝叶斯定理形成。

    生成模型的定义与判别模型相对应:生成模型是所有变量的全概率模型,而判别模型是在给定观测变量值前提下目标变量条件概率模型。因此生成模型能够用于模拟(即生成)模型中任意变量的分布情况,而判别模型只能根据观测变量得到目标变量的采样。判别模型不对观测变量的分布建模,因此它不能够表达观测变量与目标变量之间更复杂的关系。因此,生成模型更适用于无监督的任务,如分类聚类

    典型的生成模型包括:

    如果观测数据是由生成模型中采样的,那么最大化数据似然概率是一个常见的方法。但是,大部分统计模型只是近似于真实分布,如果任务的目标是在已知一部分变量的值的条件下,对另一部分变量的推断,那么可以认为这种模型近似造成了一些对于当前任务来说不必要的假设。在这种情况下,使用判别模型对条件概率函数建模可能更准确,尽管具体的应用细节会最终决定哪种方法更为适用。

    判别模型

    机器学习领域判别模型是一种对未知数据 $ {\displaystyle y} $与已知数据 x {\displaystyle x} x 之间关系进行建模的方法。判别模型是一种基于概率理论的方法。已知输入变量$ {\displaystyle x}$ ,判别模型通过构建条件概率分布 P ( y ∣ x ) {\displaystyle P(y|x)} P(yx)预测 y {\displaystyle y} y

    生成模型不同,判别模型不考虑 x {\displaystyle x} x y {\displaystyle y} y 间的联合分布。对于诸如分类和回归问题,由于不考虑联合概率分布,采用判别模型可以取得更好的效果。而生成模型在刻画复杂学习任务中的依赖关系方面则较判别模型更加灵活。大部分判别模型本身是监督学习模型,不易扩展用于非监督学习过程。实践中,需根据应用的具体特性来选取判别模型生成模型

    种类

    引入

    监督学习的任务就是学习一个模型(或者得到一个目标函数),应用这一模型,对给定的输入预测相应的输出。这一模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X)。
    监督学习方法又可以分为生成方法(generative approach)和判别方法(discriminative approach)。所学到的模型分别为生成模型(generative model)和判别模型(discriminative model)。

    决策函数和条件概率分布

    决策函数Y=f(X)

    决策函数Y=f(X):你输入一个X,它就输出一个Y,这个Y与一个阈值比较,根据比较结果判定X属于哪个类别。例如两类(w1和w2)分类问题,如果Y大于阈值,X就属于类w1,如果小于阈值就属于类w2。这样就得到了该X对应的类别了。

    条件概率分布P(Y|X)

    你输入一个X,它通过比较它属于所有类的概率,然后输出概率最大的那个作为该X对应的类别。例如:如果P(w1|X)大于P(w2|X),那么我们就认为X是属于w1类的。

    小结

    两个模型都可以实现对给定的输入X预测相应的输出Y的功能。实际上通过条件概率分布P(Y|X)进行预测也是隐含着表达成决策函数Y=f(X)的形式的。
    而同样,很神奇的一件事是,实际上决策函数Y=f(X)也是隐含着使用P(Y|X)的。因为一般决策函数Y=f(X)是通过学习算法使你的预测和训练数据之间的误差平方最小化,而贝叶斯告诉我们,虽然它没有显式的运用贝叶斯或者以某种形式计算概率,但它实际上也是在隐含的输出极大似然假设(MAP假设)。也就是说学习器的任务是在所有假设模型有相等的先验概率条件下,输出极大似然假设。

    生成方法和生成模型

    生成模型:无穷样本---->概率密度模型 =产生模型---->预测

    生成方法由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)=P(X,Y)/P(X)作为预测的模型。这样的方法之所以成为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯法、马尔科夫模型、高斯混合模型。这种方法一般建立在统计学和Bayes理论的基础之上。

    生成方法的特点

    • 从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度;
    • 生成方法还原出联合概率分布,而判别方法不能;
    • 生成方法的学习收敛速度更快、即当样本容量增加的时候,学到的模型可以更快地收敛于真实模型;
    • 当存在隐变量时,扔可以用生成方法学习,此时判别方法不能用

    判别方法和判别模型

    判别模型:有限样本---->判别函数 = 预测模型---->预测

    判别方法由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入X,应该预测什么样的输出Y。典型的判别模型包括:k近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、boosting方法和条件随机场等。判别模型利用正负例和分类标签,关注在判别模型的边缘分布。

    判别方法的特点

    • 判别方法寻找不同类别之间的最优分类面,反映的是异类数据之间的差异;
    • 判别方法利用了训练数据的类别标识信息,直接学习的是条件概率P(Y|X)或者决策函数f(X),直接面对预测,往往学习的准确率更高;
    • 由于直接学习条件概率P(Y|X)或者决策函数f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
    • 缺点是不能反映训练数据本身的特性

    判别模型和生成模型对比

    (1)训练时,二者优化准则不同
    生成模型优化训练数据的联合分布概率;
    判别模型优化训练数据的条件分布概率,判别模型与序列标记问题有较好的对应性。
    (2)对于观察序列的处理不同
    生成模型中,观察序列作为模型的一部分;
    判别模型中,观察序列只作为条件,因此可以针对观察序列设计灵活的特征。
    (3)训练复杂度不同
    判别模型训练复杂度较高。
    (4)是否支持无指导训练
    生成模型支持无指导训练。
    (5)本质区别
    discriminative model 估计的是条件概率分布(conditional distribution)p(class|context)
    generative model 估计的是联合概率分布(joint probability distribution)p()

    另外,由生成模型可以得到判别模型,但由判别模型得不到生成模型。

    对于跟踪算法

    由于之前用Camshift方法做人脸的跟踪,这里看到了有关跟踪算法的说明,特此陈述一下。

    跟踪算法一般来说可以分为两类:基于外观模型的生成模型或者基于外观模型的判别模型。
    生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。
    判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。

    定义

    监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出,这个模型的一般形式为决策函数:
    Y = f ( X ) Y=f(X) Y=f(X)

    或者条件概率分布
    P ( Y ∣ X ) P(Y|X) P(YX)
    ​ 监督学习方法又可以分为生成方法(generative approach) 和判别方法(discriminative approach). 所学到的模型分别称为生成模型(generative model) 和判别模型(discriminative model).

    —— 李航《统计学习方法》

    同样地,在李航老师的这本《统计学习方法》中,对生成方法判别方法做出了如下定义:

    生成方法由数据学习联合概率分布 P ( X , Y ) P(X, Y) P(X,Y),然后求出条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX)作为预测的模型,即生成模型

    P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)= \frac{P(X,Y)}{P(X)} P(YX)=P(X)P(X,Y)
    这样的方法之所以称为生成方法,是因为模型表示了给定输入 X 产生输出 Y 的生成关系,典型的生成模型有:朴素贝叶斯法和隐马尔可夫模型.

    ​ 判别方法由数据直接学习决策函数 f ( X ) f(X) f(X)或者条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX)作为预测的模型,即判别模型. 判别模型关心的是给定输入X,应当输出什么样的Y .典型的判别模型包括:k近邻法、感知机、决策树、逻辑斯谛回归模型、最大熵模型、支持向量机、提升方法和条件随机场等.

    特点对比

    在这里插入图片描述

    优点

    • 能计算出联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),可以反映同类数据本身的相似度.
    • 学习收敛速度更快,即当样本容量增加的时候,学习到的模型可以更快地收敛于真实模型.
    • 能够用于数据不完整的情况,且能检测异常值.

    缺点

    • 含有更多的信息,但同样也需要更多的计算资源.
    • 仅用于分类任务时,有许多冗余信息.

    判别模型(discriminative model)

    优点

    • 学习的是条件概率 P ( Y ∣ X ) P(Y|X) P(YX) 或决策函数 f ( X ) f(X) f(X),直接面对预测问题,往往准确率更高.
    • 可以对数据进行各种程度上的抽象、定义特征并使用特征,简化学习问题.
    • 对分类任务,冗余信息更少,能节省计算资源.

    缺点

    • 不能反映数据本身的特性.
    • 数据缺失或者异常值对预测结果的影响较大.

    Logistic 回归 VS. Softmax 回归

    其实 Softmax 就是 Logistic 的推广,Logistic 一般用于二分类,而softmax 是多分类。

    逻辑回归的激活函数是 sigmoid 函数,可理解成一个被 sigmoid 函数归一化后的线性回归,sigmoid 函数把实数映射到了 [0,1] 区间。当类别数 k = 2 时,SoftMax 回归退化为逻辑回归。

    逻辑回归使用 sigmoid 函数。

    逻辑回归

    逻辑回归(Logistic regression)是一种对数几率模型(英语:Logit model,又译作逻辑模型、评定模型、分类评定模型)是离散选择法模型之一,属于多重变量分析范畴,是社会学生物统计学临床数量心理学计量经济学市场营销统计实证分析的常用方法。

    在这里插入图片描述
    P ( Y = 1 ∣ X = x ) = e x ′ β 1 + e x ′ β P(Y=1|X=x)={\frac {e^{{x'\beta }}}{1+e^{{x'\beta }}}} P(Y=1X=x)=1+exβexβ

    SoftMax 回归与多个 Logistic 回归二分类的区别

    Logistic 回归可以通过推广到 SoftMax 回归来解决多分类问题。下面通过实例介绍 SoftMax 回归与多个 Logistic 回归二分类的区别。

    使用 SoftMax 回归或者是多个 Logistic 回归二分类解决多分类问题,取决于类别之间是否互斥,例如,如果有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k = 4 的 SoftMax 回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 k 设为5)。

    如果四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用 4 个二分类的 Logistic 回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。

    Logistic 回归以及 Softmax 回归与神经网络的关系

    一般的神经网络有输入层,隐含层以及输出层构成,而上图中只有输入层和输出层,而没有隐含层。神经网络处理二分类时,输出层为一个节点,但处理K(K>2)分类问题时,数据节点为K个。值得注意的,在神经网络中的最后一层隐含层和输出层就可以看成是 Logistic 回归或 SoftMax 回归模型,之前的层只是从原始输入数据从学习特征,然后把学习得到的特征交给 Logistic 回归或 SoftMax 回归处理。
    因此,可以把处理分类问题的神经网络分成两部分,特征学习和 Logistic 回归或 SoftMax 回归。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 最大熵模型判别模型:构建特征和标签的映射通过计算条件熵(在已知条件下做风险最低的预测,万物熵增的规律启发) 生成:HMM,BAYES 一般来说,生成式模型需要非常充足的数据量以保证采样到了数据本来的面目。判别...

    决策函数:最大熵模型

    最大熵模型:判别模型:构建特征和标签的映射通过计算条件熵(在已知条件下做风险最低的预测,万物熵增的规律启发)

    生成:HMM,BAYES

    一般来说,生成式模型需要非常充足的数据量以保证采样到了数据本来的面目。判别模型对数据量要求没生成式的严格。但是也要具体情况具体分析。

    1. 将所有数据摸透(x,y标签)求联合分布,得到条件分布,朴素bayes、HMM。朴素在这里假设样本特征独立同分布,计算联合概率用连乘法 P ( x i ∣ y i ) P ( y i ) P(x_i|y_i)P(y_i) P(xiyi)P(yi)
    2. 通过大量数据摸底,基本模拟了数据的真实分布
    3. 没有分类边界

    判别:NN,SVM

    1. 根据x特征映射y标签,通过构建生成模型loss学习映射关系,有分类边界
    2. 不能反映数据本身分布的特性

    例子

    例子3:跟踪算法
    生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。
    判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。

    例 子一:比如说要确定一只羊是山羊还是绵羊

    判别模型的方法是:(学差别)

    先从历史数据中学习到一个统一的模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。我只要学会绵羊和山羊某个特殊差别就好。

    比如山羊更擅长攀岩,按照岩壁坡度进行判别,能在45度以上山坡行走的就是山羊,以下是绵羊。

    而眼前这个羊走85度山坡如履平地,所以它是山羊。

    生成模型的方法:(学整体特征后,预测样本属于山羊或绵羊的概率)

    根据山羊的特征首先学习出一个山羊模型(躯体瘦,角三菱型,呈镰刀状弯曲,一般毛粗而短,毛色多为白色,也有黑色、青色、褐色或杂色的,尾巴往上翘,胆子大,采食灌木嫩枝条)。

    根据绵羊的特征学习出一个绵羊模型(躯体丰满,头短,公羊有螺旋状大角,母羊无角或只有细而小的角。毛细蜜、多为白色。 绵羊的嘴唇薄而灵活,适于啃食很短的牧草,性情温顺,胆小,主要吃草)。

    然后从这只羊中提取各种特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。

    在这个问题中,第一个判别模型方法中你只记住了山羊和绵羊之间的不同之处。第二个生成模型的思路中,你实际上学习了什么是绵羊,什么是山羊。

    例二: 识别一个语音属于哪种语言

    例如对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。那么你可以有两种方法达到这个目的:

    生成: 学习全帽,汉语、英语、法语

    学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你说话,你就可以知道他说的是什么语音。这就是GM。

    判别:学习差异

    不去学习每一种语言,你只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。这就是DM。

    [白话解析] 深入浅出最大熵模型

            </h1>
            <div class="clear"></div>
            <div class="postBody">
                
    <div id="cnblogs_post_description" style="display: none">
        本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来解释最大熵模型。并且从名著中找了几个具体应用场景来帮助大家深入这个概念。
    </div>
    

    [白话解析] 深入浅出最大熵模型

    0x00 摘要

    本文将尽量使用易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来解释最大熵模型。并且从名著中找了几个具体应用场景来帮助大家深入这个概念。

    0x01 背景概念

    1. 什么是熵?

    熵这个概念可以从多个角度来理解。

    1.1 从物理学角度理解熵

    熵最早来原于物理学。德国物理学家鲁道夫·克劳修斯首次提出熵的概念,用来表示任何一种能量在空间中分布的均匀程度,能量分布得越均匀,熵就越大。即,熵是表示物质系统状态的一种度量,用它来表征系统的无序程度。

    • 熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;
    • 熵越小,系统越有序,意味着系统具有确定和有规则的运动状态。

    1.2 从系统复杂度理解熵

    信息熵还可以作为一个系统复杂程度的度量,即物质系统有序化,组织化,复杂化状态的一种度量。

    • 如果系统越复杂,出现不同情况的种类越多,那么他的信息熵是比较大的。

    • 如果一个系统越简单,出现情况种类很少(极端情况为1种情况,那么对应概率为1,对应的信息熵为0),此时的信息熵较小。

    熵越大则该系统不确定性就越大,该系统未来发展就存在越多的可能性。

    1.3 熵的推导&定义

    熵的定义是:𝐇(𝐱) = −𝒔𝒖𝒎(𝒑(𝒙)𝒍𝒐𝒈𝟐𝒑(𝒙))

    其中,𝑝(𝑥)代表随机事件𝑥的概率,H(X) 就被称为随机变量 x 的熵,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。负号是用来保证信息量是正数或者零。

    为什么底数为 2 ? 这是因为,我们只需要信息量满足低概率事件 x 对应于高的信息量。那么对数的选择是任意的。只是遵循信息论的普遍传统,使用 2 作为对数的底!

    从公式可得,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。

    当随机分布为均匀分布时,熵最大。关于均匀分布熵最大,这里有一个非常好的例子:

    以全班的考试成绩为例,通常我们知道整个班成绩是符合高斯分布的,通过一次考试,发现每个人成绩都是相同的,则在学校看来这是一个爆炸性新闻,因为这是一个极低的事件,但是却发生了,不符合常规,下一步应该就是调查了吧。

    1.4 熵在系统复杂度应用的实际例子

    下面就让我们从名著中寻找例子:

    李自成系统的熵

    比如历史上的李自成闯军,麾下主要分成陕西帮和河南帮。假设陕西帮占据 2/3, 河南帮占据 1/3

    所以具体熵值是:

    - [1/3 * log(1/3) + 2/3 * log(2/3)] = 0.63
    

    梁山的熵

    这次按照山头分。比如:

    • 宋江派系(花荣,雷横,李逵,清风山,欧鹏,吕方,关胜,呼延灼.....)
    • 三山派系(鲁智深,武松,杨志,张青,曹正.....)
    • 晁盖派系(林冲,刘唐,三阮,白胜...)
    • 卢俊义大名府派系(燕青,蔡氏兄弟...)
    • 登州派系(孙立,顾大嫂.....)
    • 揭阳江派系(李俊,童威,童猛.....)
    • 无党派人士(萧让,金大坚, 安道全...)

    假设宋江派系占据1/3, 其他派系都是 1/9,所以具体的熵值是:

    - [1/3 * log(1/3) + 6 * 1/9 * log(1/9)] = 1.83
    

    这样看来,梁山更不稳定,所以受招安是个好的选择,而闯军相对稳定,所以可以历经坎坷干掉崇祯。

    2. 最大熵原理

    最大熵原理就是说明世界将趋向无序,无论是商业、生命、钢铁、政治,万事万物,都必是腐朽消亡!

    他描述的是这样一个自然事实,即基于当前已知前提下,也就是约束下,未知事件的概率尽可能的接近最符合事物的自然规律。

    整个宇宙发展就是一个熵增的过程。如果不施加外力影响,事物永远向着更混乱的状态发展,如果施加外力影响,系统会在外力约束下达到其可能的最混乱状态。

    比如,在你面对一个系统时候,你就应该认为这个系统应该自然而然的趋向最无序状态。有人可能会说,我对这个系统施加外力,施加约束,让它有序。但是事实上,系统会趋向 在你给的这些外力或者约束下 所能达到的最大无序状态。比如大家整理耳机,无论你把耳机线整理得如何整齐,你放起一段时间后再拿出来会发现,耳机还是会有一定状态的乱。

    最大熵原理指出,对一个随机事件的概率分布进行预测时,

    • 对未知的情况不要做任何主观假设。
    • 如果你对这个分布一无所知,那就猜熵最大的均匀分布。
    • 如果你对这个分布知道一些情况,那么,就猜满足这些情况(即预测应当满足全部已知的约束)的熵最大的分布。

    从预测风险的角度讲,就是 熵越大越好,就是要保留全部的不确定性,将风险降到最小。鸡蛋不能放在同一个篮子里。当概率分布最均匀时候,预测的风险最小,此时得到的概率分布的熵是最大。

    3. 判别模型 vs 生成模型

    分类问题,就是给定一个数据 x,要判断它对应的标签 y。分类模型有判别模型和生成模型两种。

    3.1 生成模型 (Generative)

    生成模型之所以叫生成模型,是因为,它背后的思想是 x是特征,y是标签,什么样的标签就会生成什么样的特征。好比说,标签是大象,那么可能的特征就有大耳朵,长鼻子等等。模型表示了给定输入X产生输出Y的生成关系

    生成模型就是要学习观测数据 x 和隐藏类别 y 的联合概率分布P(x,y),然后根据贝叶斯公式来求得条件概率P(y|x),预测条件概率最大的y。也就是说,在训练阶段是只对P(X,Y)建模,需要确定这个联合概率分布的所有的信息参数。具体流程是:

    • 先从训练样本数据中,将所有的数据的分布情况摸透,然后最终确定一个分布,来作为所有的输入数据的分布,并且他是一个联合分布 P(X,Y) (注意 X 包含所有的特征 Xi, Y 包含所有的label Yi, 要对每个label Yi 都需要建模)。
    • 然后来了新的样本数据再对新的样本计算P(Y|X) ,导出Y , 最终选择最优概率的label为结果,所以没有什么判别边界。

    再过一遍生成式模型的工作流程。

    学习阶段,建模:

    P(X,Y)=P(X|Y)P(Y)P(X,Y)=P(X|Y)P(Y)

    生成式模型的优点在于,所包含的信息非常齐全,我称之为“上帝信息”,所以不仅可以用来输入label,还可以干其他的事情。生成式模型关注结果是如何产生的。但是生成式模型需要非常充足的数据量以保证采样到了数据本来的面目,所以速度相比会慢。或者说生成模型是在模拟数据真实分布

    生成模型的例子:HMM / 朴素贝叶斯。Naive Bayes 需要同时对输入X和输出Y进行建模,得到联合分布P(X,Y),因此是生成模型。由于X是个比较复杂的东西,建模起来很痛苦,于是 Naive Bayes 不得不做了很强的假设,从此一辈子戴上了 “Naive” 的帽子。

    3.2 判别模型(Discriminative)

    判别模型是直接对 条件概率 P(Y|X) 建模,就是说,直接根据X特征来对Y建模训练。通俗的解释为在给定特征数值后预测结果出现的概率。

    判别模型直接将数据的 Y(或者label),根据所提供的 X (features)来学习。训练过程是确定构建 P(Y|X) 模型里面 “复杂映射关系” 中的参数。

    判别模型对所有的样本只构建一个模型,确认总体判别边界。观测到输入什么特征,就预测最可能的label,最后画出了一个明显或者比较明显的边界(具体可以通过复杂的函数映射,或者决策叠加等等mechanism做到)。

    或者说,判别模型之所以是判别模型,是因为由于去掉了独立性假设,所以不能给出联合概率分布,只能求后验概率,所以是判别模型

    判别模型的例子是: 逻辑回归 / SVM / CRF。

    判别模型的优点是:对数据量要求没生成式的严格,速度也会快,小数据量下准确率也会好些。

    3.3 对比

    从概率图角度看,有向图的表达的是一种推演关系,也就是在A的前提下出现了B,这种模型又叫做生成式模型。

    无向图表达的是一种“这样就对了”的关系,也就是A和B同时存在就对了,这种模型又叫做判别式模型。

    生成式模型一般用联合概率计算 (因为我们知道A的前提了,可以算联合概率)。

    判别式模型一般用条件概率计算 (因为我们不知道前提,所以只能"假设"A条件下B的概率)。

    生成模型的目标是求联合概率分布P(X,Y),然后由条件公式求取条件概率分布P(Y|X)。即 P(Y|X) = P(X,Y) / P(X)。因为学习联合分布,所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪。

    判别模型是由训练数据直接求取决策函数Y=f(x)或者条件概率分布P(Y|X)。它并不需要关心X与Y之间的生成关系,它关心的是对于给定输入X应该得到怎么样的输出Y,不需要先学习出来联合分布P(X,Y) 。不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。由于直接学习P(Y|X)或f(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题

    3.4 用网上经典例子来解释:

    例子1: 比如说要确定一只羊是山羊还是绵羊

    判别模型的方法是:

    先从历史数据中学习到一个统一的模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。我只要学会绵羊和山羊某个特殊差别就好

    比如山羊更擅长攀岩,按照岩壁坡度进行判别,能在45度以上山坡行走的就是山羊,以下是绵羊。

    而眼前这个羊走85度山坡如履平地,所以它是山羊。

    生成模型的方法:

    根据山羊的特征首先学习出一个山羊模型(躯体瘦,角三菱型,呈镰刀状弯曲,一般毛粗而短,毛色多为白色,也有黑色、青色、褐色或杂色的,尾巴往上翘,胆子大,采食灌木嫩枝条)。

    根据绵羊的特征学习出一个绵羊模型(躯体丰满,头短,公羊有螺旋状大角,母羊无角或只有细而小的角。毛细蜜、多为白色。 绵羊的嘴唇薄而灵活,适于啃食很短的牧草,性情温顺,胆小,主要吃草)。

    然后从这只羊中提取各种特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。

    在这个问题中,第一个判别模型方法中你只记住了山羊和绵羊之间的不同之处。第二个生成模型的思路中,你实际上学习了什么是绵羊,什么是山羊

    例子2: 识别一个语音属于哪种语言

    例如对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。那么你可以有两种方法达到这个目的:

    • 学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你说话,你就可以知道他说的是什么语音。这就是GM。
    • 不去学习每一种语言,你只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。这就是DM。

    例子3:跟踪算法

    • 生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。
    • 判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。

    3.5 如何选择模型?

    一般来说,生成式模型需要非常充足的数据量以保证采样到了数据本来的面目。判别模型对数据量要求没生成式的严格。但是也要具体情况具体分析。

    比如根据贝叶斯公式,我们知道P(X,Y)=P(X|Y)P(Y)=P(Y|X)P(X), 所以生成模型也可以表示成:P(Y|X)=P(X|Y)P(Y)/P(X)

    而我们现在用P(Y|X)=P(X|Y)P(Y)/P(X)这个公式,首先求解的是P(X|Y),所以有些地方也说对P(X|Y)建模为GM(当然也要求P(Y)和P(X)),对P(Y|X)直接建模为DM;意思其实是一样的,以为GM中先对P(X|Y)建模后,可以求出联合分布P(X,Y)=P(X|Y)P(Y),仍可以说是求联合分布为GM。

    例如:X=吸烟的人,Y=得肺癌的几率,对P(Y|X)建模可能非常复杂。而对P(X|Y)建模就比较容易,因为对P(X|Y)建模就好像在得肺癌的人里面看吸烟人的情况。我们都知道吸烟的人数亿计,但得肺癌的人毕竟是少数,建模从得肺癌的人出发,更加容易,比如10万个得肺癌的,抽样1000个就差不多了。

    4. 最大熵模型概念

    最大熵模型是分类器中的 判别模型,它直接计算条件熵。

    假定 X为输入特征,Y为类标,有了一定的经验知识,给定一个数据集。判别模型就是要学习一个条件概率分布模型 P(y|x)。这样的分布有无数种,那么在这无数种概率分布中,哪一个才是好的呢?这就是应用最大熵来得到模型。

    我们对已知的知识建模,对未知的不过任何假设。换句话说,在给定一组事实(features+output)的条件下,选择符合所有事实,且在其他方面近可能均匀的模型。

    • 基于最大熵原理的最大熵模型就是最符合自然状态下概率分布的模型,所以模型是最可能真实发生的。
    • 最大熵原理通过熵的最大化来表示等可能性(尽可能均匀分布)。“等可能”不容易操作,而熵则是一个可优化的数值指标。
    • 当没有任何约束条件则只需找到熵最大的模型。
    • 若概率模型需要满足一些约束,则最大熵原理就是在满足已知约束的条件集合中,对未知的情况不做任何的主观假设。
    • 此时最好的分布就是符合这个经验知识的前提下,熵最大的分布。即最大熵统计模型获得的是所有满足约束条件的模型中信息熵最大的模型。
    • 我们根据【无知信息最大化熵】的假设来分别对分类现象进行【等可能处理】,进一步得到所有现象出现的概率,从而能够用于预测分类。
    • 对于一个输入X,我们将X导入最大熵模型,得出了一个Y类,这个Y类就是X在这个最符合自然规律分布 (各种可能性均匀分布) 模型下应该归属的类目

    5. 构建最大熵模型

    5.1 目的

    我们的任务是构造一个统计模型,该模型能够准确表示随机过程的行为。该模型任务是预测在给定上下文 x 的情况下,输出y的概率:p(y|x).

    一个分类模型的生成一般分成两步骤:

    • 是从样本中抽取一组决策过程的事实(规则)
    • 是基于这些事实构建这一分类过程的模型。

    经验知识就是约束条件,它是靠特征函数来引入的。特征函数f(x,y)描述x与y之间的某一事实(经验知识)。

    5.2 推导过程

    优化推导的过程:在给定训练集下,即给定约束(经验知识)下,能够得到符合约束的条件概率模型集合{P(y|X)}。

    这里我们要将P(y|x)看做是无数个概率分布的集合,即每一个x,都对应一个特定的概率分布P(y|x),每一个概率分布都会有一个熵,此时,所谓的最大熵,就是最大化这些所有的概率分布的熵的和,由于每个x都有一个经验概率P~(x),我们还需要对所有这些熵进行加权求和,以此表示哪一个概率分布的熵的最大化更加重要。

    然后使用特征函数的形式,将训练数据融入到条件概率中,最后基于最大熵原理,在所有可能的概率模型(概率分布)中选择条件熵最大的模型为最终分类模型。故而最大熵模型的学习就是求解约束最优化问题。

    最原始的最大熵模型的训练方法是一种称为通用迭代算法 GIS(generalized iterative scaling) 的迭代算法。GIS 的原理并不复杂,就是用第N次迭代的模型来估算每个特征在训练数据中的分布。大致可以概括为以下几个步骤:

    1. 假定第零次迭代的初始模型为等概率的均匀分布。
    2. 用第 N 次迭代的模型来估算每种信息特征在训练数据中的分布,如果超过了实际的,就把相应的模型参数变小;否则,将它们便大。
    3. 重复步骤 2 直到收敛。即当训练样本的特征分布和模型的特征分布相同时,就求得了最优参数。

    5.3 应用

    得到了模型的参数数值之后,我们就得到了最大熵模型。

    模型得到的结果是 P(y|x) 概率大小, 即给定一个输入x,分别得到不同的y对应的条件概率,根据概率的大小可以将x划分到不同的y中。这样就可以进行分类判断。

    注意这里的 P(y|x) 不是跟朴素贝叶斯一样从样本数据中获得先验概率然后计算,而是通过条件熵最大而求得。

    0x03 名著中的最大熵模型应用

    让我们从规避风险的角度来看。

    1. 应用最大熵

    水浒传中,宋江去江州充军路过梁山,吴用派人在各个路口等候。

    因为吴学究不知道宋江能从哪条路过,所以他在四条路上都排兵了,这样预测的风险最小。所以等到了宋江。

    三个人上路行了一日,到晚投客店安歇了,打火做些饭,又买些酒肉请两个公人。宋江对他说道:“实不瞒你两个说:我们今日此去正从梁山泊边过。山寨上有几个好汉闻我的名字, 怕他下山来夺我,枉惊了你们。我和你两个明日早起些,只拣小路里过去,宁可多走几里不肪。”两个公人道:“押司,你不说,俺们如何得知。我等自认得小路过去,定不得撞着他们。”当夜计议定了,次日,起个五更来打火。
    两个公人和宋江离了客店。只从小路里走。约莫也走了三十里路,只见前面山坡背后转出一夥人来。宋江看了,只叫得苦。来的王是别人,为头的好汉正是赤发鬼刘唐,将领着三五十人,便来杀那两个公人。这张千,李万,做一堆儿跪在地下。宋江叫道:“兄弟!你要杀谁?”刘唐道:“哥哥,不杀了这两个男女,等甚么!”宋江道:“不要你污了手,把刀来我杀便了。”两个人只叫得苦。刘唐把刀递与宋江。宋江接过,问刘唐道:“你杀公人何意?”
    刘唐说道:“奉山上哥哥将令,特使人打听得哥哥官司,直要来郓城县劫牢,却知哥哥不曾在牢里,不曾受苦。今番打听得断配江州,只怕路上错了路头,教大小头领分付去四路等候,迎接哥哥,便请上山。这两个公人不杀了如何?”

    2. 不应用 最大熵

    这就是三国演义中,华容道例子。

    因为诸葛先生手中没有足够兵马,没办法应用最大熵模型。所以为了规避风险,他只能根据曹操特点做了相关谋划最后选定了华容道。

    曹操是中国历史巅峰人物,而诸葛亮这种"多智而近妖"的人物在中国历史上是独占鳌头。一个能比普通人多算两步,一个能比普通人多算三步。

    但是这种谋划不是我们普通人能作的。我们普通人只能老实的选择最大熵模型。

    孔明先生的谋划

    时云长在侧,孔明全然不睬。云长忍耐不住,乃高声曰:“关某自随兄长征战,许多年来,未尝落后。今日逢大敌,军师却不委用,此是何意?”孔明笑曰:“云长勿怪!某本欲烦足下把一个最紧要的隘口,怎奈有些违碍,不敢教去。”云长曰:“有何违碍?愿即见谕。”孔明曰:“昔日曹操待足下甚厚,足下当有以报之。今日操兵败,必走华容道;若令足下去时,必然放他过去。因此不敢教去。”云长曰:“军师好心多!当日曹操果是重待某,某已斩颜良,诛文丑,解白马之围,报过他了。今日撞见,岂肯放过!”孔明曰:“倘若放了时,却如何?”云长曰:“愿依军法!”孔明曰:“如此,立下文书。”云长便与了军令状。”云长曰:“若曹操不从那条路上来,如何?”孔明曰:“我亦与你军令状。云长大喜。孔明曰:“云长可于华容小路高山之处,堆积柴草,放起一把火烟,引曹操来。”云长曰:“曹操望见烟,知有埋伏,如何肯来?”孔明笑曰:“岂不闻兵法虚虚实实之论?操虽能用兵,只此可以瞒过他也。他见烟起,将谓虚张声势,必然投这条路来。将军休得容情。”云长领了将令,引关平、周仓并五百校刀手,投华容道埋伏去了。玄德曰:“吾弟义气深重,若曹操果然投华容道去时,只恐端的放了。”孔明曰:“亮夜观乾象,操贼未合身亡。留这人情,教云长做了,亦是美事。”玄德曰:“先生神算,世所罕及!”

    曹操的算计

    正行时,军士禀曰:“前面有两条路,请问丞相从那条路去?”操问:“那条路近?”军士曰:“大路稍平,却远五十余里。小路投华容道,却近五十余里;只是地窄路险,坑坎难行。”操令人上山观望,回报:“小路山边有数处烟起;大路并无动静。”操教前军便走华容道小路。诸将曰:“烽烟起处,必有军马,何故反走这条路?”操曰:“岂不闻兵书有云:虚则实之,实则虚之。诸葛亮多谋,故使人于山僻烧烟,使我军不敢从这条山路走,他却伏兵于大路等着。吾料已定,偏不教中他计!”诸将皆曰:“丞相妙算,人不可及。”遂勒兵走华容道。此时人皆饥倒,马尽困乏。焦头烂额者扶策而行,中箭着枪者勉强而走。衣甲湿透,个个不全;军器旗幡,纷纷不整:大半皆是彝陵道上被赶得慌,只骑得秃马,鞍辔衣服,尽皆抛弃。正值隆冬严寒之时,其苦何可胜言。

    0x04 参考

    机器学习面试之生成模型VS判别模型

    [判别模型、生成模型与朴素贝叶斯方法]

    机器学习各种熵:从入门到全面掌握

    【机器学习】对数线性模型之Logistic回归、SoftMax回归和最大熵模型

    最大熵模型介绍

    95行代码实现最大熵模型训练

    最大熵用于文本分类

    深度学习--概率图模型(一)

    十五、一篇文章读懂拿了图灵奖和诺贝尔奖的概率图模型

    统计学习方法笔记(四)-最大熵模型原理及python实现

    生成模型(Generative)和判别模型(Discriminative)

    展开全文
  • 生成模型判别模型的对比

    千次阅读 2017-09-23 12:18:28
    1 前言监督学习就是学习一个模型(或得到一个目标函数),再用这个模型,对给定的数据进行预测。 这个模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X)。决策函数Y=f(X):输入一个X,它就输出一个Y,这个...
  • 如何区分生成模型判别模型

    千次阅读 2019-06-10 18:00:08
    生成模型判别模型 简单的概念 监督学习的目标是学习的得到一个模型,通过这个模型对给定的输出,得到一个特定的输出,从而预测该数据的类别。这个模型可以称为 classifier。这个模型对应的函数一般是 Y=f(X)Y=f(X)...
  • 生成模型判别模型的区别

    千次阅读 多人点赞 2018-08-16 17:26:01
    先上结论 公式上看 生成模型: 学习时先得到 P...判别模型: 直接学习得到P(y|x)P(y|x)P(y|x),利用MAP得到 yyy。或者直接学得一个映射函数 y=f(x)y=f(x)y = f(x)。 直观上看 生成模型: 关注数据是如何生成的 ...
  • 一、名词解释 生成方法由数据学习联合概率风波P(X,Y),然后求出条件概率分布P(Y|X)为预测的模型,即生成模型: ...判别方法由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测模型,即判别模型判别方法关
  • 生成模型判别模型的解释与举例

    千次阅读 2021-01-05 01:12:32
    文章目录前言一、生成模型判别模型的概念?二、个人理解三,生成模型判别模型举例 前言 在有监督学习中,不管是机器学习算法还是深度学习算法都可以分为生成学习和判别学习两种。 一、生成模型判别模型的概念...
  • 基于深度学习DBN算法的高速公路危险变道判别模型.pdf
  • 判别模型和生成模型

    2017-03-14 12:00:53
    判别模型是最大化后验概率,生成模型的目标是求出联合分布。 判别模型直接对p(y|x)进行建模。 生成模型会对x和y的联合分布p(x,y)进行建模,通过贝叶斯公式求p(y|x),最后选取使p(y|x)最大的yi。两者对比如下: 1....
  • 1. 判别模型和生成模型所属范畴 2. 直观理解 【判别模型】:要确定一张图片是猫还是狗,用判别模型的方法就是根据数据集X训练模型,然后把新的图片输入到模型中,模型给出这个图片是每个类别的概率。 【生成模型】...
  • 参考:生成模型 VS 判别模型 (含义、区别、对应经典算法) 机器学习“判定模型”和“生成模型”有什么区别? 判别模型和生成模型的区别,主要在于概率分布。对于一堆样本数据,第i个样本的特征为Xi(特征维度...
  • 监督学习方法可分为两大类,即生成方法与判别方法,它们所学到的模型称为生成模型判别模型 生成模型的特点 1.从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度 2.生成方法的学习收敛速度更快,即当...
  • 生成模型判别模型的区别与理解

    千次阅读 2020-10-16 10:14:07
    由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型判别方法关心的是对于给定的输入X,应该预测什么样的输出Y。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接...
  • 理解生成模型判别模型

    千次阅读 2018-10-10 17:51:03
    我们都知道,对于有监督的机器学习中的分类问题,求解问题的算法可以分为生成模型判别模型两种类型。但是,究竟什么是生成模型,什么是判别模型?不少书籍和技术文章对这对概念的解释是含糊的。在今天这篇文章中,...
  • 3.1判别模型和生成模型的思想 比如男女的二分类问题来说,判别模型就是要找到区分男女的划分边界,而生成模型则是要找到可以描述男女这两类数据分布的模型,可以用下面这张图简单概括一下 判别模型学习出来的是这里...
  • 在远同源检测的蛋白质分类方法中,基于判别模型的分类器相对于其他方法取得了最高的准确性,但这类方法都面临训练建模时因正类样本不足导致的训练不平衡问题。为此提出一种基于优化判别模型的蛋白质分类方法,通过对...
  • 1. 基本概念 2. 两者的区别和联系 3. 对应的模型
  • 判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。两者的优缺点如下图...
  • 通过原始导高分带特点、显水带阻水带压并与阻水储备段共同抵御底板突水的理论,指导邢台东庞矿9103工作面采前带压开采条件综合勘探,成果资料说明符合7种带压开采判别模型中的两种模型,并采取了相应的防治水对策,使该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,378
精华内容 30,951
关键字:

判别模型

友情链接: fpga.rar