在之前的算法学习中,学到的都是通过建立P(y|x;θ)(已知x的条件分布)模型来做算法学习。比如,现在要分辨两种动物,大象(y=1)和狗(y=0),从之前的学习中,我们可以知道,需要从给定的训练数据集的特征x中,学习到通过特征值来判断结果的模型。
现在换种思路,我们分别建立模型来表示大象或狗,在分辨一个新动物时,把新动物按照这两种动物的模型分别做运算,看看这个动物更像哪一种模型。
以上就有两种学习算法,一种是通过一种模型直接学习到条件分布p(y|x),或者说是通过特征输入x预测出结果输出y的算法叫做判别学习算法(discriminative learning algorithms),而另一种算法,把各种分类对应的特征来建模,即建立条件分布p(x|y)(和p(y)),就叫做生成学习算法 (generative learning algorithms),在本例中,就是建立两个模型一个是大象的特征分布p(x|y=1)和狗的特征分布p(x|y=0)。
当知道了p(y)(类先验)和p(x|y),我们的算法就能运用贝叶斯(Bayes)法则来推导出y的条件概率:
p(y|x)=p(x|y)p(y)p(x)
其中,分母
p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)
如果为了计算y=1和0的概率谁更大一些,我们不需要计算分母:
argmaxy(p(y|x))=argmaxy(p(x|y)p(y)p(x))=argmaxy(p(x|y)p(y))
高斯判别分析 (GDA,Gaussian Discrimniant analysis)
多元正态分布
在这个模型中,p(x|y)假设成为多元正态分布。
n维的多元正态分布,也叫做多元高斯分布,参数是均值向量(mean vector)μ∈Rn,还有一个参数是协方差(covariance matrix)矩阵∑∈Rn∗n,其中∑≥0是对称的半正定矩阵。分布写成数学形式是N(μ,∑),它的密度表示如下:
p(x;μ,∑)=1(2π)n/2|∑|1/2exp(−12(x−μ)T∑ −1(x−μ))
其中
|∑|表示矩阵
∑的行列式。
任何属于该分布
N(μ,∑)的随机变量
X的均值和协方差分别是:
E[X]=∫xxp(x;μ,∑)dx=μ
Cov(X)=∑
与一般的普通正态分布一样,均值决定了分布的中心点的位置,而方差决定了分布的范围。
高斯判别分析模型
当我们遇到特征x是连续随机变量时,我们就能用GDA模型,这个模型中,主要是把p(x|y)构建成为多元正态分布。具体模型如下:
y∽Bernoulli(ϕ)
x|y=0∽N(μ0,∑)
x|y=1∽N(μ1,∑)
写出他们的分布:
P(y)=ϕy(1−ϕ)(1−y)
P(x|y=0)=1(2π)n/2|∑|1/2exp(−12(x−μ0)T∑ −1(x−μ0))
P(x|y=1)=1(2π)n/2|∑|1/2exp(−12(x−μ1)T∑ −1(x−μ1))
在这里,模型中的参数是
ϕ,∑,μ0,μ1(2个分布都用同一个协方差矩阵
∑,分别用两个不同的均值)。对以上的数据采用对数似然函数:
l(ϕ,μ0,μ1,∑)=log∏i=1mp(x(i),y(i);ϕ,μ0,μ1,∑)=log∏i=1mp(x(i)|y(i);μ0,μ1,∑)p(y(i);ϕ)
最大化似然函数后,可以算出参数的值:
ϕμ0μ1∑=1m∑i=1m1{y(i)=1}=∑mi=11{y(i)=0}x(i)∑mi=11{y(i)=0}=∑mi=11{y(i)=1}x(i)∑mi=11{y(i)=1}=1m∑i=1m(x(i)−μy(i))(x(i)−μy(i))T
把模型用图形来表示的:
![【学习笔记】斯坦福大学公开课(机器学习) 之生成学习算法:GDA 【学习笔记】斯坦福大学公开课(机器学习) 之生成学习算法:GDA](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE0Ni8xZWE5YWNiZWRiYmRkM2Q0MTBkZTEwNzM0MjkyMTk2Mi5KUEVH)
可以看到2个高斯分布图形,他们有同样的协方差,所以这两个圆的半径是一样的,但他们不同的均值,使得他们的中心有所区别。
中间的直线就是区分的界限,表示
p(y=1|x)=0.5