引言
前面几讲,我们主要探讨了如何对 p(y|x;
在介绍这类算法之前,我们先来看一个简单的分类问题,比如我们想要设计一个算法区分大象
我们还可以从另外一个角度考虑,我们不去寻找这样一条决策边界,我们可以尝试建立一个模型分别描述这两种动物,因为狗有狗的样子,大象有大象的样子,如果建立的模型可以精确地描述这两类动物,并且将彼此之间的不同点区分开来,那么对于新输入的测试样本,我们可以看测试样本与哪类动物的描述更加接近,进而可以判断与某类动物的描述越接近,则该测试样本属于该类的概率就越大。
通常,直接求
一旦得到了 p(y) (也称为先验概率)和 p(x|y),利用贝叶斯准则,可以算出
其中,p(x) = p(x|y = 1)p(y = 1) + p(x|y =0)p(y = 0), 因此,上式可以完全用 p(x|y) 和 p(y) 来表示,事实上,如果用 p(y|x)来做预测的话,不用算出 p(x)的具体值,因为该式子满足如下关系:
所以,只要有 p(x|y) 和 p(y) 就足够了。
Gaussian discriminant analysis
我们介绍的第一个 generative 学习算法是Gaussian discriminant analysis (GDA). 这里我们将假设 p(x|y) 服从多元正态分布,在介绍Gaussian discriminant analysis (GDA) 之前,我们先简要讨论一下多元正态分布的特性。
The multivariate normal distribution
n 维空间的多元正态分布,也叫多元高斯分布,可以由均值向量(mean vector)
其中,
对于一个服从
高维随机变量的协方差定义为:
The Gaussian Discriminant Analysis model
在分类问题中,如果输入的是连续的随机变量,那么我们可以用 Gaussian Discriminant Analysis (GDA) 模型,利用多元正态分布来描述 p(x|y), 该模型可以表示如下:
其概率密度为:
其中,我们要估计得参数有
协方差矩阵)。 该模型的 log-likelihood 是:
进一步,我们利用最大似然估计,可以得到这些参数的最大似然估计值:
一旦得到这些参数,那么给定一个新的测试样本,我们可以利用这些参数算出 p(x|y=0) 和 p(x|y=1),测试样本属于概率大的哪一类。
GDA and logistic regression
GDA模型与 logistic regression 之间存在着有趣的联系,如果我们将条件概率
其中
我们可以看到,如果p(x|y)是多元高斯分布,那么p(y|x)是满足logistic 函数关系的,但是反过来不一定成立,即p(y|x)如果是logistic 函数,p(x|y)不一定是多元高斯分布。这意味着,GDA 给出的假设比logistic regression 要更强,如果假设是正确的(比如数据确实符合多元高斯分布),那么 GDA 会给出更好的拟合模型和结果。特别地,如果 p(x|y) 确实满足多元高斯分布,那么GDA是 asymptotically efficient。 这意味着,如果训练样本非常多的时候,严格意义上来说,GDA 给出的预测结果应该是最好的,其他的算法很难超越它(取决于对 p(y|x)的估计有多准确),这种情况下,GDA的表现应该比logistic regression 更好。
相反,logistic regression 给出的假设相对较弱,所以logistic regression 更加稳健,对模型的假设有更大的容错性,很多不同的数据分布的假设最终可以用logistic函数表示,比如前面提到的泊松分布,如
总而言之,GDA给出的是更强的假设,当数据分布接近高斯分布时,一般来说GDA会更加高效,可以用较少的数据训练出性能不错的模型。而logistic regression给出的是相对较弱的假设,但是对不同的数据分布有更稳健的包容性。具体来说,当数据分布不服从高斯分布的,logistic regression 的表现几乎总是优于GDA,所以在实际的应用中,logistic regression 比GDA要用得更加广泛。
参考文献
Andrew Ng, “Machine Learning”, Stanford University.