

Matlab 代码:
% GMM code
function varargout = gmm(X, K_or_centroids)
% input X:N-by-D data matrix
% input K_or_centroids: K-by-D centroids
% 阈值
threshold = 1e-15;
% 读取数据维度
[N, D] = size(X);
% 判断输入质心是否为标量
if isscalar(K_or_centroids)
% 是标量,随机选取K个质心
K = K_or_centroids;
rnpm = randperm(N); % 打乱的N个序列
centroids = X(rnpm(:K), :);
else % 矩阵,给出每一类的初始化
K = size(K_or_centroids, );
centroids = K_or_centroids;
end
% 定义模型初值
[pMiu pPi pSigma] = init_params();
Lprev = -inf;
while true
% E-step,估算出概率值
% Px: N-by-K
Px = calc_prob();
% pGamma新的值,样本点所占的权重
% pPi:-by-K pGamma:N-by-K
pGamma = Px ./ repmat(pPi, N, );
% 对pGamma的每一行进行求和,sum(x,):每一行求和
pGamma = pGamma ./ repmat(sum(pGamma, ) , , K);
% M-step
% 每一个组件给予新的值
Nk = sum(pGamma,);

该博客详细介绍了如何使用Python实现高斯混合模型(GMM)进行数据聚类,包括GMM代码的实现过程,从初始化质心、E-step、M-step到判断收敛的完整流程,并提供了测试代码示例。通过对Matlab代码的转化,读者可以理解GMM聚类的工作原理并在Python环境中应用。
最低0.47元/天 解锁文章
2505

被折叠的 条评论
为什么被折叠?



