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聚類算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM