当前位置: 首页 > news >正文

以EM算法为例介绍坐标上升(Coordinate Ascent)算法:中英双语

中文版

什么是 Coordinate Ascent 算法?

Coordinate Ascent(坐标上升)是一种优化算法,它通过在每次迭代时优化一个变量(或一个坐标),并保持其他变量不变,逐步逼近最优解。与坐标下降(Coordinate Descent)算法相对,坐标上升通常用于求解带有多个变量的优化问题,特别是在优化函数在每个维度上都是可分的情况下。

在每次迭代中,Coordinate Ascent算法通过选择一个变量来最大化该变量对目标函数的贡献,然后再选择下一个变量进行优化。它通过反复更新每个坐标来寻找最优解。虽然这个过程可能不会全局收敛,但它在很多实际问题中表现得很好,特别是在目标函数较为简单且每个坐标可以独立优化时。

以EM算法为例介绍Coordinate Ascent

EM(Expectation-Maximization)算法是一种常见的优化算法,常用于统计学和机器学习中,尤其是当数据中有隐变量时。EM算法的基本思路是通过迭代求解期望步骤(E步)和最大化步骤(M步)来优化参数。

我们可以将EM算法视为一种坐标上升方法。每一轮的E步和M步都可以视为分别优化不同的“坐标”,其中E步优化期望函数,M步最大化该期望函数。

EM算法中的坐标上升

假设我们有一个隐变量模型,其目标是最大化对数似然函数:
L ( θ ) = log ⁡ P ( X , Z ∣ θ ) \mathcal{L}(\theta) = \log P(X, Z | \theta) L(θ)=logP(X,Zθ)
其中:

  • ( X X X ) 是观察数据,
  • ( Z Z Z ) 是隐变量,
  • ( θ \theta θ ) 是模型的参数。

由于隐变量 ( Z Z Z ) 是不可观测的,直接求解对数似然函数是困难的。因此,EM算法通过迭代的方法来解决这个问题。

  1. E步(Expectation step)
    在E步中,我们计算隐变量的期望值,即给定当前参数估计 ( θ ( t ) \theta^{(t)} θ(t) ) 下,隐变量 ( Z Z Z ) 的条件概率分布:
    Q ( θ , θ ( t ) ) = E Z ∣ X , θ ( t ) [ log ⁡ P ( X , Z ∣ θ ) ] Q(\theta, \theta^{(t)}) = \mathbb{E}_{Z | X, \theta^{(t)}} \left[ \log P(X, Z | \theta) \right] Q(θ,θ(t))=EZX,θ(t)[logP(X,Zθ)]
    这是一个坐标上升的过程,因为我们通过固定当前的参数 ( θ ( t ) \theta^{(t)} θ(t) ) 来最大化隐变量的期望。

  2. M步(Maximization step)
    在M步中,我们最大化E步得到的期望函数 ( Q ( θ , θ ( t ) ) Q(\theta, \theta^{(t)}) Q(θ,θ(t)) ) 来更新参数 ( θ \theta θ ):
    θ ( t + 1 ) = arg ⁡ max ⁡ θ Q ( θ , θ ( t ) ) \theta^{(t+1)} = \arg\max_\theta Q(\theta, \theta^{(t)}) θ(t+1)=argθmaxQ(θ,θ(t))
    这也可以视为一次坐标上升,因为我们固定隐变量的期望并优化参数 ( θ \theta θ )。

在EM算法中,E步和M步交替进行,每一轮都像是在“沿着不同的坐标轴上升”,通过迭代更新参数和隐变量的估计值。

数学公式

假设我们有如下的对数似然函数:
L ( θ ) = log ⁡ P ( X ∣ θ ) = log ⁡ ∑ Z P ( X , Z ∣ θ ) \mathcal{L}(\theta) = \log P(X | \theta) = \log \sum_{Z} P(X, Z | \theta) L(θ)=logP(Xθ)=logZP(X,Zθ)

由于隐变量 ( Z ) 无法直接观测,我们在E步中计算隐变量的条件期望:
Q ( θ , θ ( t ) ) = E Z ∣ X , θ ( t ) [ log ⁡ P ( X , Z ∣ θ ) ] Q(\theta, \theta^{(t)}) = \mathbb{E}_{Z | X, \theta^{(t)}} \left[ \log P(X, Z | \theta) \right] Q(θ,θ(t))=EZX,θ(t)[logP(X,Zθ)]

然后在M步中最大化这个期望:
θ ( t + 1 ) = arg ⁡ max ⁡ θ Q ( θ , θ ( t ) ) \theta^{(t+1)} = \arg\max_\theta Q(\theta, \theta^{(t)}) θ(t+1)=argθmaxQ(θ,θ(t))

这两个步骤交替进行,直到收敛为止。

例子:高斯混合模型(Gaussian Mixture Model, GMM)

高斯混合模型是一种常见的隐变量模型,它假设数据是由多个高斯分布组成的,每个数据点属于某个高斯分布,但我们不知道每个数据点具体属于哪个分布。EM算法可以用来估计模型参数。

假设数据 ( X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={x1,x2,,xn} ) 来自两个高斯分布,每个高斯分布的参数为 ( ( μ 1 , σ 1 2 ) (\mu_1, \sigma_1^2) (μ1,σ12) ) 和 ( ( μ 2 , σ 2 2 ) (\mu_2, \sigma_2^2) (μ2,σ22) )。我们要估计这些参数。

E步:计算每个数据点属于每个高斯分布的概率(即隐变量的期望):

