MATLAB用“fitgmdist”函數擬合高斯混合模型(一維數據) 作者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/ 在MATLAB中“fitgmdist”的用法及其GMM聚類演算法中介紹過"fitgmdist"函數的用法,這次用"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聚類演算法