- 概率图模型基础
- 概率潜在语义分析(PLSA)
- LDA
概率图模型基础
猜球游戏
有两个信封,其中一个装有一个红球,一个黑球。另一个信封有两个黑球。
。
假设红球价值100元,黑球价值1元。
你随机从其中拿起一个信封,从里面随便取出一个球,然后你发现这个球是黑色的。
请问此时,如果让你选择其中一个信封,你会选择哪个?已经检查过的还是未被检查过的?
分析:
如果在没有看之前,选择两个信封的概率都是1/2。由于增加了已知条件,后验概率P(E=1|B=b)改变了。
定义两个随机变量:信封编号:E∈{1,2},1号含有红球。小球颜色:B∈{r,b}
根据定义:P(E=1)=P(E=2)=1/2 ; P(B=r|E=1)=1/2 ; P(B=r|E=2)=0
问题:P(E=1|B=b)>=1/2 ??
P(E=1|B=b):刚才看的黑球的信封是 1 号信封的概率如果大于1/2,那么就选择这个信封,否则选择那个未开封的信封。
思路一:
概率图模型:有节点和边的集合构成,节点集表示一组
随机变量 X1,X2...Xn,连接节点的边表示变量之间的关联(概率)
为什么要用概率图模型:
如果不用概率图模型,我们要表示一个P(x1,x2,...xn)联合概率(如果 x∈{0 , 1} ),则总共需要 存 2^n-1 个概率值。如
p(x1=0,x2=0,...xn=0) ,p(x1=1,x2=0,...xn=0),p(x1=0,x2=1,...xn=0)...
难以解释条件独立关系。
如
已知: x1 x2 x3 和 p(x1,x2,x3,y1,y2,y3)
未知:y1 y2 y3
那么要求p(y1|x1,x2,x3) p(y2|x1,x2,x3) p(y3|x1,x2,x3)
如果我们用概率图表示:
假设图为
如果我们要求 P(A|C,E,F,B) 由于A 与B 条件独立,那么我们就不需要B , P(A|C,E,F,B) =P(A|C,E,F)
我们根据图就可以看出A与B条件独立。
概率图模型两个任务:
- 推理(Inference)
给定联合分布 P(x1,x2...xn) ,计算
,其中
(已知节点与未知节点并集为全图)
例如:Q={n},E={1,2...n-1}
根据联合概率和已知节点求未知节点取值的概率。
- 学习(Learning)
从训练数据中 X(1),X(2)...X(n)(其中 X(i)=(X(i)1,X(i)2...X(i)n)) 中估计联合分布p(x1,x2...xn)
注意:有边有点不等于图模型。
神经网络,决策树,网络流都是不是。
因为节点不是“随机变量”,边不是概率概率关系(因为概率无向图模型中的边不是概率,是概率关系,因为势函数定义在最大团上,很难说边是概率)。
概率有向图模型,也叫贝叶斯网。
一个基于
有向无环图的贝叶斯网可以用下面的分布表示。
- 其中Pak 是 xk 的父节点集合
- p(xk|Pak)是在 xk 点上的条件概率分布
- 通过确定所有点上的条件概率分布,能唯一的确定一个图模型p(X)
如:下贝叶斯网:
本图模型需要存储的数据:P(x1=1),P(x2=1),P(x3=1) 注意:P(x1=0) 可用1-P(x1=1) 表示。 3个
P(x4|x1,x2,x3) 2^3 (x1,x2,x3 的排列组合) 8个
p(x5|x1,x3) 2^2 =4 个
p(x6|x4) 2^1= 2 个
p(x7|x4,x5) 2^2=4 个
3+8+4+2+4=21< 2^7-1 =128-1=127
贝叶斯网的精简表示:
例如:我们在朴素贝叶斯中假设文章的特征由所有词来表示,所有词的都是独立的。所以我们根本不能精确地表示出来。
所有词表示文章 精简型
精简型中蓝筐中是所有词,N 表示词的个数。w 表示文章。
概率条件独立性
如果随机变量 A,B 独立则,P(A,B)=P(A)P(B) 或者 P(A|B)=P(A)
如果随机变量 A,B 关于C条件独立则,P(A,B|C)=P(A|C)P(B|C) 或者 P(A|B,C)=P(A|C)
以上公式可以扩展到多变量。
我们可以根据上边的公式去证明A,B是否独立。但是我们我可以用D-Separation 图,我们一眼就能看出来是否独立。
贝叶斯网中的条件独立性可以用Directed separation 精确表示。
D-separation
任意两组节点 A 和 B 关于另一个节点 C 条件独立,如果所有从 A中任一节点到 B 中任一节点的无向路径都被阻断。
某一路径是阻断的。
证明独立性:P(AB)=P(A)P(C)
证明条件独立性:P(A,B|C)=P(A|C)P(B|C)
情景一:A,B 总的来说相互依赖,但是A,B 关于C 条件独立。
一个可见点 C 是一个 tail-to-tail 节点,阻断了路径A-B,所以A,B 独立
图 a 图 b
证明:P(A,B,C)=P(C)P(A|C)P(B|C) (由图模型结果得,图 b)
P(A,B,C)=P(A,B|C)P(C) (条件概率公式)
P(A,B|C)=P(A|C)P(B|C) (结论A,B关于C条件独立)
如果 C 已知(如图 b)P(A,B|C)=P(A)P(B)
如果 C 已知,P(A,B,C)=P(C)P(A|C)P(B|C)==>P(A,B,C)=P(A,B)P(C)=P(C)P(A)P(B)
情景二:A,B 总的来说相互依赖,但是A,B 关于C 条件独立。
一个可见点 C 是一个 head-to-tail 节点,阻断了路径A-B,所以A,B 独立。
P(A,B,C)=P(A)P(C|A)P(B|C)=P(A,C)P(B|C)=P(C)P(A|C)P(B|C) 与情景一等价。
证明:P(A,B,C)=P(A)P(C|A)P(B|C) (由图模型结果得)
如果 C 已知(如图 b)P(AB|C)=P(A)P(B)
如果 C 已知(如图 b)P(A,B,C)=P(A)P(C|A)P(B|C)==>P(A,B,C)=P(A)P(C)P(B)==>P(A,B)=P(A)P(B) (A,B 关于条件独立)
其实情景一与情景二是等价的。
情景三:A,B 总的来说相互独立:如果C是一个可见点(已知)那么A,B 关于 C 条件依赖。
一个可见点 C 是一个 head-to-head 节点,打开了路径A-B
证明:P(A,B,C)=P(A)P(B)P(C|A,B) (由图模型结果得)
P(C|A,B)P(A,B)=P(A,B,C) (条件概率公式)
P(A,B)=P(A)P(B) (A,B 独立)
如果 C 已知(如图 b)P(A,B|C)=P(A)P(B)
练习1:给定 C 的条件下,A和B 不独立。
分析:给定 C ,那么 E 也已知部分信息(就上最开始的猜球游戏,一旦我们知道一个球的信息,那么就也知道部分信封的信息),那么A 与 F 之间的路径被打开,A 与 F 关于 E 条件依赖,F 与 B依赖,那么 A 与 B 不独立。
如果 C 未知,A B 独立,因为A,F关于E 是Head to Head 那么A与F 独立,所以路径被阶段。
练习2:给定 F 的条件下,A和B 独立。
分析:A 与 F 独立,没有路径从 A 到 B。
一般图模型是由我们根据自己知识画出来的。像特征一样,我们根据自己知识设置特征的个数与种类。但是也有高级方法自动学习图模型,自动学习特征。
概率无向图模型
概率无向图模型也叫马尔科夫随机场 MRF(Markov Random Fields)
无向图中的团:一个全连接的节点集。
最大团:团中数量最多的一些团。
最大团为蓝色框内的 { x2,x3,x4 },x1 不包括在内,因为x1和x4 之间的没有连线。
定义一个最大团 C 上的非负势函数,
φ(x1,x2,...xn)>0
这表示:自定义一个势函数:(x^2,e ^x 等)φc,自变量 Xc 是最大团中随机变量的一组随机变量如:x2,x3,x4,输出是大于0 的实数。
φc 在物理中叫能量函数。
势函数定义好以后就可以写出图模型的概率分布写出来。
P(X)=所有
最大团的势函数的连乘。1/Z 的作用是归一化。
Z 对于图模型(离散型)求和。
如果势函数不是定义在最大团上,那么在连乘时比较麻烦,找全所以的项。项也比较多。
Z 是分配函数(partition function)
下边我们看一个马尔科夫随机场简单的例子:
x1,x2 属于{-1,1} 单一团C,定义函数:
我们希望达到什么目标,都是通过势函数来反映。
由于x1,x2 属于{-1,1},所以一共有4中组合:{1,1},{-1,-1},{-1,1},{1,-1}
Z 是这四种参数的势函数之和。
我们可以看到符号相同的概率相同。
当a>0时,e^a>e^-a ,所以p(1,1)和P(-1,-1)的概率大于P(-1,1)和P(1,-1)。
- 当a>0,模型倾向x1,x2同类(概率大)
- 当a<0,模型倾向x1,x2异类(概率大)
我们看一下这样一个应用(图像的恢复,图像的去噪)。
原图 丢失数据图 无向图模型
我们将图片中每个像素定义为一个随机变量,这个随机变量可以取两个值(黄色,蓝色),所在模型中构成一层,组成网络。每个随机变量都对应另外一个随机变量。下边相连的节点表示真实图像中的像素点的取值。上边那一次是“丢失数据图”上像素点的取值(可观察去预测真实图像的像素值(未知,是空白))。
模型中有两种最大团,一种下边层中 x 与 x 的最大团,一种是上下层间的 x 与 y 之间的最大团。
概率最大时,就是能力函数值最小。
因为物理上,能量越小,越稳定。
:表示先验,就是图像80%是背景色。
:表示上下最大团。
:表示下边那层网的最大团。
我们找一组随机变量X,Y 是我们图模型的概率最大,那么这组随机变量的组合,就是我们要找的。
如果 β η 同为正数,那么我们希望相邻像素的颜色相同。真实像素的颜色(x)应该跟我们看到颜色(y)应该相同。
如果 β 很大: 在 丢失数据图 中要求相邻元素尽可能相似,过度去噪,可能造成上边那个蓝点消失,甚至使整个图片都是黄色。
如果 η 很大:在丢失数据图 中要求每个元素与生产的元素尽可能相似,那么可能造成生成的图片与 丢失数据图 一摸一摸样。
势函数决定了无向图能做什么!
马尔科夫随机场的条件独立性
如图:两组变量 A,B 关于 C 条件独立,假如除去C 中的节点及所有与其连接的边后,A,B 变成非联通状态。
在马尔科夫随机场中,如果任意个节点可达,都不独立。
概率潜在语义分析
Probabilistic Latent Semantic Analysis(PLSA)
概率有向图模型(贝叶斯网)
分析观察数据背后的潜在影响因素:
应用:
1:根据用户行为挖掘兴趣。一个用户多个兴趣,不同用户相同的兴趣。
2.一词多义和一义多词。
假设一个电商要预测用户兴趣,给用户推荐更合适的商品。如果用概率模型做,这是个回归问题。需要回归用户对每件商品的概率。
图a 图b
图a 计算量:亿级别 * 亿级别
图b,将用户聚类(K个)。计算量:K * 亿级别
图b 是将用户硬分类。如果我们要将用户软聚类。
图c
图 c
z 就是用户兴趣组。
计算量:2 * k * 亿级别 (如果 k 比用户和商品数小的很多的话,性能提升不少)
图 c 就是 PLSA 的原理。
PLSA 最早出现在搜索领域,在PLSA出现之前,只能与关键词匹配才能搜索到信息。不能根据语义搜索。
PLSA的实现
所需的数据结构:
- 词表 W={w1,w2...wm}
- 文档集 D={d1,d2...dn}
- 词文档矩阵 N,,表示wj 在di 中出现次数。
PLSA 模型
假设一个Topic集合:Z={z1,z2,...,zk}
N 中每一个词都对应一个 z 值。
所以图模型为
黄球是:word ( m 个)
篮球是:topic ( k 个)
红球是:document ( n 个)
共需存储 n*k + k*m + n
n:p(d)
n*k:p(z|d)
m*k:p(w|z)
PLSA 图模型表示:
这两图模型是等价的。d,w 关于 z 条件独立。
参数估计:
在训练开始前,我们知道 d 和 w 但是我们知道 z 的信息,根据已知信息推出隐藏变量信息我们用EM算法(在不完全数据上估计)。
E-step 求隐藏变量的后验概率。(正是所缺少的 z 信息 )P(z|d,w) 已知d 和 w ,z 的概率。
M-step 有了P(z|d,w) 最大似然来更新 (解析解)
n(d,w):词频
注意:M-step:之所以我们要将p(d|z),p(w|z),p(z) 转化为正比于 p(z|d,w) ,是因为E-Step 求出了后验概率。
p(z|d,w)推导:
优化:在每次迭代 E 中,我们需要p(z),p(d|z),p(w|z) 三个数相乘,其实我们可以通过公式变形,减少变量的统计,及计算。
这样只有p(z|w)p(d|z) 两个概率相乘。
注意:在开始时,我们还没有p(z|d,w)的数据,我们为每个文章,每个词随机生成一个概率值。
由于EM 算法循环,我们也可以随机出来p(z|w) 和 p(d|z) 这两个值。当然根据公式不同,我们也可以随机p(d|z) 和 p(w|z),然后根据p(d|z) 和 p(w|z)计算出p(z)。
最大似然:由于文章时独立同分布。P(D)=∏ p(d) 等号两边取对数。
log(P(D))=∑log(p(d))
E-Step
这一步就是根据公式计算后验概率(在没有看到文章时 z 是先验概率,在看到文档和词时,z 的概率是后验概率)。
M-Step
如图:橘黄色的圆圈是词,是可见的。蓝色的圆圈是Topic,是不可见的。
计算p(d|z):横向 sum [z1,z2...,zk]=n(d,z)
计算p(d|z):纵向 sum [z1,z2...,zk]=n(w,z) 假设每列都是同一个Word。
计算p(z):sum(n(d,z),n(w,z))=n(z)=[z1,z2...zk]
p(d,zi)∝n(d,zi)
p(d|zi)=n(d,zi)/n(zi)
p(w|zi)=n(w,zi)/n(zi)
p(zi)=n(zi)/sum(n(z))
p(z|d,w) 是在每篇文章中对每个词Z1,Z2...Zk 分别统计,然后归一化(注意乘以词频)。
一义多词:
这相当于对词进行聚类。
最后我们能得到 P(w|z) ,我们可以根据 z 中概率最大的词作为标头。
一词多义:p(z|d,w) 得出。
PLSA 总结:
PLAS 是无监督。
我们可用PLSA做文章和词聚类(根据Topic)。
当然我们也可以用PLSA做分类。
来了一篇新文章来“预测”(这里预测是计算出新文章的所属Topic 的概率分布,这和分类还是有一定区别的,因为Topic并不是我事先指定的。甚至我们不知道他们的含义),由于我们没有新文章的p(d|z) 所以没有办法预测,这正是PLSA泛化能力不足之处。但是我们可以P(w|z)来模拟.p(d|z) 所以没有办法预测,这正是PLSA泛化能力不足之处。但是我们可以P(w|z)来模拟p(d|z)
p(d|z)模拟:
topic1 | topic2 | ... | tk | |
word1 | ... | |||
word2 | ... | |||
... | ... | |||
word m | ... |
我们根据文章中词,在上边的词词表所有的Topic 相加,然后归一化。然后根据公式
,
计算p(z|d).
如果训练数据足够大,这样的方法还是比较靠谱的。
PLSA 可以解决有标注数据的稀疏问题(标注数据很少)。
假设我们有1000篇标注文章数据,有100万篇未标注的数据。
我们先用100万未标注的数据用PLSA得到词的 topic ,将1000篇标注文章套那些 topic ,计算出来这1000篇文章的 topic ,作为特征向量,进行模型的训练。这样比直接用词作为特征向量来训练模型好的多。
PLSA 的不足:
- 参数数量随着文档集大小线性增长。
- 泛化能力不足(解决方案:加入对文章的先验分布,参数化p(z|d),也就是LDA)
LDA (Latent Dirichlet Allocation) 潜在狄利克雷分配:
基本思想:
如图:PLSA 就是图中黑点是每篇文章都对应一个P(d|z),是离散的,对于新文章就没有p(d|z)。为了解决这个问题,我们想拟合一个分布(如图中线),这样就将离散的文章变成连续的值。来了新文章,我们可以找到对应的p(d|z)。
LDA 用的是Dirichlet 分布。
在解释Dirichlet 分布,我们先看一下Bate分布。Bate 分布一元概率分布,Dirichlet 分布是将Bate分布扩展到多元。
这几条线就像,几家造币厂。有些造币厂造的币比较均匀了,像那根绿线,大部分硬币上抛正反面的概率都是0.5。粉红那条线表示的造币厂质量稍微有偏差,80%都是正面,20%是背面。这些表示概率分布。
Dirichlet 分布:
三个角表示三个Topic。
图 a,文档集中文章大部分都在讨论第 3 个话题。
图 b,文档集中文章大部分都在讨论第1,2个话题。
图 c,文档集中文章讨论 3 个 比较均匀。
图 d,文档集中文章大部分都在讨论第1,3个话题。
θ:是 topic θ∈(0,1) 是概率。
LDA 过程:建模文档生成过程
1.确定文章词的个数(n)
2.θ=[],θ=dir(α) ,由 参数为 α 的Dirichlet 分布生成一个θ (就像在参数 α 的分布下抛了一个硬币,注意每次可能都一不一样,并且此处的 θ 是多元的Topic分布。之前PLSA文章的Topic是唯一确定,这里是由另一个分布产生的)。
3. for i in range(n): 每次循环生成一个词。本篇文章在同一个参数 θ 的Dirichlet 分布下产生。
topic=Multinomial(q) 由 θ 的多项分布生成一个 topic. 这是一个具体的topic
word=Multinomial(topic) 相当于在topic 下所有词中又抛出一个词。
有这个过程我们可以画出LDA的图模型了。
由于只有 w 是已知的,所以我们用全概率公式将θ 积分积掉。z 用求和去掉。
P(D|α,β) 是整个文档集的似然。
β 就是word and topic的矩阵。
topic1 | topic2 | ... | tk | |
word1 | ... | |||
word2 | ... | |||
... | ... | |||
word m | ... |
θ:就是文章所属 topic 的分布。θ 从分布而来。z:词所属的 topic(一个Topic) 。θ,z 是隐藏变量(θ,α 是 k 维的实数向量),
N 是一篇文章中词个数(特征数)。
M 是文档集中文档数。
P(w|α,β) :全概率公式。θ 是连续,求积分。对z 求和。
图模型可以做推理
p(θ,z|w,α,β):已知w 和α,β 来计算文章所有的Topic,即词所属的topic。
根据条件概率公式我们知道上边的公式。p(θ,z,w|α,β) 蛮好求的。
P(w|α,β) 很难计算
P(w|α,β) 是无法计算的。没有办法用EM算法,E 步骤后验概率 p(θ,z|α,β,w) 计算不了。
可以用变分法和Gibbs 采样法。
Smoothed LDA
LDA 中,如果遇到没有训练集中没有遇到过的词,当然可以很暴力的丢弃掉。也可以像LDA解决PLSA的泛化能力问题一样,让词也从分布而来。
每个topic 在词集上分布 βi 也是随机变量,服从参数为 ηi 的Dirichlet分布。
图模型:
k: 是topic 个数(相当于服从参数为 ηi 的Dirichlet分布,k个筛子同时抛)
N:表示一篇文章中的词个数
M:文档个数
Gibbs 采样法
模型:smoothed 的LDA
参数估计:1.对每个词所对应的 topic 进行采样。
2.根据整个文档集采样的结果估计参数。
φj:第 j 个topic w(词 的概率
θj:第 j 个topic 文章 的概率
在PLSA中 P(z|d),P(z|w),P(z)是通过行统计和列统计出来的。Gbbis 采样的是通过抛硬币得出来的。硬币不是随便抛的。先计W5 的[z1,z2...zk],根据概率大小抛硬币,抛出哪个就哪个。
在这样一个区间上抛硬币,z的区间越大,被抛中的概率越大。
这里蓝色球时某一个Topic,不是列表(topic,[z1,z2...zk])。对所有蓝色节点都采完样后,我们就可以最大似然进行计算。
上边介绍的方法其中要计算出w5 [z1,z2...zk]。
1.在全表(除 w5 )找到出现的w5的词 A。如果一列是同一个词,就是一列上统计。
2.统计A中zi 的个数 len(zi),len(zi)/len(A) 与图左边的公式(加了平滑)一致。这样就计算出W5 [z1,z2...zk]
我们要找d1[z1,z2,...zk]
1.在一行中出w5 词外,其他的词A
2.统计A中zi 的个数 len(zi),len(zi)/len(A) 与图左边的公式(加了平滑)一致。这样就计算出d1 [z1,z2...zk]
将w5[z1,z2,...zk] 和d1[z1,z2,...zk] 相乘,然后归一化就得到 z 的后验概率分布。
然后循环上1000轮后,就可以用W5 [z1,z2...zk]和d1 [z1,z2...zk]作为最后结果了。
评价和应用:
perplesity(混乱度)
由于我们优化时是最大似然优化的,所以用最大似然来评价当然是最好的,似然值越大越好。
但是log似然的值太小,写报告不好看,所以用了尺度变换,是最后的数字比较好看。
训练完毕后我们得到 p(z|d) 和 p(z|w) 。
p(z|d):文档分类,聚类,检索
p(z|w):词分类,词聚类
我们可以直接用p(z|d) 直接作为文章的特征向量。之前所有对文章的机器学习方法都可以用了。
下边我们看一下使用文档的topic 分布作为特征和用词作为词效果比较。
文本分类:
有图看到:训练数据比较少时,LDA Features 效果还是比较好。随着训练数据增大两者差不多,最后甚至word Features 可能会更好。因为LDA 假设先验分布(Dirichlet分布),真实数据可能不是Dirichlet分布,而是长尾分布。
协同过滤
训练:利用用户对电影的喜好数据建模
预测:基于用户的部分数据Wobs预测其对新电影 W 的喜好程度。