给定当前参数 ( ( μ 1 ( t ) , σ 1 2 ( t ) , μ 2 ( t ) , σ 2 2 ( t ) ) (\mu_1^{(t)}, \sigma_1^{2(t)}, \mu_2^{(t)}, \sigma_2^{2(t)}) (μ1(t),σ12(t),μ2(t),σ22(t)) ),我们计算每个数据点 ( x i x_i xi ) 属于第一个高斯分布的概率(称为责任):
γ i 1 = π 1 N ( x i ∣ μ 1 ( t ) , σ 1 2 ( t ) ) π 1 N ( x i ∣ μ 1 ( t ) , σ 1 2 ( t ) ) + π 2 N ( x i ∣ μ 2 ( t ) , σ 2 2 ( t ) ) \gamma_{i1} = \frac{\pi_1 \mathcal{N}(x_i | \mu_1^{(t)}, \sigma_1^{2(t)})}{\pi_1 \mathcal{N}(x_i | \mu_1^{(t)}, \sigma_1^{2(t)}) + \pi_2 \mathcal{N}(x_i | \mu_2^{(t)}, \sigma_2^{2(t)})} γi1=π1N(xiμ1(t),σ12(t))+π2N(xiμ2(t),σ22(t))π1N(xiμ1(t),σ12(t))
其中, ( π 1 \pi_1 π1 ) 和 ( π 2 \pi_2 π2 ) 是高斯分布的混合系数, ( N ( x i ∣ μ , σ 2 ) \mathcal{N}(x_i | \mu, \sigma^2) N(xiμ,σ2) ) 是高斯分布的概率密度函数。

M步:最大化E步得到的期望函数以更新参数:

根据责任 ( γ i 1 \gamma_{i1} γi1 ) 和 ( γ i 2 \gamma_{i2} γi2 ),我们更新高斯分布的均值和方差:
μ 1 ( t + 1 ) = ∑ i = 1 n γ i 1 x i ∑ i = 1 n γ i 1 \mu_1^{(t+1)} = \frac{\sum_{i=1}^{n} \gamma_{i1} x_i}{\sum_{i=1}^{n} \gamma_{i1}} μ1(t+1)=i=1nγi1i=1nγi1xi
σ 1 2 ( t + 1 ) = ∑ i = 1 n γ i 1 ( x i − μ 1 ( t + 1 ) ) 2 ∑ i = 1 n γ i 1 \sigma_1^{2(t+1)} = \frac{\sum_{i=1}^{n} \gamma_{i1} (x_i - \mu_1^{(t+1)})^2}{\sum_{i=1}^{n} \gamma_{i1}} σ12(t+1)=i=1nγi1i=1nγi1(xiμ1(t+1))2

类似地,我们也更新 ( μ 2 \mu_2 μ2 ) 和 ( σ 2 2 \sigma_2^2 σ22 ),并更新混合系数 ( π 1 \pi_1 π1 ) 和 ( π 2 \pi_2 π2 )。


Python代码实现

