• 大小: 51KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: GMM  EM  2分类  

资源简介

利用EM算法实现GMM算法,文件包含GMM模型以及一个简单的2分类问题的实现,课程作业绝对可用。

资源截图

代码片段和文件信息

function varargout = gmm(X K_or_center)  
    threshold = 1e-15;
    [N D] = size(X);
    if isscalar(K_or_center)
        K = K_or_center; 
        R = randperm(N); 
        center = X(R(1:K) :);
    else
        K = size(K_or_center 1);   
        center = K_or_center;  
    end
    prev = -inf;
    [Miu Pi Sigma] = init_params();  
    while true  
        Px = prob();  
        Gamma = Px .* repmat(Pi N 1);
        Gamma = Gamma ./ repmat(sum(Gamma 2) 1 K);
        
        Nk = sum(Gamma 1); 
        Miu = diag(1./Nk) * Gamma‘ * X; 
        Pi = Nk/N;  
        for t = 1:K
            shift = X-repmat(Miu(t :) N 1);  
            Sigma(: : t) = (shift‘ * (diag(Gamma(: t)) * shift)) / Nk(t);  
        end  
        L = sum(log(Px*Pi‘));
        if L-prev < threshold
            break;  
        end  
        prev = L;  
    end
    model = [];  
    model.Miu = Miu;  
    model.Sigma = Sigma;  
    model.Pi = Pi;  
    varargout = {Px model};   
    
    function Px = prob()    
        Px = zeros(N K);  
        for k = 1:K  
            shift = X-repmat(Miu(k :) N 1); %X-Miu  
            inv_Sigma = inv(Sigma(: : k));  
            tmp = sum((shift*inv_Sigma) .* shift 2);  
            coef = (2*pi)^(-D/2) * sqrt(det(inv_Sigma));  
            Px(: k) = coef * exp(-0.5*tmp);  
        end  
    end 

    function [Miu Pi Sigma] = init_params()  
        Miu = center;
        Pi = zeros(1 K);
        Sigma = zeros(D D K);
   
        distmat = repmat(sum(X.*X 2) 1 K) + repmat(sum(Miu.*Miu 2)‘ N 1) - 2*X*Miu‘;  
        [~ labels] = min(distmat [] 2);
   
        for k=1:K  
            Xk = X(labels == k :);  
            Pi(k) = size(Xk 1)/N;  
            Sigma(: : k) = cov(Xk);  
        end  
    end  
   
end  


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        8575  2013-07-09 15:15  dev.txt
     文件        1861  2017-11-30 16:34  gmm.m
     文件        1501  2017-11-30 16:33  main.m
     文件         188  2017-11-21 18:29  readme.txt
     文件        5905  2013-07-09 15:46  test.txt
     文件        5553  2017-11-21 18:29  test_res.txt
     文件      102935  2013-07-09 14:37  train.txt

评论

共有 条评论