返回

从似然函数到 EM 算法:深入理解和代码实现

人工智能

引言

在机器学习和统计建模领域,似然函数和 EM 算法扮演着至关重要的角色。似然函数量化了给定观测值下参数的可能性,而 EM 算法则是一种强大的迭代算法,用于寻找参数的最大似然估计。本文将深入探讨似然函数和 EM 算法的概念,并提供详细的代码实现。

似然函数

似然函数衡量了在给定观测数据的情况下,模型参数的可能性。它表示为:

L(θ | x) = P(x | θ)

其中:

  • L(θ | x) 是参数 θ 的似然函数
  • P(x | θ) 是在参数 θ 下观测到数据 x 的概率

似然函数的值越高,表明参数 θ 越有可能是数据的生成源。

EM 算法

EM 算法(期望最大化算法)是一种迭代算法,用于寻找参数的最大似然估计。它适用于包含无法观测的隐性变量的概率模型。

EM 算法包括两个交替步骤:

  1. E 步(期望步骤): 计算在当前参数估计值下隐性变量的后验概率的期望。
  2. M 步(最大化步骤): 最大化似然函数,将隐性变量的期望值作为给定值。

通过交替进行 E 步和 M 步,EM 算法可以逐渐收敛到参数的最大似然估计值。

代码实现

以下 Python 代码提供了 EM 算法的简化实现,用于估计高斯混合模型(GMM)的参数:

import numpy as np
import scipy.stats as stats

class GMM:
    def __init__(self, k):
        self.k = k
        self.means = np.random.randn(k, 2)
        self.covs = np.array([np.eye(2)] * k)
        self.weights = np.ones(k) / k

    def e_step(self, x):
        # 计算后验概率
        p_x_given_z = np.zeros((x.shape[0], self.k))
        for i in range(self.k):
            p_x_given_z[:, i] = stats.multivariate_normal.pdf(x, mean=self.means[i], cov=self.covs[i])
        
        p_z_given_x = p_x_given_z * self.weights / np.sum(p_x_given_z * self.weights, axis=1)[:, np.newaxis]
        return p_z_given_x

    def m_step(self, x, p_z_given_x):
        # 更新参数
        self.weights = np.mean(p_z_given_x, axis=0)
        for i in range(self.k):
            self.means[i] = np.average(x, weights=p_z_given_x[:, i])
            self.covs[i] = np.cov(x, rowvar=False, aweights=p_z_given_x[:, i])

    def fit(self, x, max_iter=100):
        for _ in range(max_iter):
            p_z_given_x = self.e_step(x)
            self.m_step(x, p_z_given_x)

    def predict(self, x):
        # 计算后验概率
        p_x_given_z = np.zeros((x.shape[0], self.k))
        for i in range(self.k):
            p_x_given_z[:, i] = stats.multivariate_normal.pdf(x, mean=self.means[i], cov=self.covs[i])
        
        p_z_given_x = p_x_given_z * self.weights / np.sum(p_x_given_z * self.weights, axis=1)[:, np.newaxis]
        return np.argmax(p_z_given_x, axis=1)

应用

EM 算法广泛应用于各种机器学习和统计建模任务,包括:

  • 聚类分析
  • 混合模型估计
  • 隐马尔可夫模型(HMM)
  • 自然语言处理

结论

似然函数和 EM 算法是概率建模和机器学习的基础工具。似然函数提供了量化参数可能性的方法,而 EM 算法则提供了一种有效的迭代方法来寻找参数的最大似然估计值。通过深入理解这些概念和实施代码实现,数据科学家和机器学习从业者可以有效地解决各种现实世界问题。