首页 > 其他分享 >高斯混合模型GMM实现

高斯混合模型GMM实现

时间:2023-11-09 18:33:06浏览次数:31  
标签:dim 高斯 GMM Data 模型 weight Mu Sigma

 (1)以下matlab代码实现了高斯混合模型:

function [Alpha, Mu, Sigma] = GMM_EM(Data, Alpha0, Mu0, Sigma0)

%% EM 迭代停止条件

loglik_threshold = 1e-10;

%% 初始化参数

[dim, N] = size(Data);

M = size(Mu0,2);

loglik_old = -realmax;

nbStep = 0;



Mu = Mu0;

Sigma = Sigma0;

Alpha = Alpha0;

Epsilon = 0.0001;

while (nbStep < 1200)

  nbStep = nbStep+1;

  %% E-步骤 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  for i=1:M

    % PDF of each point

    Pxi(:,i) = GaussPDF(Data, Mu(:,i), Sigma(:,:,i));         

  end



  % 计算后验概率 beta(i|x)

  Pix_tmp = repmat(Alpha,[N 1]).*Pxi;

  Pix = Pix_tmp ./ (repmat(sum(Pix_tmp,2),[1 M])+realmin);

  Beta = sum(Pix);

  %% M-步骤 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  for i=1:M

    % 更新权值

    Alpha(i) = Beta(i) / N;

    % 更新均值

    Mu(:,i) = Data*Pix(:,i) / Beta(i);

    % 更新方差

    Data_tmp1 = Data - repmat(Mu(:,i),1,N);

    Sigma(:,:,i) = (repmat(Pix(:,i)',dim, 1) .* Data_tmp1*Data_tmp1') / Beta(i);

    %% Add a tiny variance to avoid numerical instability

    Sigma(:,:,i) = Sigma(:,:,i) + 1E-5.*diag(ones(dim,1));

  end



%  %% Stopping criterion 1 %%%%%%%%%%%%%%%%%%%%

%  for i=1:M

    %Compute the new probability p(x|i)

%    Pxi(:,i) = GaussPDF(Data, Mu(:,i), Sigma(i));

%  end

  %Compute the log likelihood

%  F = Pxi*Alpha';

%  F(find(F<realmin)) = realmin;

%  loglik = mean(log(F));

  %Stop the process depending on the increase of the log likelihood

%  if abs((loglik/loglik_old)-1) < loglik_threshold

%    break;

%  end

%  loglik_old = loglik;



  %% Stopping criterion 2 %%%%%%%%%%%%%%%%%%%%

  v = [sum(abs(Mu - Mu0)), abs(Alpha - Alpha0)];

  s = abs(Sigma-Sigma0);

  v2 = 0;

  for i=1:M

    v2 = v2 + det(s(:,:,i));

  end



  if ((sum(v) + v2) < Epsilon)

    break;

  end

  Mu0 = Mu;

  Sigma0 = Sigma;

  Alpha0 = Alpha;

end

nbStep

  

(2)以下代码根据高斯分布函数计算每组数据的概率密度,被GMM_EM函数所调用

function prob = GaussPDF(Data, Mu, Sigma)

%

% 根据高斯分布函数计算每组数据的概率密度 Probability Density Function (PDF)

% 输入 -----------------------------------------------------------------

%   o Data:  D x N ,N个D维数据

%   o Mu:    D x 1 ,M个Gauss模型的中心初始值

%   o Sigma: M x M ,每个Gauss模型的方差(假设每个方差矩阵都是对角阵,

%                                   即一个数和单位矩阵的乘积)

% Outputs ----------------------------------------------------------------

%   o prob:  1 x N array representing the probabilities for the

%            N datapoints.    

[dim,N] = size(Data);

Data = Data' - repmat(Mu',N,1);

prob = sum((Data*inv(Sigma)).*Data, 2);

prob = exp(-0.5*prob) / sqrt((2*pi)^dim * (abs(det(Sigma))+realmin));
点击并拖拽以移动
(3)以下是演示代码demo1.m

% 高斯混合模型参数估计示例 (基于 EM 算法)

% 2010 年 11 月 9 日

[data, mu, var, weight] = CreateSample(M, dim, N);  // 生成测试数据

[Alpha, Mu, Sigma] = GMM_EM(Data, Priors, Mu, Sigma)

  

em算法的简单实现,利用高斯混合模型(GMM)的参数估计实践

交叉熵优化高斯混合模型

(4)以下是测试数据生成函数,为demo1.m所调用:

function [data, mu, var, weight] = CreateSample(M, dim, N)

% 生成实验样本集,由M组正态分布的数据构成

% % GMM模型的原理就是仅根据数据估计参数:每组正态分布的均值、方差,

% 以及每个正态分布函数在GMM的权重alpha。

% 在本函数中,这些参数均为随机生成,

%

% 输入

%   M    : 高斯函数个数

%   dim  : 数据维数

%   N    : 数据总个数

% 返回值

%   data : dim-by-N, 每列为一个数据

%   miu  : dim-by-M, 每组样本的均值,由本函数随机生成

