最大期望算法(Expectation Maximization)

7. EM - 图1

最大似然(Maximum Likelihood morning)

  • 最大可能性

EM 算法是一种求解最大似然估计的方法,通过观测样本,来找出样本的模型参数。

最大期望法理解案例

假设我们有 A 和 B 两枚硬币,我们做了 5 组实验,每组实验投掷 10 次,然后统计出现正面的次数,实验结果如下:

试验 正面次数
1 5
2 7
3 8
4 9
5 4

投掷硬币这个过程中存在隐含的数据,即我们事先并不知道每次投掷的硬币是 A 还是 B。
而实际情况是我不知道每次投掷的硬币是 A 还是 B,那么如何求得硬币 A 和硬币 B 出现正面的概率呢?

1. 初始化参数。

我们假设硬币 A 和 B 的正面概率(随机指定)是θA=0.5 和θB=0.9。

2. 计算期望值。

假设实验 1 投掷的是硬币 A,那么正面次数为 5 的概率为:

7. EM - 图2

  • 7. EM - 图3代表的是 10 个里面取 5 个的组合方式,也就是排列组合公式,
  • 0.5 ^5 次方乘以 0.5 的 5 次方代表的是其中一次为 5 次为正面,5 次为反面的概率
  • 然后再乘以 C(10,5) 等于正面次数为 5 的概率。

假设实验 1 是投掷的硬币 B ,那么正面次数为 5 的概率为:

7. EM - 图4

所以实验 1 更有可能投掷的是硬币 A。

然后我们对实验 2~5 重复上面的计算过程,可以推理出来硬币顺序应该是{A,A,B,B,A}。

这个过程实际上是通过假设的参数来估计未知参数,即“每次投掷是哪枚硬币”。

3. 通过猜测的结果{A, A, B, B, A}来完善初始化的参数θA 和θB。

然后一直重复第二步和第三步,直到参数不再发生变化。

简单总结下上面的步骤,你能看出 EM 算法中的 E 步骤就是通过旧的参数来计算隐藏变量。然后在 M 步骤中,通过得到的隐藏变量的结果来重新估计参数。直到参数不再发生变化,得到我们想要的结果。

EM聚类和K-Means聚类的区别

EM 算法最直接的应用就是求参数估计。
如果我们把潜在类别当做隐藏变量,样本看做观察值,就可以把聚类问题转化为参数估计问题。
相比于 K-Means 算法,EM 聚类更加灵活。

  • K-Means
    通过距离来区分样本之间的差别的,且每个样本在计算的时候只能属于一个分类,称之为是硬聚类算法。
  • EM 聚类
    在求解的过程中,实际上每个样本都有一定的概率和每个聚类相关,叫做软聚类算法。

EM分类

你可以把 EM 算法理解成为是一个框架,在这个框架中可以采用不同的模型来用 EM 进行求解。
常用的 EM 聚类有 GMM 高斯混合模型和 HMM 隐马尔科夫模型。

  • GMM(高斯混合模型)聚类就是 EM 聚类的一种。

sklearn实现

  1. from sklearn.mixture import GaussianMixture
  2. gmm = GaussianMixture(n_components=1, covariance_type=‘full’, max_iter=100)

1.n_components:即高斯混合模型的个数,也就是我们要聚类的个数,默认值为 1。如果你不指定 n_components,最终的聚类结果都会为同一个值。

2.covariance_type:代表协方差类型。一个高斯混合模型的分布是由均值向量和协方差矩阵决定的,所以协方差的类型也代表了不同的高斯混合模型的特征。协方差类型有 4 种取值:

  • covariance_type=full,代表完全协方差,也就是元素都不为 0;
  • covariance_type=tied,代表相同的完全协方差;
  • covariance_type=diag,代表对角协方差,也就是对角不为 0,其余为 0;
  • covariance_type=spherical,代表球面协方差,非对角为 0,对角完全相同,呈现球面的特性。

3.max_iter:代表最大迭代次数,EM 算法是由 E 步和 M 步迭代求得最终的模型参数,这里可以指定最大迭代次数,默认值为 100。