zoukankan      html  css  js  c++  java
  • MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据)

    MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据)

    作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

        在MATLAB中“fitgmdist”的用法及其GMM聚类算法中介绍过"fitgmdist"函数的用法,这次用"fitgmdist"拟合一维数据。

    1. 一维高斯混合数据的产生

    function data=generate_GMM()
    %前两列是数据,最后一列是类标签
    %数据规模
    N=300;
    %数据维度
    % dim=1;
    %%
    %混合比例
    para_pi=[0.3 0.2 0.5];
    %第一类数据
    mul=0; % 均值
    S1=1; % 协方差
    data1=mvnrnd(mul, S1, para_pi(1)*N); % 产生高斯分布数据
    %第二类数据
    mu2=4;
    S2=2;
    data2=mvnrnd(mu2,S2,para_pi(2)*N);
    %第三类数据
    mu3=-4;
    S3=1;
    data3=mvnrnd(mu3,S3,para_pi(3)*N);
    data = [data1, ones(para_pi(1)*N,1); data2, 2*ones(para_pi(2)*N,1); data3, 3*ones(para_pi(3)*N,1)];
    save data_gauss data

    2. 拟合高斯混合模型

    load data_gauss
    data=data(:,1);
    K=3;
    gmm=fitgmdist(data, K);
    % 自定义参数
    % RegularizationValue=0.001;   %正则化系数,协方差矩阵求逆
    % MaxIter=1000;   %最大迭代次数
    % TolFun=1e-8;   %终止条件
    % gmm=fitgmdist(data, K, 'RegularizationValue', RegularizationValue, 'CovarianceType', 'diagonal', 'Start', 'plus', 'Options', statset('Display', 'final', 'MaxIter', MaxIter, 'TolFun', TolFun));
    [N, D]=size(data);
    mu=gmm.mu;  %均值
    Sigma=gmm.Sigma;   %协方差矩阵
    ComponentProportion=gmm.ComponentProportion;  %混合比例
    Y=zeros(N, K);
    for k=1:K
        Y(:,k)=ComponentProportion(k).*normpdf(data, mu(k), Sigma(:,:,k));
    end
    YY=sum(Y, 2);
    plot(data,YY,'r.')
    

    3. 结果

    4. 参考

    [1] MATLAB高斯混合数据的生成

    [2] MATLAB中“fitgmdist”的用法及其GMM聚类算法

  • 相关阅读:
    uniapp 请求附近地址列表
    uniapp 图片视频上传
    城市定位
    日历签到
    uniapp拼团倒计时函数
    时间过滤器
    倒计时函数
    vuex的使用
    毛玻璃效果
    Pullword 中文分词
  • 原文地址:https://www.cnblogs.com/kailugaji/p/12158825.html
Copyright © 2011-2022 走看看