📄 mlgauss.m
字号:
function model=mlgauss(data,cov_type)
% MLGAUSS绰 弥快眠沥栏肺 林绢柳 单捞磐俊 措茄 啊快矫救 盒器甫 拌魂茄促.
%
% 荤侩过:
% model=mlgauss(data)
% model=mlgauss(data,cov_type)
%
% 汲疙:
% 林绢柳 单捞磐俊 措茄 啊快矫救 盒器狼 弥快眠沥阑 拌魂茄促.
% ML 眠沥篮 促澜 荐侥阑 仟绰 巴苞 鞍促:
% (mu^*,C^*)=arg max sum Alpha(x)*log( N(x,mu,C) )
% mu,C x
%
% 咯扁辑 钎夯 X绰 i.i.d. 扼绊 啊沥茄促.
%
% Alpha(x)绰 钎夯俊辑 钎夯 x狼 惯积阑 搬沥茄促. (荤傈 犬伏)
% 叼弃飘绰 葛电 单捞磐俊 措窍咯 1捞促. 捞矾茄 单捞磐 啊吝篮 抗甫 甸绢
% 舅绊府硫俊辑 肯傈茄 快档 窃荐甫 眠沥窍咯 拌魂且 锭 蜡侩茄促.
%
% 涝仿 牢荐 单捞磐绰 促澜吝 窍唱啊 瞪 荐 乐促.
% 1) 钎夯 X甫 器窃窍绰 青纺 [dim x num_data]
% 2) 基敲 X [dim x num_data],扼骇 y [1 x num_data]
% 弊府绊 啊吝蔼 Alpha [1 x num_data]甫 器窃窍绰 备炼眉
% 父距, 扼骇捞 林绢柳促搁 ML 眠沥篮 漂喊洒 阿 努贰胶俊 措窍咯 荐青等促.
%
% 眠沥登绰 傍盒魂 青纺狼 屈怕绰 促澜苞 鞍篮 巴捞 瞪 荐 乐促:
% 1 ... 肯傈 傍盒魂 青纺(Full covariance matrix)
% 2 ... 措阿 傍盒魂 青纺(Diagonal covariance matrix)
% 3 ... Cov. matrix c*eye(dim,dim). eye(dim,dim): 亲殿青纺
%
% 涝仿 :
% data [dim x num_data] Data sample.
% 趣篮
% data.X [dim x num_data] 单捞磐 基敲.
% data.y [1 x num_data] 扼骇 (default ones(1,num_data)).
% data.Alpha [1 x num_data] 单捞磐狼 啊吝蔼 (default ones(1,num_data)).
%
% cov_type [int] 傍盒魂 青纺狼 屈怕 (defualt 1).
%
% 免仿 :
% model.Mu [dim x num_classes] 眠沥等 乞闭 氦磐.
% model.C [dim x dim x num_classes] 眠沥等 傍盒魂 青纺.
%
% Example:
% help mmgauss;
%
% See also MMGAUSS.
%
% -- Processing of input arguments -----------------------------------
data=c2s(data);
if ~isstruct(data),
data.X = data;
end
[dim, num_data] = size( data.X );
if ~isfield(data,'y'), data.y = ones(1,num_data); end
if ~isfield(data,'Alpha'), data.Alpha = ones(1,num_data); end
if nargin < 2, cov_type=1; end
% -- compute ML estimated for all classes ------
num_classes=max(data.y);
model.Mu = zeros(dim,num_classes);
model.C = zeros(dim,dim,num_classes);
for i=1:num_classes,
inx = find(data.y==i);
Alpha=data.Alpha(inx); Alpha=Alpha(:);
sum_Alpha = sum(Alpha);
X = data.X(:,inx);
num_data = size(X,2);
%------------------------------
model.Mu(:,i) = X*Alpha/sum_Alpha;
XC=X-repmat( model.Mu(:,i),1,num_data);
if cov_type==1,
% asssumes correlated features
model.C(:,:,i) = (XC.*(repmat(Alpha',dim,1)))*XC'/(sum_Alpha);
elseif cov_type==2,
% asssumes uncorrelated features -> diagonal cov. matrix
model.C(:,:,i) = diag(sum((XC.*repmat(Alpha',dim,1).*XC)')/(sum_Alpha));
else
% asssumes isotropic cov. -> diagonal cov. = c*eye()
model.C(:,:,i) = eye(dim,dim)*...
sum(sum((XC.*repmat(Alpha',dim,1).*XC)'))/((sum_Alpha)*dim);
end
end
model.cov_type = cov_type;
model.y = [1:num_classes];
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -