Python | R 潜在混合模型

2024-06-04 06:04
文章标签 python 模型 混合 潜在

本文主要是介绍Python | R 潜在混合模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📜用例

📜Python | MATLAB | R 心理认知数学图形模型推断 | 📜信用卡消费高斯混合模型 | 📜必修课学业成绩分布异常背景混合模型潜在类别分析

✒️潜在混合模型

本质上,混合模型(或混合分布)是将多个概率分布组合成一个概率分布。
P ( x ) = π 0 p 0 ( x ) + π 1 p 1 ( x ) + … + π i p i ( x ) s.t.  ∑ π i = 1 \begin{gathered} P(x)=\pi_0 p_0(x)+\pi_1 p_1(x)+\ldots+\pi_i p_i(x) \\ \text { s.t. } \sum \pi_i=1 \end{gathered} P(x)=π0p0(x)+π1p1(x)++πipi(x) s.t. πi=1
为了将这些分布组合在一起,我们为每个成分分布分配一个权重,使得该分布下的总概率总和为 1。一个简单的例子是包含 2 个高斯分布的混合分布。我们可以有 2 个具有不同均值和方差的分布,并使用不同的权重将这 2 个分布组合在一起。

具体来说,我们可以认为该分布源自一个两步生成过程。在此过程中,可以从 n 个不同的概率分布中生成一个数据点。首先,我们确定它来自哪个概率分布。这个概率就是权重 π i π_i πi。一旦选择了组件概率分布,就可以通过模拟组件概率分布本身来生成数据点。

高斯混合模型本质上是一种混合模型,其中所有分量分布都是高斯分布。
f ( x ) = π 0 N ( μ 0 , Σ 0 ) + π 1 N ( μ 1 , Σ 1 ) + … + π i N ( μ i , Σ i ) s.t.  ∑ π i = 1 \begin{gathered} f(x)=\pi_0 N\left(\mu_0, \Sigma_0\right)+\pi_1 N\left(\mu_1, \Sigma_1\right)+\ldots+\pi_i N\left(\mu_i, \Sigma_i\right) \\ \text { s.t. } \sum \pi_i=1 \end{gathered} f(x)=π0N(μ0,Σ0)+π1N(μ1,Σ1)++πiN(μi,Σi) s.t. πi=1
现在让我们试着理解为什么使用高斯分布来对混合物的成分进行建模。当查看数据集时,我们希望将相似的点聚类在一起。这些聚类通常本质上是球形或椭圆形的,因为我们希望将靠近的点聚类在一起。因此,正态分布是集群的良好模型。分布的均值将是簇的中心,而簇的形状和分布可以通过分布的协方差很好地建模。

集群的第二个变量是不同集群的相对大小。在有机数据集中,我们通常不期望集群的大小相同,这意味着某些集群的点数会比其他集群多。然后,集群的大小将由集群权重 π i \pi_i πi 决定。

在聚类的背景下,我们假设有 k k k 个影响因素影响数据的生成。每个影响因素都有不同的权重,对应于簇权重 π π π​​。

💦Python高斯混合模型

  • 基于概率的软聚类方法
  • 每个簇:一个生成模型(高斯或多项式)
  • 参数(例如平均值/协方差未知)

让我们生成一个示例数据集,其中点是从两个高斯过程之一生成的。第一个分布的平均值为 100,第二个分布的平均值为 90;和分布的标准差分别为 5 和 2。

第一个过程我们将获得60,000积分;第二个过程中50,000个点并将它们混合在一起。

import numpy as np
np.random.seed(0)import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
Mean1, Mean2  = 100.0, 90.0
Standard_dev1, Standard_dev2 = 5.0, 2.0
sample1, sample2 = 60000, 50000print('Input Normal_distb {:}: μ = {:1}, σ = {:.2}, n = {} '.format("1", Mean1, Standard_dev1, sample1))
print('Input Normal_distb {:}: μ = {:1}, σ = {:.2}, n = {} '.format("2", Mean2, Standard_dev2, sample2))
X1 = np.random.normal(loc = Mean1, scale = Standard_dev1, size = sample1)
X2 = np.random.normal(loc = Mean2, scale = Standard_dev2, size = sample2)# plot
fig = plt.figure(figsize=(8, 6), dpi=100)
sns.distplot(X1, bins=50, kde=True, norm_hist=True, label='Normal distribution 1')
sns.distplot(X2, bins=50, kde=True, norm_hist=True, label='Normal distribution 2')
plt.legend()
plt.show()
# save
fig.savefig('norm_distrib12.jpeg')
# mix two distrib together
X = np.hstack((X1, X2))# plot
fig = plt.figure(figsize=(8, 6), dpi=100)
sns.distplot(X, bins=50, kde=True, norm_hist=True, label='gaussian mixture')
plt.legend()
plt.show()
# save
fig.savefig('final_dt.jpeg')

因此,将这些过程混合在一起后,我们就得到了上图所示的数据集。我们可以注意到 2 个峰值:大约 90 和 100,但对于峰值中间的许多点,很难确定它们来自哪个分布。那么我们如何解决这个任务呢?我们可以使用高斯混合模型,该模型将使用期望最大化算法来估计分布的参数。

💦潜在变量最大似然估计(算法):

X = X.reshape((len(X), 1))  
from sklearn.mixture import GaussianMixtureGMM = GaussianMixture(n_components = 2, init_params = 'random')
GMM.fit(X)
print('Converged:', GMM.converged_) # check if the model has converged
Y = np.array([[105.0]])
prediction = GMM.predict_proba(Y)
print('Probability each Gaussian (state) in the model given each sample p = {}'.format(prediction))
print()
yhat = GMM.predict(X)print(yhat[:100])
print(yhat[-100:])
print(len(yhat[yhat==0]))
print(len(yhat[yhat==1]))

多元高斯:d > 1

from sklearn.datasets.samples_generator import make_blobs
from scipy.stats import multivariate_normalX, Y = make_blobs(cluster_std=1.0, random_state=123, n_samples=12000, centers=3)X = np.dot(X, np.random.RandomState(0).randn(2,2))x, y = np.meshgrid(np.sort(X[:,0]), np.sort(X[:,1]))
XY = np.array([x.flatten(), y.flatten()]).TGMM = GaussianMixture(n_components=3).fit(X) # instantiate and fit the model
print('Converged:', GMM.converged_) # check if the model has converged
means = GMM.means_ 
covariances = GMM.covariances_Y = np.array([[0.5], [0.5]])
prediction = GMM.predict_proba(Y.T)
print('Probability each Gaussian (state) in the model given each sample p = {}'.format(prediction))fig = plt.figure(figsize = (12,12), dpi = 100)
ax0 = fig.add_subplot(111)
ax0.scatter(X[:,0], X[:,1])
ax0.scatter(Y[0,:], Y[1,:], c = 'orange', zorder = 10, s = 100)
for m,c in zip(means,covariances):multi_normal = multivariate_normal(mean = m, cov = c)ax0.contour(np.sort(X[:,0]), np.sort(X[:,1]), multi_normal.pdf(XY).reshape(len(X), len(X)), colors='black', alpha=0.3)ax0.scatter(m[0], m[1], c = 'grey', zorder = 10, s = 100)plt.show()fig.savefig('2d.jpeg')

👉参阅一:计算思维

👉参阅二:亚图跨际

这篇关于Python | R 潜在混合模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029257

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数