%   var  : 1-by-M, 均方差,由本函数随机生成

%   weight: 1-by-M, 每组的权值,由本函数随机生成

% ----------------------------------------------------

%

% 随机生成不同组的方差、均值及权值

weight = rand(1,M);

weight = weight / norm(weight, 1); % 归一化,保证总合为1

var = double(mod(int16(rand(1,M)*100),10) + 1);  % 均方差,取1~10之间,采用对角矩阵

mu = double(round(randn(dim,M)*100));            % 均值,可以有负数



for(i = 1: M)

  if (i ~= M)

    n(i) = floor(N*weight(i));

  else

    n(i) = N - sum(n);

  end

end



% 以标准高斯分布生成样本值,并平移到各组相应均值和方差

start = 0;

for (i=1:M)

  X = randn(dim, n(i));

  X = X.* var(i) + repmat(mu(:,i),1,n(i));

  data(:,(start+1):start+n(i)) = X;

  start = start + n(i);

end

save('d:\data.mat', 'data');

  

出处:http://wolfsky2002.blog.163.com/blog/static/10343152010112610221540/

标签:dim,高斯,GMM,Data,模型,weight,Mu,Sigma
From: https://www.cnblogs.com/bbhhh/p/17822514.html

相关文章

  • 亚马逊云科技如何完善自动机器人及大语言模型的问答回复准确度
     概述 客户联络中心在现代是构成一个完整企业的重要组成部分,作为企业与顾客的连接纽带,在销售、服务支持以及提升顾客满意度方面发挥着至关重要的作用。使用亚马逊云科技AmazonConnect出海企业可以快速搭建自己的全球客服联络中心。当前客服联络中心也面临诸多的挑战,如长时间的电......
  • 重磅!百度知识增强大语言模型关键技术荣获“2023世界互联网大会领先科技奖”
    11月8日,2023年世界互联网大会乌镇峰会正式开幕,今年是乌镇峰会举办的第十年,本次峰会的主题为“建设包容、普惠、有韧性的数字世界——携手构建网络空间命运共同体”。百度知识增强大语言模型关键技术荣获“世界互联网大会领先科技奖”,百度首席技术官、深度学习技术及应用国家工程研......
  • 大模型训练,为OCR应用提升性能
    一、介绍PaddleOCR是一个基于深度学习的光学字符识别(OCR)工具,它可以帮助我们实现图像中文字的自动识别。随着深度学习技术的不断发展,PaddleOCR在文字识别领域的性能得到了广泛认可。本文将重点介绍PaddleOCR文字识别模型训练的关键步骤和注意事项。二、数据准备训练PaddleOCR文字识......
  • 大模型训练中的同步与异步模式
    在深度学习领域,GPU(图形处理器)因其高效的并行计算能力而成为训练深度神经网络的常用硬件。当我们在一个GPU上训练模型时,我们通常会使用一种称为“数据并行”(DataParallelism)的技术,将数据集分成多个小块,并在多个GPU上并行处理。然而,当涉及到多个GPU的训练时,存在两种主要模式:同步模式......
  • 浅析三维模型重建的地面控制点精度常见的几个问题及解决方法
    浅析三维模型重建的地面控制点精度常见的几个问题及解决方法 在倾斜摄影三维模型重建过程中,地面控制点的精度是影响模型几何精度的关键因素之一。以下是常见的问题及相应的解决方法:1、问题:地面控制点坐标测量误差较大。解决方法:确保使用高精度的测量仪器进行地面控制点的测......
  • R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析消费者价
    全文链接:http://tecdat.cn/?p=31108原文出处:拓端数据部落公众号作为衡量通货膨胀的基本指标,消费者价格指数CPI和生产者价格指数PPI的作用关系与传导机制一直是宏观经济研究的核心问题。对此问题的研究显然具有重要的学术价值与现实意义:当PPI先行地引导着CPI的变动,则意味着上游......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅银行数据......
  • 高斯数据库HCNA之SQL语法入门
    一、SQL语句概述1、SQL语句介绍维基百科的定义:SQL(StructuredQueryLanguage,结构性查询语句)是一种特定目的编程语言,用于管理关系数据库管理系统,或在关系流数据管理系统中进行流处理SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操作语言SQL的范围包括数据插入、......
  • 分支模型介绍
    怎么管理分支是每个研发团队都会比较关心的问题,好的管理模式可以帮助我们提高效率减少问题,相反如果分支模型和业务不太匹配,那么可能给大家带来的将是无尽的伤痛。下面介绍下几个比较出名的分支模型,我们可以选择直接按照某个模型实施,也可以在其上进行适当的调整来更好的匹配我们的......
  • JVM内存模型
    JVM内存模型JVM-就是Java虚拟机主要由ClassLoader(类加载器),RuntimeDataArea(运行时数据区,内存分区),ExecutionEngine(执行引擎),NativeInterface(本地库接口)组成JVM屏蔽了平台,使Java只需要生成在JVM上运行的字节码文件,就可以实现多平台。JVM的执行过程Java文件通过javac编译为cla......