K 类个数, M term个数, N doc个数。
qmk是term m在类k中出现的概率。
16.14式的左边含义就是在模型未知参数theta的情况下, 类k中包含文档d的概率
右边就是d内的所有term出现在类k中的概率连乘积, 与d内未出现的term的补(1-q)的连乘积
和16.14式不同的是, 无wk了。
那么16.15左式的含义就是, 在该模型未知参数下, 文档d出现在该模型下的概率。
Alpha k是每个类的先验概率。
上式右边就是文档d出现在类k的概率, 然后加权求和
最大化步, 重新评估模型参数qmk, alpha k
r(nk) 是文档dn 率属于 类k的概率
I(tm, dn), 如果term m在文档dn中出现则为1, 否则为0.
那么这里的qmk, 即term m在类k中出现的概率, 实际上就是个加权值(加权的DF)。 分母是类k中所有文档的概率之和, 分子是类k中包含了term m的文档的概率之和。
alpha k是先验概率, 表示类k的大小。 那么就是 所有文档率属于类k的概率之和除以文档总数
期望步, 计算rnk的极大似然值
分子是文档dn在类k中的概率乘以类k的先验概率。 (式16.14)
分母是文档dn在所有类中的概率乘以对应类的先验概率 得到的和。(式16.15)
因此, 文档dn出现在类k中的概率理所当然就是两者之商。
EM算法对initial seeds的要求更严格。 一般使用k-means算法得到k个centroid,从而得到先验概率alpha k以及 qmk。
EM算法是generalized k-means。
K-means是硬的分类方法, 每个doc只能属于一个类; EM是软的分类方法, 每个doc在不同的类中都有一定的概率
具体算法见 weak, em http://blog.csdn.net/aalbertini/archive/2010/08/11/5804318.aspx
已知k个质心、以及每类中的样本数以及具体样本, 因此可以得到:
m_priors, k个先验概率, 表示每个类的先验大小
m_num_clusters, 类个数k。 一般是输入。
m_model[K][M], 每个类中每个属性的概率, 就是上式中qmk的转置形式
m_weights[N][K], 每个文档在每个类中的概率, 就是16.14/16.15得到的矩阵。 初始值应该为硬分类的结果, 即其中每行只有1个1, 其他都为0。 就是上式中的rnk
根据 m_priors, m_weights 重新计算m_model
根据 m_priors, m_model 重新计算 m_weights。 当达到退出条件时结束