生成学习算法(Generative Learning Algorithm)——机器学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a493823882/article/details/81517008

零 前言

0.1 不同的建模思路

之前讨论的回归模型,如线性回归、Logistic等都是在x的情况下对y的估计,即对p(y|x;θ)进行建模。

为什么使用这样一个条件概率?我们可以从直角坐标系出发给出一个感性的理解。若有m个特征,即xi最大下标为m,每个特征对应不同的一个x轴,其与相同的y轴构成了多个y-xi平面,在每个平面都有一个曲线,拟合结果是给定每个xi得到预测yi的总和。所以都是给定x,对y进行预测。y|x的实际意义是已知某个特征进行建模。

对模型参数的优化,都是对以下似然函数求最大值

那么之前的方法是直接求单个特征的p(y|x;θ),然后根据累乘算出似然函数。

现在考虑通过计算p(x|y;θ)来计算似然函数。即对某个y的值,对x值进行建模。同样也需对p(y)进行建模,然后p(x)的概率可由全概率公式求出。所以根据贝叶斯公式

可求出p(y|x)的概率。这也是这种思路建模的来源。

若对于二分问题,y∈{0,1},那么我们对于某个特征x,只关心不同y值p(y|x)的大小比较,将p(y|x)较大的作为预测值,即求

因为只与y有关系,那么上式可写作:

0.2 判别方法的定义

判别学习算法(discriminative learning algorithm):直接对p(y|x)建模

生成学习算法(generative learning algorithm):对p(x|y)和p(y)建模

一 高斯判别分析(Gaussian Discriminant Analysis GDA)

GDA中,对p(x|y)的假设(或是建模)是多项正态分布。

1.1 多项正态分布(Multivariate Normal Distribution)

n维的多项正态分布的参数为均值向量μ∈Rn,协方差矩阵Σ∈Rn×n,记作,其概率密度表示为如下

其中“||”代表行列式符号。

其它资料请自行查阅

1.2 GDA的具体模型

对于二分问题,而且特征x的取值为连续值,根据GDA的假设,y与x|y的分布如下

那么p(x|y)与p(y)如下

其中参数为φ,Σ,μ0和μ1,那么对数似然函数如下(一般假设y=0和1时拥有相同的协方差矩阵)

对这四个参数分别求极值,可以得到

其求法就是对要求的某个参数,固定其它参数然后求最大值,这里给出求φ的方法示意,其他不再展示

对于这些求得的参数,其意义为

φ是训练样本中结果y=1占有的比例。

μ0是y=0的样本中特征均值。

μ1是y=1的样本中特征均值。

Σ是样本特征方差均值。

得到如下图所示的分类

其中的圆圈代表等高线,此为俯视图,高为预测值y。

1.3 GDA与logistic回归

注意到有

那么有

其中θ为φ,Σ,μ0和μ1的某个函数。其和logistic回归十分相像。

逻辑回归和GDA在训练相同的数据集的时候我们得到两种不同的决策边界,那么怎么样来进行选择模型呢:

上面提到如果p(x|y)是一个多维的高斯分布,那么p(y|x)可以推出一个logistic函数;反之则不正确,p(y|x)是一个logistic函数并不能推出p(x|y)服从高斯分布.这说明GDA比logistic回归做了更强的模型假设.

如果p(x|y)真的服从或者趋近于服从高斯分布,则GDA比logistic回归效率高.

当训练样本很大时,严格意义上来说并没有比GDA更好的算法(不管预测的多么精确).

事实证明即使样本数量很小,GDA相对logisic都是一个更好的算法.

但是,logistic回归做了更弱的假设,相对于不正确的模型假设,具有更好的鲁棒性(robust).许多不同的假设能够推出logistic函数的形式. 比如说,如果这里写图片描述这里写图片描述那么p(y|x)是logistic. logstic回归在这种类型的Poisson数据中性能很好. 但是如果我们使用GDA模型,把高斯分布应用于并不是高斯数据中,结果是不好预测的,GDA就不是很好了.

二 朴素贝叶斯(Naive Bayes)

现在考虑x的取值是是离散的情况。

我们沿用对垃圾邮件进行分类的例子,我们要区分邮件是不是垃圾邮件。分类邮件是文本分类的一种应用

将一封邮件作为输入特征向量,与现有的字典进行比较,如果在字典中第i个词在邮件中出现,则xi =1,否则xi =0,所以现在我们假设输入特征向量如下:

image

选定特征向量后,现在要对p(x|y)进行建模:

假设字典中有50000个词,x ∈ {0, 1}^50000   如果采用多项式建模, 将会有2^50000种结果,2^50000-1维的参数向量,这样明显参数过多。所以为了对p(x|y)建模,需要做一个强假设假设x的特征是条件独立的,这个假设称为朴素贝叶斯假设(Naive Bayes (NB) assumption),这个算法就称为朴素贝叶斯分类(Naive Bayes classifier).

解释:

如果有一封垃圾邮件(y=1),在邮件中出现buy这个词在2087这个位置它对39831这个位置是否出现price这个词都没有影响,也就是,我们可以这样表达p(x_2087|y) = p(x_2087|y, x_39831),这个和x_2087 and x_39831 相互独立不同,如果相互独立,则可以写为p(x_2087) = p(x_2087|x_39831),我们这里假设的是在给定y的情况下,x_2087 and x_39831 独立。

那么可以得到 

 

解释

第一个等号用到的是概率的性质 链式法则

第二个等式用到的是朴素贝叶斯假设

朴素贝叶斯假设是约束性很强的假设,一般情况下 buy和price是有关系的,这里我们假设的是条件独立 ,独立和条件独立不相同

模型参数:

φi|y=1 = p(xi= 1|y = 1)

φi|y=0 = p(xi = 1|y = 0)

φy = p(y = 1)

对于训练集{(x(i) , y(i)); i =1, . . . , m},根据生成学习模型规则,联合似然函数(joint likelihood)为:

image

得到最大似然估计值:

image

最后一个式子是表示y=1的样本数占全部样本数的比例,前两个表示在y=1或0的样本中,特征Xj=1的比例。

拟合好所有的参数后,如果我们现在要对一个新的样本进行预测,特征为x,则有:

image

实际上只要比较分子就行了,分母对于y = 0和y = 1是一样的,这时只要比较p(y = 0|x)与p(y = 1|x)哪个大就可以确定邮件是否是垃圾邮件

三 拉普拉斯平滑(Laplace smoothing)

朴素贝叶斯模型可以在大部分情况下工作良好。但是该模型有一个缺点:对数据稀疏问题敏感。

  比如在邮件分类中,对于低年级的研究生,NIPS显得太过于高大上,邮件中可能没有出现过,现在新来了一个邮件"NIPS call for papers",假设NIPS这个词在词典中的位置为35000,然而NIPS这个词从来没有在训练数据中出现过,这是第一次出现NIPS,于是算概率时:

image

由于NIPS从未在垃圾邮件和正常邮件中出现过,所以结果只能是0了。于是最后的后验概率:

image

对于这样的情况,我们可以采用拉普拉斯平滑,对于未出现的特征,我们赋予一个小的值而不是0。具体平滑方法为:

假设离散随机变量取值为{1,2,···,k},原来的估计公式为:

image

使用拉普拉斯平滑后,新的估计公式为:

image

即每个k值出现次数加1,分母总的加k,类似于NLP中的平滑,具体参考宗成庆老师的《统计自然语言处理》一书。

  对于上述的朴素贝叶斯模型,参数计算公式改为:

image

猜你喜欢

转载自blog.csdn.net/a493823882/article/details/81517008