侥幸的是,我最近也一直在苦恼这个材料。以下是我对它的理解:
考虑一个相关但不同的算法,称为classify-maximize算法,我们可以将其用作混合模型问题的解决技术。混合模型问题是指我们有一系列可能由N个不同过程中的任意一个产生的数据,我们知道这些过程的一般形式(例如高斯),但我们不知道过程的参数(例如均值和/或方差),甚至可能不知道各个过程的相对可能性。 (通常,我们至少知道过程的数量。如果没有这个,我们就进入了所谓的“非参数”领域。)从某种意义上说,生成每个数据的过程是该问题的“缺失”或“隐藏”数据。
现在,这个相关的classify-maximize算法所做的是从一些任意的过程参数猜测开始。每个数据点根据每个参数过程进行评估,并生成一组概率-数据点由第一个过程、第二个过程等等生成的概率,一直到最后一个第N个过程。然后,每个数据点根据最可能的过程进行分类。
此时,我们已经将数据分成了N个不同的类别。因此,对于每个数据类别,我们可以使用相对简单的微积分技术来优化该聚类的参数,使用最大似然技术进行优化。(如果我们在分类之前尝试对整个数据集这样做,通常会遇到解析上不可行的问题。)
然后我们更新我们的参数猜测值,重新分类,更新参数,重新分类等等,直到收敛。
期望最大化算法所做的是类似的,但更加通用:现在,我们使用软分类,其中每个数据点属于每个过程的概率都有一些可能性。(显然,每个点的概率需要总和为1,因此存在一些归一化处理。)我认为我们也可以认为每个过程/猜测对每个数据点具有一定的“解释力”。
因此,现在我们不是针对绝对属于每个类别的点(忽略绝对不属于某些点)优化猜测,而是在这些软分类或解释力的背景下重新优化猜测。如果您以正确的方式编写表达式,则您正在最大化其形式为期望值的函数。
话虽如此,还有一些注意事项:
1) 这听起来很容易,但对我来说并非如此。文献中充斥着各种特殊技巧和技术 - 使用似然表达式而不是概率表达式,转换为对数似然,使用指示变量,将它们放在基向量形式和将它们放在指数中等等。
这些技巧对于你已经掌握了一般思路可能更有帮助,但它们也可能使核心思想变得复杂难懂。
2) 无论问题的约束条件是什么,都可能很难纳入到框架中。尤其是,如果你知道每个过程的概率,则你可能做得很好。如果不知道,则需要估计这些概率,并且各个过程的概率之和必须为一;它们必须存在于一个概率单纯形上。如何保持这些约束不变并不总是明显的。
3) 这是一种非常通用的技术,我不知道如何编写通用代码。应用远远超出简单的聚类,并扩展到许多实际缺失数据的情况下,或者缺失数据的假设可能对你有所帮助。对于许多应用来说,这里有一种恶魔般的独创性。
4) 这种技术被证明能收敛,但并不一定是全局最优;需谨慎。
我发现以下链接对于上述解释很有帮助:统计学习幻灯片
而以下的文章详细介绍了一些痛苦的数学细节:迈克尔·科林斯的论文