MATLAB⽤“fitgmdist”函数拟合⾼斯混合模型(⼀维数据)MATLAB⽤“fitgmdist”函数拟合⾼斯混合模型(⼀维数据)
在中介绍过"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);
正则化损伤识别matlabplot(data,YY,'r.')
3. 结果
4. 参考
[1]
[2]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论