下面这种分布,它并不属于任何一种标准分布:
它看起来像多个高斯模型,能用多个高斯模型来表达这个分布呢?这样做有一个问题就是,我们不知道哪个数据属于第一个高斯模型,哪个数据属于第二个高斯模型。
这个问题可以从产生数据的角度思考,假设现在有这样K个高斯分布:
现在要根据这K个高斯分布产生数据:
- 依照概率随机选择一个高斯分布
- 依照这个高斯分布随机产生数据
重复这个操作N次,于是产生了数据.
用数学公式描述上述的事情:
其中为隐变量,代表第个数据选择了第个模型.
这种逆向的思想非常重要,我们直觉上习惯根据数据去区分是属于哪个分布的,但是这很难做到.先假设模型存在,然后根据这些模型产生的效果去确定模型的参数,这就是极大似然法的思想.
因为:
所以有:
这个模型称为高斯混合模型. 其中
使用EM算法对高斯混合模型进行参数估计
高斯混合模型的对数似然函数:
这个似然函数很复杂,无法直接求得其极值,事实证明使用梯度下降来求解模型参数的效果也并不好.对于高斯混合模型通常使用EM算法求解.
对于EM算法,E步计算函数:
M步极大化Q函数求得模型参数.
首先计算完全数据的似然函数:
其中,
完全数据的对数似然函数为:
EM算法的E步:确定Q函数
这里对E展开的时候将替换为,因为整个式子展开相当于个的连加,所以可以这样替换,但是若展开后不是连加式则不能这样替换.
这里需要计算,记为
是在当前模型参数下第j个观测数据来自第k个分模型的概率,称为分模线k对观测数据的响应度.
将及带入得:
EM算法的M步
M步需要极大化Q函数求出:
分别对求偏导,即可求得:
编程实现:
https://www.kaggle.com/swimmingwhale/gaussian-mixture-model
参考:
李航<统计学习方法>