🎯要点
🎯算法模型图层节点和边数学定义 | 🎯算法应用于贝叶斯推理或最大似然优化概率建模的多图层生成模型 | 🎯算法结合图结构边和节点属性 | 🎯对比群体关联预测推理生成式期望最大化多图层算法 | 🎯使用合成多图层和现实世界多图层集测试算法 | 🎯算法可解释性潜力定性分析 | 🎯算法测试单图层结构
📜多图层用例
📜Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法
🍪语言内容分比
🍇Python期望最大化算法
在现实世界的机器学习应用中,通常有许多相关特征,但只有其中的一部分是可观察的。在处理有时可观察有时不可观察的变量时,确实可以利用该变量可见或可观察的实例来学习和预测不可观察的实例。这种方法通常称为处理缺失数据。通过使用变量可观察的可用实例,机器学习算法可以从观察到的数据中学习模式和关系。然后可以使用这些学习到的模式来预测变量缺失或不可观察的实例中的值。
期望最大化算法可用于处理变量部分可观测的情况。当某些变量可观测时,我们可以利用这些实例来学习和估计它们的值。然后,我们可以在不可观测的情况下预测这些变量的值。期望最大化算法适用于潜变量,即那些不能直接观察到但可以通过其他观察变量的值推断出来的变量。通过利用已知的控制这些潜变量的概率分布的一般形式,期望最大化算法可以预测它们的值。
期望最大化算法是机器学习领域中许多无监督聚类算法的基础。它提供了一个框架来查找统计模型的局部最大似然参数,并在数据缺失或不完整的情况下推断潜在变量。
期望最大化算法是一种迭代优化方法,它结合了不同的无监督机器学习算法,以寻找涉及未观察潜变量的统计模型中参数的最大似然或最大后验估计。EM 算法通常用于潜变量模型,可以处理缺失数据。它由期望步骤和最大化步骤组成,形成一个迭代过程来改善模型拟合度。
- 在估计步骤中,算法计算潜在变量,即使用当前参数估计的对数似然期望。
- 在最大化步骤中,算法确定使估计步骤中获得的期望对数似然最大化的参数,并根据估计的潜在变量更新相应的模型参数。
通过反复重复这些步骤,此算法寻求最大化观测数据的似然性。它通常用于无监督学习任务,例如推断潜在变量的聚类,并可应用于机器学习、计算机视觉和自然语言处理等各个领域。
期望最大化算法中一些最常用的关键术语如下:
- 潜在变量:潜在变量是统计模型中不可观察的变量,只能通过其对可观察变量的影响间接推断。它们无法直接测量,但可以通过其对可观察变量的影响来检测。
- 可能性:是在给定模型参数的情况下观察给定数据的概率。在算法中,目标是找到使似然最大化的参数。
- 对数似然:是似然函数的对数,衡量观测数据与模型之间的拟合优度。 算法寻求最大化对数似然。
- 最大似然估计:最大似然估计是一种通过查找使似然函数最大化的参数值来估计统计模型参数的方法,似然函数衡量模型解释观测数据的程度。
- 后验概率:在贝叶斯推理的背景下,此算法可以扩展以估计最大后验估计,其中参数的后验概率是基于先验分布和似然函数计算的。
- 期望步骤:算法的期望步骤根据观测数据和当前参数估计计算潜在变量的期望值或后验概率。它涉及计算每个数据点的每个潜在变量的概率。
- 最大化步骤:算法的最大化步骤通过最大化从期望步骤获得的预期对数似然来更新参数估计。它涉及找到优化似然函数的参数值,通常通过数值优化方法。
- 收敛:收敛是指算法达到稳定解的情况。通常通过检查对数似然或参数估计的变化是否低于预定义阈值来确定。
期望最大化算法的本质是使用数据集中可用的观测数据来估计缺失的数据,然后使用该数据来更新参数的值。让我们详细了解一下此算法。
- 最初,考虑一组参数的初始值。给系统一组不完整的观测数据,假设观测数据来自特定模型。
- 期望步骤:在此步骤中,我们使用观察到的数据来估计或猜测缺失或不完整数据的值。它主要用于更新变量。
- 最大化步骤:在这一步中,我们使用前面“期望”步骤中生成的完整数据来更新参数值。它基本上用于更新假设。
- 收敛:在此步骤中,检查值是否收敛,如果是,则停止,否则重复步骤 2 和步骤 3,即“期望”步骤和“最大化”步骤,直到收敛。
代码实现:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
生成具有两个高斯分量的数据集
mu1, sigma1 = 2, 1
mu2, sigma2 = -1, 0.8
X1 = np.random.normal(mu1, sigma1, size=200)
X2 = np.random.normal(mu2, sigma2, size=600)
X = np.concatenate([X1, X2])
sns.kdeplot(X)
plt.xlabel('X')
plt.ylabel('Density')
plt.title('Density Estimation of X')
plt.show()
初始化参数
mu1_hat, sigma1_hat = np.mean(X1), np.std(X1)
mu2_hat, sigma2_hat = np.mean(X2), np.std(X2)
pi1_hat, pi2_hat = len(X1) / len(X), len(X2) / len(X)
执行算法:
- 迭代指定次数(本例中为 20)
- 在每个时期,预期阶段通过评估每个组件的高斯概率密度并按相应的比例对其进行加权来计算责任(gamma 值)
- 最大化步通过计算每个分量的加权平均值和标准差来更新参数
num_epochs = 20
log_likelihoods = []
for epoch in range(num_epochs):
gamma1 = pi1_hat * norm.pdf(X, mu1_hat, sigma1_hat)
gamma2 = pi2_hat * norm.pdf(X, mu2_hat, sigma2_hat)
total = gamma1 + gamma2
gamma1 /= total
gamma2 /= total
mu1_hat = np.sum(gamma1 * X) / np.sum(gamma1)
mu2_hat = np.sum(gamma2 * X) / np.sum(gamma2)
sigma1_hat = np.sqrt(np.sum(gamma1 * (X - mu1_hat)**2) / np.sum(gamma1))
sigma2_hat = np.sqrt(np.sum(gamma2 * (X - mu2_hat)**2) / np.sum(gamma2))
pi1_hat = np.mean(gamma1)
pi2_hat = np.mean(gamma2)
log_likelihood = np.sum(np.log(pi1_hat * norm.pdf(X, mu1_hat, sigma1_hat)
+ pi2_hat * norm.pdf(X, mu2_hat, sigma2_hat)))
log_likelihoods.append(log_likelihood)
plt.plot(range(1, num_epochs+1), log_likelihoods)
plt.xlabel('Epoch')
plt.ylabel('Log-Likelihood')
plt.title('Log-Likelihood vs. Epoch')
plt.show()
绘制最终估计密度
X_sorted = np.sort(X)
density_estimation = pi1_hat*norm.pdf(X_sorted,mu1_hat, sigma1_hat) + pi2_hat * norm.pdf(X_sorted,mu2_hat, sigma2_hat)
plt.plot(X_sorted, gaussian_kde(X_sorted)(X_sorted), color='green', linewidth=2)
plt.plot(X_sorted, density_estimation, color='red', linewidth=2)
plt.xlabel('X')
plt.ylabel('Density')
plt.title('Density Estimation of X')
plt.legend(['Kernel Density Estimation','Mixture Density'])
plt.show()
此算法应用于:
- 它可用于填充样本中缺失的数据。
- 它可以作为集群无监督学习的基础。
- 它可用于估计隐马尔可夫模型的参数。
- 它可用于发现潜在变量的值。