以下是使用EM算法估计GMM参数的简单Python代码示例:
具体解析见文末

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm# 生成数据:两个高斯分布混合的样本
np.random.seed(42)
n_samples = 500
data1 = np.random.normal(0, 1, n_samples//2)  # 均值为0,标准差为1
data2 = np.random.normal(5, 1, n_samples//2)  # 均值为5,标准差为1
X = np.concatenate([data1, data2])# 初始化参数
pi = np.array([0.5, 0.5])  # 混合系数
mu = np.array([0, 5])  # 均值
sigma = np.array([1, 1])  # 方差# EM算法迭代
n_iterations = 100
for iteration in range(n_iterations):# E步:计算责任(每个点属于每个分布的概率)resp1 = pi[0] * norm.pdf(X, mu[0], sigma[0])resp2 = pi[1] * norm.pdf(X, mu[1], sigma[1])total_resp = resp1 + resp2resp1 /= total_respresp2 /= total_resp# M步:最大化Q函数,更新参数pi[0] = np.mean(resp1)pi[1] = np.mean(resp2)mu[0] = np.sum(resp1 * X) / np.sum(resp1)mu[1] = np.sum(resp2 * X) / np.sum(resp2)sigma[0] = np.sqrt(np.sum(resp1 * (X - mu[0])**2) / np.sum(resp1))sigma[1] = np.sqrt(np.sum(resp2 * (X - mu[1])**2) / np.sum(resp2))# 打印每次迭代的结果print(f"Iteration {iteration+1}:")print(f"  pi: {pi}")print(f"  mu: {mu}")print(f"  sigma: {sigma}")# 可视化结果
x_vals = np.linspace(-5, 10, 1000)
y_vals = pi[0] * norm.pdf(x_vals, mu[0], sigma[0]) + pi[1] * norm.pdf(x_vals, mu[1], sigma[1])
plt.hist(X, bins=30, density=True, alpha=0.6, color='g')
plt.plot(x_vals, y_vals, color='r')
plt.title('EM Algorithm for GMM')
plt.show()

总结

Coordinate Ascent(坐标上升)算法是一种通过逐个优化坐标(变量)来最大化目标函数的方法。在EM算法中,E步和M步分别优化隐变量的期望和模型参数的最大化,这可以看作是一种坐标上升的过程。通过反复交替执行这两个步骤,EM算法最终能够逼近最优的模型参数。

英文版

What is the Coordinate Ascent Algorithm?

Coordinate Ascent is an optimization algorithm that improves one variable (or coordinate) at a time, while keeping the other variables fixed, gradually approaching the optimal solution. In contrast to Coordinate Descent, which focuses on minimizing the objective function, Coordinate Ascent is used to maximize the objective function, typically in situations where the optimization function is separable across dimensions.

In each iteration, the Coordinate Ascent algorithm selects a variable and maximizes the contribution of that variable to the objective function, then proceeds to the next variable for optimization. The process involves iteratively updating each coordinate to find the optimal solution. While this process may not always converge globally, it performs well in many practical problems, particularly when the objective function is simple, and each coordinate can be independently optimized.

Coordinate Ascent in the Context of the EM Algorithm

The Expectation-Maximization (EM) algorithm is a common optimization method used in statistics and machine learning, especially when dealing with hidden variables in the data. The basic idea of the EM algorithm is to iteratively solve the Expectation (E) step and Maximization (M) step to optimize the model parameters.

We can view the EM algorithm as a form of Coordinate Ascent. Each round of the E-step and M-step can be seen as optimizing different “coordinates,” with the E-step optimizing the expectation function, and the M-step maximizing that expectation.

Coordinate Ascent in the EM Algorithm

Assume we have a latent variable model with the goal of maximizing the log-likelihood function:
L ( θ ) = log ⁡ P ( X , Z ∣ θ ) \mathcal{L}(\theta) = \log P(X, Z | \theta) L(θ)=logP(X,Zθ)
where:

  • ( X X X ) represents observed data,
  • ( Z Z Z ) represents latent variables,
  • ( θ \theta θ ) represents model parameters.

Since the latent variables ( Z Z Z ) are unobserved, directly maximizing the log-likelihood function is difficult. Thus, the EM algorithm solves this problem iteratively.

  1. E-step (Expectation step):
    In the E-step, we compute the expected value of the latent variables, i.e., given the current parameter estimate ( θ ( t ) \theta^{(t)} θ(t) ), the conditional probability distribution of the latent variables ( Z Z Z ):
    Q ( θ , θ ( t ) ) = E Z ∣ X , θ ( t ) [ log ⁡ P ( X , Z ∣ θ ) ] Q(\theta, \theta^{(t)}) = \mathbb{E}_{Z | X, \theta^{(t)}} \left[ \log P(X, Z | \theta) \right] Q(θ,θ(t))=EZX,θ(t)[logP(X,Zθ)]
    This is a coordinate ascent process because we maximize the expectation of the latent variables while holding the current parameters ( θ ( t ) \theta^{(t)} θ(t) ) fixed.

  2. M-step (Maximization step):
    In the M-step, we maximize the expected function ( Q ( θ , θ ( t ) ) Q(\theta, \theta^{(t)}) Q(θ,θ(t)) ) computed in the E-step to update the model parameters ( θ \theta θ ):
    θ ( t + 1 ) = arg ⁡ max ⁡ θ Q ( θ , θ ( t ) ) \theta^{(t+1)} = \arg\max_\theta Q(\theta, \theta^{(t)}) θ(t+1)=argθmaxQ(θ,θ(t))
    This is also a coordinate ascent process because we fix the expectation of the latent variables and optimize the parameters ( θ \theta θ ).

The E-step and M-step alternate, with each step resembling an ascent along different coordinates. Through iterative updates of the parameters and the latent variables’ estimates, the EM algorithm moves towards the optimal solution.

Mathematical Formulas

Assume we have the following log-likelihood function:
L ( θ ) = log ⁡ P ( X ∣ θ ) = log ⁡ ∑ Z P ( X , Z ∣ θ ) \mathcal{L}(\theta) = \log P(X | \theta) = \log \sum_{Z} P(X, Z | \theta) L(θ)=logP(Xθ)=logZP(X,Zθ)

Since the latent variables ( Z ) are unobserved, in the E-step, we compute the conditional expectation of the latent variables:
Q ( θ , θ ( t ) ) = E Z ∣ X , θ ( t ) [ log ⁡ P ( X , Z ∣ θ ) ] Q(\theta, \theta^{(t)}) = \mathbb{E}_{Z | X, \theta^{(t)}} \left[ \log P(X, Z | \theta) \right] Q(θ,θ(t))=EZX,θ(t)[logP(X,Zθ)]

Then, in the M-step, we maximize this expectation:
θ ( t + 1 ) = arg ⁡ max ⁡ θ Q ( θ , θ ( t ) ) \theta^{(t+1)} = \arg\max_\theta Q(\theta, \theta^{(t)}) θ(t+1)=argθmaxQ(θ,θ(t))

These two steps alternate until convergence.

Example: Gaussian Mixture Model (GMM)

A Gaussian Mixture Model (GMM) is a common latent variable model that assumes the data is generated from a mixture of several Gaussian distributions. Each data point belongs to one of the Gaussian distributions, but we don’t know which one. The EM algorithm can be used to estimate the model parameters.

Assume that the data ( X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \dots, x_n\} X={x1,x2,,xn} ) comes from two Gaussian distributions, with parameters ( ( μ 1 , σ 1 2 ) (\mu_1, \sigma_1^2) (μ1,σ12) ) and ( ( μ 2 , σ 2 2 ) (\mu_2, \sigma_2^2) (μ2,σ22) ), and we aim to estimate these parameters.

E-step: Calculate the probability (responsibility) of each data point belonging to each Gaussian distribution:

Given the current parameters ( ( μ 1 ( t ) , σ 1 2 ( t ) , μ 2 ( t ) , σ 2 2 ( t ) ) (\mu_1^{(t)}, \sigma_1^{2(t)}, \mu_2^{(t)}, \sigma_2^{2(t)}) (μ1(t),σ12(t),μ2(t),σ22(t)) ), we calculate the probability that data point ( x i x_i xi ) belongs to the first Gaussian distribution (called responsibility):
γ i 1 = π 1 N ( x i ∣ μ 1 ( t ) , σ 1 2 ( t ) ) π 1 N ( x i ∣ μ 1 ( t ) , σ 1 2 ( t ) ) + π 2 N ( x i ∣ μ 2 ( t ) , σ 2 2 ( t ) ) \gamma_{i1} = \frac{\pi_1 \mathcal{N}(x_i | \mu_1^{(t)}, \sigma_1^{2(t)})}{\pi_1 \mathcal{N}(x_i | \mu_1^{(t)}, \sigma_1^{2(t)}) + \pi_2 \mathcal{N}(x_i | \mu_2^{(t)}, \sigma_2^{2(t)})} γi1=π1N(xiμ1(t),σ12(t))+π2N(xiμ2(t),σ22(t))π1N(xiμ1(t),σ12(t))
where ( π 1 \pi_1 π1 ) and ( π 2 \pi_2 π2 ) are the mixing coefficients, and ( N ( x i ∣ μ , σ 2 ) \mathcal{N}(x_i | \mu, \sigma^2) N(xiμ,σ2) ) is the Gaussian distribution’s probability density function.

M-step: Maximize the expected function obtained in the E-step to update the parameters:

Using the responsibilities ( γ i 1 \gamma_{i1} γi1 ) and ( γ i 2 \gamma_{i2} γi2 ), we update the Gaussian distribution’s mean and variance:
μ 1 ( t + 1 ) = ∑ i = 1 n γ i 1 x i ∑ i = 1 n γ i 1 \mu_1^{(t+1)} = \frac{\sum_{i=1}^{n} \gamma_{i1} x_i}{\sum_{i=1}^{n} \gamma_{i1}} μ1(t+1)=i=1nγi1i=1nγi1xi
σ 1 2 ( t + 1 ) = ∑ i = 1 n γ i 1 ( x i − μ 1 ( t + 1 ) ) 2 ∑ i = 1 n γ i 1 \sigma_1^{2(t+1)} = \frac{\sum_{i=1}^{n} \gamma_{i1} (x_i - \mu_1^{(t+1)})^2}{\sum_{i=1}^{n} \gamma_{i1}} σ12(t+1)=i=1nγi1i=1nγi1(xiμ1(t+1))2

Similarly, we update ( μ 2 \mu_2 μ2 ), ( σ 2 2 \sigma_2^2 σ22 ), and the mixing coefficients ( π 1 \pi_1 π1 ) and ( π 2 \pi_2 π2 ).


Python Code Implementation

Here is a simple Python implementation of the EM algorithm for estimating GMM parameters:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm# Generate data: samples from a mixture of two Gaussian distributions
np.random.seed(42)
n_samples = 500
data1 = np.random.normal(0, 1, n_samples//2)  # Mean 0, Std 1
data2 = np.random.normal(5, 1, n_samples//2)  # Mean 5, Std 1
X = np.concatenate([data1, data2])# Initialize parameters
pi = np.array([0.5, 0.5])  # Mixing coefficients
mu = np.array([0, 5])  # Means
sigma = np.array([1, 1])  # Variances# EM algorithm iterations
n_iterations = 100
for iteration in range(n_iterations):# E-step: Calculate responsibilities (probabilities of each point belonging to each distribution)resp1 = pi[0] * norm.pdf(X, mu[0], sigma[0])resp2 = pi[1] * norm.pdf(X, mu[1], sigma[1])total_resp = resp1 + resp2resp1 /= total_respresp2 /= total_resp# M-step: Maximize Q function, update parameterspi[0] = np.mean(resp1)pi[1] = np.mean(resp2)mu[0] = np.sum(resp1 * X) / np.sum(resp1)mu[1] = np.sum(resp2 * X) / np.sum(resp2)sigma[0] = np.sqrt(np.sum(resp1 * (X - mu[0])**2) / np.sum(resp1))sigma[1] = np.sqrt(np.sum(resp2 * (X - mu[1])**2) / np.sum(resp2))# Print results for each iterationprint(f"Iteration {iteration+1}:")print(f"  pi: {pi}")print(f"  mu: {mu}")print(f"  sigma: {sigma}")# Visualize the results
x_vals = np.linspace(-5, 10, 1000)
y_vals = pi[0] * norm.pdf(x_vals, mu[0], sigma[0]) + pi[1] * norm.pdf(x_vals, mu[1], sigma[1])
plt.hist(X, bins=30, density=True, alpha=0.6, color='g')
plt.plot(x_vals, y_vals, color='r')
plt.title('EM Algorithm for GMM')plt.show()

Summary

The Coordinate Ascent method is a useful iterative approach to optimization, where only one parameter (coordinate) is updated at a time while others remain fixed. This method is central to algorithms like Expectation-Maximization (EM), where the E-step and M-step alternately optimize different coordinates (latent variables and model parameters). The Gaussian Mixture Model (GMM) example illustrates how the EM algorithm can be used for model estimation in latent variable models.

python代码中哪一步体现数据的似然最大化?

在EM算法的M步中,“最大化对数似然函数” 这一目标体现在通过更新参数(混合系数 ( π k \pi_k πk )、均值 ( μ k \mu_k μk ) 和方差 ( σ k \sigma_k σk ))来最大化 每个数据点的概率,从而最大化整个模型的 数据似然。下面详细解析这个过程,并明确如何体现最大化似然。

1. 对数似然函数的目标

对数似然函数表示的是数据给定当前模型参数下的 概率。在高斯混合模型(GMM)中,假设我们有一个由 ( K K K ) 个高斯分布组成的混合模型,数据集 ( X = { x 1 , x 2 , … , x N } X = \{x_1, x_2, \dots, x_N\} X={x1,x2,,xN} ) 由这些高斯分布生成。

模型的对数似然函数是:

L ( θ ) = ∑ i = 1 N log ⁡ ( ∑ k = 1 K π k N ( x i ; μ k , σ k 2 ) ) \mathcal{L}(\theta) = \sum_{i=1}^{N} \log \left( \sum_{k=1}^{K} \pi_k \mathcal{N}(x_i; \mu_k, \sigma_k^2) \right) L(θ)=i=1Nlog(k=1KπkN(xi;μk,σk2))

其中:

  • ( π k \pi_k πk ) 是第 ( k k k ) 个高斯分布的混合系数(即该高斯分布在总模型中的权重),
  • ( N ( x i ; μ k , σ k 2 ) \mathcal{N}(x_i; \mu_k, \sigma_k^2) N(xi;μk,σk2) ) 是第 ( k k k ) 个高斯分布对数据点 ( x i x_i xi ) 的概率密度,
  • ( μ k \mu_k μk ) 是第 ( k k k ) 个高斯分布的均值,
  • ( σ k 2 \sigma_k^2 σk2 ) 是第 ( k k k ) 个高斯分布的方差。

对数似然函数衡量的是在给定数据的情况下,当前模型参数 ( π k , μ k , σ k \pi_k, \mu_k, \sigma_k πk,μk,σk ) 下数据的 整体似然。我们的目标是最大化这个对数似然函数,找到能够最好地解释数据的模型参数。

2. M步的作用:最大化似然函数

在EM算法中,M步的目标是 最大化对数似然函数,即通过更新参数使得模型的似然值(数据的概率)最大化。如何做到这一点呢?

2.1. E步:计算责任(期望)

在E步中,我们计算每个数据点 ( x i x_i xi ) 属于每个高斯分布 ( k k k ) 的 责任,即数据点 ( x i x_i xi ) 属于第 ( k k k ) 个分布的后验概率:

γ i k = P ( z i = k ∣ x i ) = π k N ( x i ; μ k , σ k 2 ) ∑ k ′ = 1 K π k ′ N ( x i ; μ k ′ , σ k ′ 2 ) \gamma_{ik} = P(z_i = k | x_i) = \frac{\pi_k \mathcal{N}(x_i; \mu_k, \sigma_k^2)}{\sum_{k'=1}^{K} \pi_{k'} \mathcal{N}(x_i; \mu_{k'}, \sigma_{k'}^2)} γik=P(zi=kxi)=k=1KπkN(xi;μk,σk2)πkN(xi;μk,σk2)

这里,( γ i k \gamma_{ik} γik ) 表示数据点 ( x i x_i xi ) 属于高斯分布 ( k k k ) 的概率(责任)。

2.2. M步:更新参数

E步计算得到的责任 ( γ i k \gamma_{ik} γik ) 用来在M步中更新模型的参数。通过更新混合系数 ( π k \pi_k πk )、均值 ( μ k \mu_k μk ) 和方差 ( σ k \sigma_k σk ),我们让每个数据点的似然(由它属于每个高斯分布的概率加权计算的)最大化。

  • 更新混合系数 ( π k \pi_k πk ):混合系数表示每个高斯分布的权重。更新规则为:

π k = 1 N ∑ i = 1 N γ i k \pi_k = \frac{1}{N} \sum_{i=1}^{N} \gamma_{ik} πk=N1i=1Nγik

这里的更新表示的是:每个高斯分布的权重是所有数据点在该分布下的责任(概率)的平均值。

  • 更新均值 ( μ k \mu_k μk ):均值是高斯分布的中心,通过对数据点的加权平均来更新。更新规则为:

μ k = ∑ i = 1 N γ i k x i ∑ i = 1 N γ i k \mu_k = \frac{\sum_{i=1}^{N} \gamma_{ik} x_i}{\sum_{i=1}^{N} \gamma_{ik}} μk=i=1Nγiki=1Nγikxi

这里的加权平均意味着:每个数据点 ( x i x_i xi ) 对均值的贡献是它属于该高斯分布的概率 ( γ i k \gamma_{ik} γik )。

  • 更新方差 ( σ k 2 \sigma_k^2 σk2 ):方差衡量高斯分布的扩散程度,同样通过加权平方差来更新。更新规则为:

σ k 2 = ∑ i = 1 N γ i k ( x i − μ k ) 2 ∑ i = 1 N γ i k \sigma_k^2 = \frac{\sum_{i=1}^{N} \gamma_{ik} (x_i - \mu_k)^2}{\sum_{i=1}^{N} \gamma_{ik}} σk2=i=1Nγiki=1Nγik(xiμk)2

同样地,这里加权平方差意味着:每个数据点 ( x i x_i xi ) 对方差的贡献是它属于该高斯分布的概率 ( γ i k \gamma_{ik} γik )。

3. 最大化似然:如何体现

最大化对数似然函数是通过更新参数(( π k , μ k , σ k \pi_k, \mu_k, \sigma_k πk,μk,σk ))使得每个数据点的 似然 最大化来实现的。在M步中:

  • 更新混合系数 ( π k \pi_k πk ):通过更新每个高斯分布的权重,使得每个数据点属于各个高斯分布的责任概率最大化。
  • 更新均值 ( μ k \mu_k μk ):通过更新每个高斯分布的均值,使得数据点在该分布下的概率密度最大化。
  • 更新方差 ( σ k \sigma_k σk ):通过更新每个高斯分布的方差,使得数据点在该分布下的概率密度最大化。

最终,EM算法会通过迭代E步和M步,逐步优化参数,直到对数似然函数收敛,即模型的似然最大化。

M步通过计算每个数据点在E步中得到的责任,更新模型的参数(混合系数 ( π k \pi_k πk )、均值 ( μ k \mu_k μk ) 和方差 ( σ k \sigma_k σk )),使得数据在当前模型下的 似然 最大化。这是通过加权平均和加权平方差的方式来进行的,每次更新都朝着使数据在当前模型下最可能的方向调整参数。

后记

2024年12月28日14点12分于上海,在GPT4o大模型辅助下完成。

相关文章:

以EM算法为例介绍坐标上升(Coordinate Ascent)算法:中英双语

中文版 什么是 Coordinate Ascent 算法? Coordinate Ascent(坐标上升)是一种优化算法,它通过在每次迭代时优化一个变量(或一个坐标),并保持其他变量不变,逐步逼近最优解。与坐标下…...

visual studio连接sql server数据库

目录 1、为什么要建立连接2、在sql server中建立数据库3、visual studio连接sql server数据库4、学生信息管理系统页面布局5、添加事件逻辑 5.1 页面跳转5.2 读取学生信息5.3 查询学生信息5.4 修改学生信息5.5 删除学生信息5.6 添加学生信息 bilibili演示视频 github源码 1、…...

磁盘的相关操作

1.让U盘连接到虚拟机中 两种方法:1>在弹出的窗口中设置 2>通过选项设置 菜单栏---->虚拟机----->可移动设备---->找到U盘名---->连接到虚拟机中 2.查看U盘是否已被成功识别 方法:ls /dev/sd* 显示包含除了sda外的文件说明U盘连接成功…...

数据结构与算法Python版 图的应用与广度优先搜索

文章目录 一、图的应用-词梯问题二、图的广度优先搜索 一、图的应用-词梯问题 词梯问题 Word Ladder 从一个单词演变到另一个单词,其中的过程可以经过多个中间单词。要求是相邻两个单词之间差异只能是1个字母如FOOL变SAGE:FOOL >> POOL >>…...

Unity——InputField组件自动换行和enter键换行

文章目录 输入框实现换行功能 输入框实现换行功能 在Unity中,如果你想要在输入框(如InputField)中实现换行功能 ,你需要确保以下几点: 1、文本组件支持多行: 确保你的InputField的文本组件(Te…...

solr9.7 单机安装教程

1.环境要求:jdk11以上 2.下载wget https://dlcdn.apache.org/solr/solr/9.7.0/solr-9.7.0.tgz 3.解压 4.修改solr.in.sh配置 5.启动命令 bin/solr start 6.创建core bin/solr create -c <core名称> 注意:用solr ui界面创建&#xff0c;会提示找不到solrconfig.xml和m…...

​虚幻引擎UE5渲染不够快的解决办法

​虚幻引擎是由Epic Games公司开发的一款功能强大、全球最开放且先进的实时 3D 创作工具&#xff0c;广泛应用于游戏、影视、建筑可视化、虚拟现实等多个领域&#xff01;虚幻引擎UE5如何实现在网上极速渲染呢&#xff1f;本文提供云渲染和云电脑两套方案用于渲染提速&#xff…...

基于STM32的智能家居环境监控系统设计

目录 引言系统设计 硬件设计软件设计系统功能模块 环境监控模块控制模块显示模块系统实现 硬件实现软件实现系统调试与优化结论与展望 1. 引言 随着智能家居技术的发展&#xff0c;环境监控系统已经成为家居管理的重要组成部分。智能家居环境监控系统通过实时监测室内温度、湿…...

Android service framework笔记

1. 网络摘录如何添加一个Application Framework Service(一)(without native code) 如何添加一个Application Framework Service(二)(with native code) 2.书籍摘录...

【图像处理lec10】图像压缩

目录 一、图像压缩基础 1、图像压缩的基本概念 2、数据冗余与压缩比 3、三种主要的数据冗余类型 4、保真度评估标准&#xff08;Fidelity Criteria&#xff09; 5、应用与实践 二、图像压缩模型 1、图像压缩模型概述 &#xff08;1&#xff09;压缩系统的结构 &#…...

flask后端开发(2):URL与视图

目录 URL定义request获取请求参数 gitcode地址&#xff1a; https://gitcode.com/qq_43920838/flask_project.git URL定义 from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello World!app.route(/profile) def profile():return 我是个人…...

Linux Ubuntu24配置安装Java

目录 一. 通过apt安装java1.1 列出所有可用java版本1.2 安装指定java版本1.3 安装后确认1.4 /etc/alternatives/目录 二. 手动安装java 一. 通过apt安装java 1.1 列出所有可用java版本 apt list openjdk-*jdk apluserubuntu24-01:~$ apt list openjdk-*jdk Listing... Done …...

线段树例题题解

卫星覆盖&#xff08;NOI1997&#xff09; 题面&#xff1a; SERCOI&#xff08;Space-Earth Resource Cover-Observe lnstitute&#xff09; 是一个致力于利用卫星技术对空间和地球资源进行覆盖观测的组织。现在他们研制成功一种新型资源观测卫星 -SERCOI-308。这种卫星可以…...

极品飞车6的游戏手柄设置

极品飞车&#xff0c;既可以用键盘来控制车辆的前进、后退、左转、右转、加速与减速&#xff0c;也可以使用游戏手柄来操作车辆的运行。需要注意的是&#xff0c;极品飞车虽然支持手柄&#xff0c;但是仅支持常见的北通、罗技还有部分Xbox系列的手柄&#xff0c;至于其他的PS4手…...

为何DeepSeek V3模型为自己是ChatGPT?

DeepSeek V3 AI模型&#xff1a;为何它认为自己是ChatGPT&#xff1f; 引言 在人工智能领域&#xff0c;最新的技术进展总是令人兴奋。最近&#xff0c;一家资金雄厚的中国AI实验室DeepSeek发布了一款新的AI模型——DeepSeek V3&#xff0c;它在多个流行基准测试中超越了许多…...

【每日学点鸿蒙知识】人脸活体检测、NodeController刷新、自动关闭输入框、Row设置中间最大宽、WebView单例

1、HarmonyOS 人脸活体检测调用&#xff1f; H5调用应用侧方法可参考以下demo&#xff1a; index.ets Web()//注册方法.javaScriptProxy({object: this.testObj,name: "testObjName",methodList: ["getLocationTS"],controller: this.webController})cla…...

深入理解Composer自动加载机制

Composer是PHP生态系统中最常用的依赖管理工具之一&#xff0c;它不仅能够帮助开发者管理项目的依赖关系&#xff0c;还能够自动加载这些依赖项。自动加载机制是Composer的核心功能之一&#xff0c;通过自动加载&#xff0c;开发者可以在运行时按需加载所需的类和文件&#xff…...

SQL SERVER日常运维巡检系列之-日志

前言 做好日常巡检是数据库管理和维护的重要步骤&#xff0c;而且需要对每次巡检日期、结果进行登记&#xff0c;同时可能需要出一份巡检报告。 本系列旨在解决一些常见的困扰&#xff1a; 不知道巡检哪些东西不知道怎么样便捷体检机器太多体检麻烦生成报告困难&#xff0c;无…...

2024年中国新能源汽车用车发展怎么样 PaperGPT(二)

用车趋势深入分析 接上文&#xff0c;2024年中国新能源汽车用车发展怎么样 PaperGPT&#xff08;一&#xff09;-CSDN博客本文将继续深入探讨新能源汽车的用车强度、充电行为以及充电设施的现状。 用车强度 月均行驶里程&#xff1a;2024年纯电车辆月均行驶超过1500公里&…...

【数据结构】线性数据结构——链表

1. 定义 链表是一种线性数据结构&#xff0c;由多个节点&#xff08;Node&#xff09;组成。每个节点存储数据和指向下一个节点的指针。与数组不同&#xff0c;链表的节点不需要在内存中连续存储。 2. 特点 动态存储&#xff1a; 链表的大小不固定&#xff0c;可以动态增加或…...

Spring中的设计模式

Spring中的设计模式 控制反转(IoC)和依赖注入(DI) IoC 是一个原则&#xff0c;而不是一个模式&#xff0c;以下模式&#xff08;但不限于&#xff09;实现了 IoC 原则。 **Spring IoC 容器就像是一个工厂一样&#xff0c;当我们需要创建一个对象的时候&#xff0c;只需要配置…...

微信小程序给外面的view设置display:flex;后为什么无法给里面的view设置宽度

如果父盒子view设置了display:flex&#xff0c;子view设置宽度值无效&#xff0c;宽度值都是随着内容多少而改变&#xff1a; 问题视图&#xff1a; 原因&#xff1a; flex布局元素的子元素&#xff0c;自动获得了flex-shrink的属性 解决方法&#xff1a; 给子view增加:fl…...

异步爬虫之aiohttp的使用

在上一篇博客我们介绍了异步爬虫的基本原理和 asyncio 的基本用法&#xff0c;并且在最后简单提及了使用aiohttp 实现网页爬取的过程。本篇博客我们介绍一下 aiohttp 的常见用法。 基本介绍 前面介绍的 asyncio模块&#xff0c;其内部实现了对 TCP、UDP、SSL协议的异步操作&a…...

vue3大屏实现;使用使用CSS Grid实现大屏

文章目录 一、效果1.效果2.使用CSS Grid3.插件4.html代码5.index.scss代码 一、效果 1.效果 方案&#xff1a;采用CSS的Grid布局&#xff0c;实现首页大屏模块划分和自适应功能&#xff1b; 布局&#xff1a; 大屏主要内容&#xff0c;高宽比是1920*1080&#xff1b;即16:9的…...

安卓入门二 Kotlin基础

Kotlin Kotlin的历史 Kotlin由Jet Brains公司开发设计&#xff0c;2011年公布第一版&#xff0c;2012年开源。 2016年发布1.0正式版&#xff0c;并且Jet Brains在IDEA加入对Kotlin的支持&#xff0c;安卓自此又有新的选择。 2019年谷歌宣布Kotlin成为安卓第一开发语言&#x…...

在ubuntu上如何使用sdkman安装两个版本的java并进行管理和维护

在Ubuntu上使用SDKMAN安装和管理两个不同版本的Java的步骤如下&#xff1a; 安装SDKMAN 打开终端&#xff0c;使用以下命令安装SDKMAN&#xff1a; curl -s "https://get.sdkman.io" | bash这个命令会下载并运行SDKMAN!的安装脚本。 安装完成后&#xff0c;需要打开…...

《代码随想录》Day20打卡!

《代码随想录》二叉树&#xff1a;二叉搜索树的最近公共祖先 本题的完整题目如下&#xff1a; 本题的思路如下&#xff1a; 1.之前写过一个二叉树的最近公共祖先&#xff0c;本题相比于另一道题&#xff0c;不同是本题是二叉搜索树&#xff0c;有一些可用的性质。 2.本题使用递…...

GPIO相关寄存器,点灯

目录 一.输入模式 1.浮空输入 2.上拉输入 3.下拉输入 4.模拟输入 二.输出模式 1.推挽输出 2.开漏输出 三.寄存器 1.寄存器的作用 2.功能与类型 3.控制某一引脚输出电压来点灯所需要控制的寄存器 1.打开对应时钟开关 2.端口模式寄存器 ---输出模式 3.输出类型寄存…...

25 - GRACE Mascon数据缺失月份数据插值

25 - GRACE Mascon数据缺失月份数据插值 0 引言1 程序包获取1.1 获取ssa插值算法程序包1.2 try2 利用ssa对grace mascon数据进行插值3 完整代码及相关函数3.1 Main程序3.1 子程序4 总结0 引言 💦💦💦💦💦   上篇介绍了grace mascon数据提取及简单的分析过程,仔细…...

深入理解Redis:从理论到实践的Java之旅

Redis&#xff0c;这个开源的内存数据结构存储系统&#xff0c;自2009年诞生以来&#xff0c;凭借其丰富的数据结构、快速的读写性能以及高度的可扩展性&#xff0c;迅速成为了分布式系统和高并发应用中的明星组件。本文将带你深入理解Redis&#xff0c;并通过Java语言的实践示…...

REDIS的集群

REDIS的集群模式&#xff1a; 主从模式&#xff1a;redis高可用的基础&#xff0c;哨兵和集群都是建立在此基础之上 特点&#xff1a; 主从模式和数据库的主从模式&#xff08;工作模式&#xff09;是一样的&#xff0c;主负责写入&#xff0c;然后把写入到数据同步到从&…...

linux——vi命令常用操作

一、vi模式 vi一般分为三种模式&#xff0c;分别是命令行模式、插入模式、末行模式 1.命令模式&#xff1a;控制屏幕光标的移动&#xff0c;按 &#xff1a;进入末行模式&#xff0c;按 i&#xff08;其他插入命令也可&#xff09; 进入插入模式&#xff1b; 2.插入模式&…...

SKETCHPAD——允许语言模型生成中间草图,在几何、函数、图算法和游戏策略等所有数学任务中持续提高基础模型的性能

概述 论文地址&#xff1a;https://arxiv.org/pdf/2406.09403 素描是一种应用广泛的有效工具&#xff0c;包括产生创意和解决问题。由于素描能直接传达无法用语言表达的视觉和空间信息&#xff0c;因此从古代岩画到现代建筑图纸&#xff0c;素描在世界各地被用于各种用途。儿童…...

计算机网络•自顶向下方法:网络应用原理

网络应用原理 网络应用架构 目前有两种主流的网络应用架构&#xff1a; 客户-服务器架构&#xff08;Client-server&#xff09; 服务器&#xff08;server&#xff09;: 有一台总是在线的主机&#xff0c;上面运行着服务器程序(server)服务器主机(server machine)具有永久的…...

python: Oracle Stored Procedure query table

oracel sql script CREATE OR REPLACE PROCEDURE SelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId paramSchoolId; END SelectSchool; /-- 查询所有 CREATE OR REPLACE PROCEDURE SelectScho…...

Webpack学习笔记(6)

首先搭建一个基本的webpack环境&#xff1a; 执行npm init -y&#xff0c;创建pack.json&#xff0c;保存安装包的一些信息 执行npm install webpack webpack-cli webpack-dev-server html-webpack-plugin -D&#xff0c;出现node_modules和package-lock.json。 1.source-Ma…...

数仓建模:如何进行实体建模?

目录 1 如何进行实体建模? 业务建模 领域建模 逻辑建模 2 实体建模具体步骤 需求分析...

C++ 设计模式:享元模式(Flyweight Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 单例模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享尽可能多的相同对象来减少内存使用和提高性能。享元模式适用于大量细粒度对象的场景&#xff0c;这些对象之…...

idea报错:There is not enough memory to perform the requested operation.

文章目录 一、问题描述二、先解决三、后原因&#xff08;了解&#xff09; 一、问题描述 就是在使用 IDEA 写代码时&#xff0c;IDEA 可能会弹一个窗&#xff0c;大概提示你目前使用的 IDEA 内存不足&#xff0c;其实就是提醒你 JVM 的内存不够了&#xff0c;需要重新分配。弹…...

Kubernetes Gateway API-2-跨命名空间路由

1 跨命名空间路由 Gateway API 具有跨命名空间路由的核心支持。当多个用户或团队共享底层网络基础设施时,这很有用,但必须对控制和配置进行分段,以尽量减少访问和容错域。 Gateway 和 Route(HTTPRoute,TCPRoute,GRPCRoute) 可以部署到不同的命名空间中,路由可以跨命名空间…...

【视觉SLAM:四、相机与图像】

相机模型 相机模型是计算机视觉中的重要内容&#xff0c;用于描述真实相机如何将三维世界投影到二维图像平面。以下从多个角度介绍常见的相机模型。 针孔相机模型 针孔相机模型是最简单的相机模型&#xff0c;用数学公式描述从三维世界到二维图像平面的映射关系。核心公式如…...

【spring】参数校验Validation

前言 在实际开发中&#xff0c;我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递&#xff0c;传来的参数长度不符合要求等&#xff0c;这种时候如果放任不管&#xff0c;继续执行后续业务逻辑&#xff0c;很有可能就会出现意想不到的bug。 有人可能会…...

基于 InternLM 和 LangChain 搭建你的知识库

本文基于InternStudio 算力平台利用 InternLM 和 LangChain 搭建知识库。 InternStudio (OpenAIDE)[1] 是面向算法开发者与研究员的云端集成开发环境。基于「容器实例」&#xff0c;「镜像中心」&#xff0c;「分布式训练」&#xff0c;「公开数据集」模块为用户提供 “算力、算…...

C++ 设计模式:备忘录模式(Memento Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 状态模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这个模式在需要保存和恢复对象状态的场景中非常有用&#xff…...

STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计

SMEC88ST SDK开发包下载 目前市场上很多嵌入式产品方案都是可以破解复制的&#xff0c;主要是因为方案主芯片不具备防破解的功能&#xff0c;这就导致开发者投入大量精力、财力开发的新产品一上市就被别人复制&#xff0c;到市场上的只能以价格竞争&#xff0c;最后工厂复制的产…...

利用JavaScript实现猜数字

一&#xff0c;使用while循环实现 以下代码为固定数字非随机数&#xff0c;答案通过弹窗来设置&#xff0c;结果太唯一。 let number;while (true) {number prompt(我正在想一个1-10的数字,你猜猜看&#xff1f;);switch (number) {case "1":alert("小了&quo…...

terminal_学习

参考&#xff1a; 让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南 https://sspai.com/post/55176MAC 终端美化教程&#xff08;来个全套 &#xff09;https://blog.csdn.net/weixin_42326144/article/details/121957795 x.1 zsh做美化&#xff08;安装oh…...

MongoDB 管理工具

关于 MongoDB 的管理工具&#xff0c;目前市面上有多款优秀的 GUI 工具可供选择。这些工具旨在提高 MongoDB 的开发和管理效率&#xff0c;使得数据库操作更加便捷和高效。以下是一些推荐的工具&#xff1a; MongoDB Compass&#xff1a;这是 MongoDB 官方提供的一款 GUI 管理工…...

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理&#xff0c;可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…...

机器学习-高斯混合模型

文章目录 高斯混合模型对无标签的数据集&#xff1a;使用高斯混合模型进行聚类对有标签的数据集&#xff1a;使用高斯混合模型进行分类总结实战 高斯混合模型 对无标签的数据集&#xff1a;使用高斯混合模型进行聚类 对有标签的数据集&#xff1a;使用高斯混合模型进行分类 总结…...