EM 介绍

期望极大值(Expectation Maximization,EM)算法是一种能够得到极大似然参数估计的迭代方法。

  • 可适用于包含隐变量的统计模型
    • 隐变量:属性值未知的变量。

XX 表示已观测变量集,ZZ 表示隐变量集,θ\theta 表示模型参数,如果想对 θ\theta 作极大似然估计,则最大化对数似然应为:

LL(θX,Z)=lnP(X,Zθ)LL(\theta|X,Z)=\ln P(X,Z|\theta)

由于 ZZ 是隐变量,故无法直接求解。可以通过对 ZZ 计算期望,来最大化已观测数据的对数“边际似然”:

LL(θX)=lnP(Xθ)=lnZP(X,Zθ)(1)LL(\theta|X)=\ln P(X|\theta)=\ln\sum_ZP(X,Z|\theta)\tag{1}

EM 算法的基本思想:

  • E-step:若参数 θ\theta 已知,则根据训练数据推断除最优隐变量 ZZ 的值。
  • M-step:若隐变量 ZZ 的值已知,则对参数 θ\theta 作极大似然估。

若计算 ZZ 的期望,以 θ0\theta^0 为起点,对式1迭代以下步骤直至收敛:

  • E-step:基于 θt\theta^t 推断隐变量 ZZ 的期望,记作 ZtZ^t
  • M-step:基于已观测变量 XXZtZ^t 对参数 θ\theta 作极大似然估计,记作 θt+1\theta^{t+1}

若基于 θt\theta^t 计算隐变量 ZZ 的概率分布 P(ZX,θt)P(Z|X,\theta^t),则 EM 的步骤变成:

  • E-step:基于 θt\theta^t 推断隐变量分布 P(ZX,θt)P(Z|X,\theta^t),并计算对数似然 LL(θX,z)LL(\theta|X,z) 关于 ZZ 的期望:

Q(θθt)=EZX,θtLL(θX,Z)Q(\theta|\theta^t)=E_{Z|X,\theta^t}LL(\theta|X,Z)

  • M-step:寻找参数最大化期望似然:

θi+1=argmaxθQ(θθt)\theta^{i+1}=\arg\max_\theta Q(\theta|\theta^t)

基于OpenCV实现EM

EM 是一种无监督的机器学习方法,它还可以用于聚类处理上。

OpenCV 提供了 EM 类,可用于实现 EM 算法对高斯混合模型的参数估计:

  • 高斯混合模型可以看作是由 K 个单高斯模型组合而成的模型,这 K 个子模型是混合模型的隐变量。
1
2
3
4
5
6
7
8
// 创建 EM
cv::Ptr<cv::ml::EM> model=cv::ml::EM::create();

// 设置聚类数
model->setClustersNumber(classes);

// 训练函数,结果反映在 labels参数
bool trainEM(InputArray samples,OutputArray logLikelihoods=noArray(),OutputArray labels=noArray(),OutputArray probs=noArray()) ;

使用 EM 算法进行像素聚类进而实现图像分割。

  • 将 RGB 属性作为样本,进行聚类。即每一个像素都是一个样本。

效果如下:

EM算法聚类效果

代码地址:EM 算法 - Gitee