不完全数据的最优解法,EM 算法算是蛮经典的一招了。期望最大化(Expectation-Maximization)听起来挺高深,其实本质就是一套“猜一猜、算一算,再猜一猜”的循环套路,适合你遇到缺失值、不完整样本的时候用,像在聚类隐马尔可夫模型这类场景,效果还挺不错。

1977 年,Dempster、Laird 和 Rubin 提出来之后,学术圈对它的研究热情就没断过,各种变种和改进方法一茬接一茬。用得最多的地方?机器学习模式识别数据挖掘这几个领域跑不了,是你搞算法方向的,这玩意迟早得用上。

算法逻辑其实也不复杂,两个主要步骤:E 步先根据当前参数估计隐藏变量;M 步再根据这些估计值去优化参数。一直循环,直到结果收敛——嗯,就是这么个意思。代码实现也不算难,Python 或 R 都能比较容易搞定,关键是得理解背后的统计逻辑。

要注意哦,EM 算法对初始值挺敏感的,容易掉进局部最优,所以你得多跑几组初始参数来对比。还有就是,有时候它收敛慢,不如你加点提前终止条件、或者换成改进算法像变分 EM、广义 EM 之类的。

如果你想多看看相关内容,可以顺着这几个文章继续挖:

如果你刚开始接触EM 算法,建议先手撸一遍高斯混合模型(GMM),这样思路会更清晰。想进一步深入,去看看最大似然估计和隐变量模型,也挺有。