生成学习算法
前面我们学习的算法是在给定x情况下研究y的条件分布,今天我们将要学习通过y确定特征的一种算法。
前一种算法被称作判别式算法,后一种被称为生产学习算法。例如y代表一个样本是否是狗(y=0)或者大象(y=1),那么p(x|y=0)代表狗的特征,相反p(x|y=1)代表大象的特征分布。
有了先验概率p(y)和条件概率p(x|y)我们便可以使用贝叶斯法则得到:
其中p(x)=p(x|y=1)p(y=1)+p(x|y=1)p(y=0),也可以直接用p(x|y)和p(y)表示。事实上如果我们想用判别式算法p(y|x)做预测,我们不需要计算分母,只需要让分子最大即可:
高斯判别式分析
首先,我们需要了解什么是多元高斯分布,其是均值为????∊Rd并且和协方差矩阵????∊Rd*d(注意,????>0并且是半正定的)组成的分布,可以写成N(????,????)假设x为随机变量则其表达式为:
其中|????|是????的行列式。下面我们开始讨论高斯分布模型,假设:
那么我们可以利用多元高斯分布表示为:
应用极大似然估计思想,进行取对运算:
最后得到:
高斯判别式分析(GDA)和逻辑回归(logistic regression)
如果我们吧p(y = 1|x; φ, μ0, μ1, Σ)看作是x的函数,那么就可以表示为:
其中????拟合了参数φ, Σ, μ0, μ1,这样它的格式就和logistic回归一样了,那么我们怎么在GDA和logistic回归之间进行选择呢?
首先,如果p(x|y)是多元高斯分布,那么p(y|x)一定是服从逻辑回归的,相反,如果p(y|x)是逻辑函数,不能说明p(x|y)是高斯分布,这说明高斯分布的条件性要更强,但是事实证明如果对数据的假设正确,即数据是服从多元高斯分布的那么GDA的模型数据拟合效果将会很好,并且随着数据量的增大,其是渐进有效的。
相反,如果我们对于一个数据的进行弱假设,那么logistic回归的模型健壮性将更好,其对错误建模假设并不敏感。
总结一下:当建模假设正确或至少近似正确时,GDA会做出更强的建模假设,并且数据效率更高(即,需要更少的训练数据来学习)。逻辑回归的假设条件较弱,并且对建模假设的偏离明显更强。具体来说,当数据被认为是非高斯数据时,那么在大型数据集的限制下,逻辑回归几乎总是比GDA更好。因此,实际上,逻辑回归比GDA更常用。 (关于判别算法与生成算法的一些相关考虑因素也适用于我们接下来讨论的朴素贝叶斯算法,但是朴素贝叶斯算法仍然被认为是一种很好的分类算法,当然也是一种非常流行的分类算法。)
朴素贝叶斯
前面学习的高斯判别式分析针对是连续型数据,下面我们将要讨论的是一种适用于离散型数据的算法。
为了方便理解,我们先举一个邮件分类的例子,假设我们有个一个邮件分器,它可以自动识别文本并将垃圾邮件放入一个文件夹。首先,我们需要构建训练模型,我们的输入x将是一个词汇字典长度的向量,每一个x代表一封邮件,我们将在邮件中出现的单词标记为1具体如下:
但是由于词汇表太长如果我们对他们建模那么我们得到太多的参数不利于计算,所以未来解决这个问题,我们将假设x是条件独立于y的。这个假设就是朴素贝叶斯假设,比如,buy这个单词在x中处于2087位,price这个单词在x中处于39831这个位置,那么在已知y=1的条件下buy这个单词的出现对price这个单词出现的概率无影响。这可以被写成p(x2087|y) = p(x2087|y, x39831)但是这并不是说x2087和x39831是相互独立的,即这和p(x2087) = p(x2087|x39831)是两回事。我们只是假设这两个随机变量是条件对立,所以我们得到:
我们的假设可以被参数 φj|y=1 = p(xj = 1|y = 1), φj|y=0 = p(xj = 1|y = 0), 和φy = p(y = 1)参数化通过给定训练集{(x(i),y(i));i = 1, . . . , n}应用极大似然估计:
结果为:
获得上述参数后,我们在得到一个新的邮件的时候就可以应用模型,判读其为垃圾邮件的概率: