生成学习算法
至此,我们已经对给定
x
后
我们先来考虑这样一个分类问题:我们想区分大象(
这里还有一种不同的方法。首先我们先对大象进行研究,我们了以建立一个模型告诉我们大象是怎样的。接下来再对狗进行研究,可以建立一个模型告诉我们狗是啥样的。最后呢,对已一个我们想要分类的未知的动物,我们先将它和训练集里的大象作比较,然后再和训练集里的狗做比较,最后看它是更像狗还是更像大象,从而给出我们的预测结果。
对于想直接学习到
p(y|x)
(比方说逻辑回归)或是想直接学习到从输入空间
X
到标签
{0,1}
映射关系的算法(例如感知器算法),我们把之类算法叫做判别模型学习算法.这里我们希望讨论另外一种算法,这类算法希望对
p(x|y)(and)p(y)
进行建模,我们称这类算法为生成模型算法。例如:如果
y
表示一个样本是狗
在得到先验概率
p(y)
和
p(x|y)
后,我们可以再利用贝叶斯规则推导出后验概率:
这里的分母我们可以通过式子 p(x)=p(x|y=1)+p(x|y=0) 得到,我们可以将其标傲世为 p(x|y) 和 p(y) 的一个定量的式子。实际上,若果我们是想通过 p(y|x) 来做预测,我们是可以不计算分母的(因为对所有的预测样本分母的值是一样的),因此:
高斯判别分析
我们将接触第一个生成模型算法,高斯判别分析(GDA).在这个模型中,我们假设 p(x|y) 服从多元正态分布,首先我们先来讨论一下多元正态分布的特性。
多元正态分布
n
维的多元正态分布也叫做多元高斯分布,由参数:均值向量
上式中: |Σ| 表示矩阵 Σ 的行列式。
对于一个满足正态分布 N(μ,Σ) 的随机变量 X ,均值的定义为:
对于一个向量的随机变量 Z 的协方差定义为:
我们再来看几个例子:
上面的图像显示的高斯分布的方差还是0,协方差矩阵为:
再来看几个例子:
高斯判别分析模型
当我们在处理一个输入特征
x
是连续随机变量时,我们可以利用高斯判别分析模型,这里将
将分布表示出来有:
在我们模型中的参数有:
ϕ,Σ,μ0,μ1
(这里两个均值的取值是不一样的,但是方差是一样的),log似然函数的置为:
通过将
ℓ
最大化我们得到参数的最大似然估计值为:
将这个过程图像化,这个图是画出了所有的训练集,以及这两个高斯分布的轮廓,我们可以看到这两个高斯分布有相同形状的轮廓这是因为他们的协方差矩阵是一样的,图像中的直线给出了决策边界。
讨论:GDA以及逻辑回归
GDA模型和逻辑回归模型有一个很有意思的关系,如果我们将定式:
p(y=1|x;ϕ,μ0,μ1,Σ)
看成是
x
的函数。我们将可以把它表示成:
这里 θ 是 ϕ,Σ,μ0,μ1 的函数,这正是逻辑回归模型的形式(判别算法用来对 p(y=1|x) 进行建模)。
通常对于相同的训练数据,GDA和逻辑回归模型会给出不同的决策边界。那,那个模型更好呢?
我们仅讨论 p(x|y) 是多源高斯分布的的情形(且协方差矩阵是一样的),那么 p(y|x) 必然服从逻辑回归函数,但是反过来却不一定成立。这表明GDA的假设要比逻辑回归要严格。并且结果表明,当这些模型的假设是正确的时候,GDA的效果更好。尤其当 p(x|y) 是高斯分布时,GDA是渐进有效的(asymptotically efficient,也就是说对于训练样本十分大时,将没有算法的性能会比GDA好),这里的前提是 p(x|y) 严格服从高斯分布。
相反的,由于逻辑回归模型它的假设要弱些,因此它的鲁棒性要更强,并且对错误的模型假设也更不敏感。这里有很多不同的假设也可以使得 p(y|x) 具有逻辑回归函数的形式,比如: x|y=0∼Poisson(λ0) 以及 x|y=1∼Poisson(λ1) ;逻辑回归模型对泊松分布的数据也能处理的很好,但是GDA就不一定,可能可以处理,也可能得到的预测效果会比较差。
总结
朴素贝叶斯
在GDA中,特征向量
x
是实数且连续的向量,现在我们要讨论另外一种算法来处理离散的特征向量。我们再来考虑邮件分类这个例子,邮件分类是文本分类问题中的一个例子。假定我们现在有一个训练集(已经标记为正常邮件和垃圾邮件),现在我们开始构建我们自己的垃圾邮件过滤器。
首先我们利用一个特征矩阵来表示邮件,这个特征矩阵的长度等于字典中单词的数目,如果邮件中包含了字典中的第
现在我们已经有了特征向量,所以我们现在构建一个判决模型。因此我们必须对
p(x|y)
进行建模,但是若果说,我们有一个字典有50000个词,那么
x∈{0,1}50000
,
x
是一个50000维的矩阵,如果我们对
为了对
p(x|y)
进行建模,我们必须做一个很强的假设。我们假设对于给定的
y
与
第一个式子是由概率的基本性质得到的,第二个等式运用了NB(朴素贝叶斯)假设。虽然朴素贝叶斯假设是一个强假设,但是对于处理一些问题却还是很有用。
我们构建的这个模型的参数有:.与之前一样,对于一个给定的训练集
{(x(i),y(i));i=1,⋯,m}
,这些数据的联合似然函数为:
将其最大化,我们得到 ϕy,ϕi|y=1,ϕi|y=0 的最大似然估计为:
在上式中,符号 ∧ 表示”and”的意思。之后我们可以通过拟合得到的参数对一个特征为 x 的新样本进行预测:
然后选择后验概率大的那一类作为识别结果。(上式可以转化为参数的函数)。
刚才我们看到了用于处理特征是二值的朴素贝叶斯算法,显然特征值可以推广到多值的情况,即
居住面积(单位 feet2 ) | <400 | 400-800 | 800-1200 | 1200-1600 |
1600 |
---|---|---|---|---|---|
xi | 1 | 2 | 3 | 4 | 5 |
因此,对于一个面积为890
feet2
的房子,我们将把其对应未知的特征值
xi
设为3.
当原始的连续的属性不容易建模成多项式的正态分布模型(GDA),我们可以将其离散化然后再使用朴素贝叶斯方法来得到一个更好的分类器。
拉普拉斯平滑
朴素贝叶斯算法通常可以很好的解决一些问题,但是给它在加一点处理,它将工作的更好,尤其对于文本分类。下面我们先简单的说一下我们的问题,然后在讨论如何进行一点小的改进。
假定对于先前建立的邮件分类算法,在训练样本中没有”nips”这个单词,我们假定“nips”这个单词在我们的字典中是存在的且为第35000个单词。所以NB对参数
ϕ35000|y
的最大似然估计的取值为:
也就是说,由于在训练集的垃圾邮件和非垃圾邮件中都没有见到过“nips”,分类器就认为在任何类型的邮件中”nips”都不会出现。当我们来确认一个包含“nips”的邮件是垃圾邮件的概率时,计算公式为:
这是因为每个
∏ni=1p(xi|y)
都包含项
p(x35000|y)
因此相乘后为0.由于最后的结果为
0/0
,分类器将不知道如何给出预测结果。
将这个问题进行一个更加通用的陈述,分类器会将在有限的训练集中没有见过的事件的概率错误的估计为0。考虑这样一个问题,估计一个取值为
{1,⋯,k}
随机变量
Z
的多项式分布的的均值。我们可以将这个多项式模型参数化为:
正如我们之前看到的,如果我们使用这些最大似然估计,那么一些 ϕj 的值将为0。为了避免这个问题,我们可以利用 拉普拉斯平滑,上面的估计将会被下式代替:
这里我们在分子上加了一个1,在分母加了k,注意: ∑ki=1ϕj=1 仍然满足,这是我们期望具有的一个特性,因为 ϕj 对应的是概率,因此相加必须为1.同时对于所有的 ϕj≠0 解决了我们上面概率为0的问题。
返回到我们的朴素贝叶斯分类器,在经过拉普拉斯平滑之后,我们可以得到下面的估计参数:
在实际应用中我们一般不需要对 ϕy 进行拉普拉斯平滑。因为在在训练样本中我们一般会保证样本的平衡。
文本分类的事件模型
我们之前看到的NB使用了多变量伯努利事件模型.在这个模型中,我们首先随机选定了邮件的类型(垃圾或者普通邮件,也就是
p(y)
,然后一个人翻阅词典,从第一个词到最后一个词,随机决定一个词是否要在邮件中出现,出现标示为 1,否则标示为 0。然后将出现的词组成一封邮件。决定一个词是否出现依照概率
p(xi|y)
。那么这封邮件的概率可一表示为
p(y)∏ni=1p(xi|y)
.
这里有一个不同的模型,叫做多项式事件模型。为了描述这个模型,我们要建立另外一套符号。我们用
xi
表示邮件中的第
i
个单词。因此
在一个多项式分布事件模型中,我们假定在确定邮件类型(垃圾邮件和非垃圾邮件)后,这封邮件的生成过程是一个随机过程。那么发件人首先从从一个多项式分布中选择第一个单词
x1
,也就是
p(x1|y)
,接下来第二个单词
x2
,第二个单词与第一个单词是相互独立的,并且也是从相同的多项式分布中选取,其他的单词与之个也是一样的。因此这封邮件的总概率为
p(y)∏ni=1p(xi|y)
,现在
xi|y
是多项式分布而不是伯努利分布。
新的模型的参数为:
ϕy=p(y);ϕi|y=1=p(xj=i|y=1)
对于所有的
j
;另外
若有一个训练集
{(xi,yi);i=1,⋯,m}
,因此我们可以得到训练数据的似然函数:
将其最大化,就可以得到最大似然参数的值:
其中,
ni
是是第
i
<script type="math/tex" id="MathJax-Element-6005">i</script>个样本的单词数采用拉普拉斯平滑后我们可以得到: