【问题标题】:Hierarchical Clustering in MATLABMATLAB 中的层次聚类
【发布时间】:2018-01-13 01:39:00
【问题描述】:

我通过以下方式使用层次聚类对我的数据 X 进行了聚类:

X = [1 1 1;
     2 2 2;
     1 1 0;
     1 2 2];
Y = pdist(X);
T = linkage(Y, 'complete');
c = cluster(T,'maxclust',2);

所以,X(1,:) 和 X(3,:) 属于集群 #1,其他属于 集群 #2。

如何确定应该将新数据点(不在 X 中)分配到哪个集群?例如 [1 0 1] 属于哪个集群?

【问题讨论】:

    标签: matlab hierarchical-clustering linkage


    【解决方案1】:

    简单的解决方案是找到最近的集群质心。

    最近的质心

    x_new = [1 0 1];
    
    % Find cluster centroid
    X_c = zeros(numel(unique(c)), size(X,2));
    for cid = unique(c)'
       X_c(cid,:) = mean(X(c == cid,:)); 
    end
    
    % Find closest centroid
    [~,c_new] = min(pdist2(x_new,X_c));
    

    如果您有更多样本并且想要考虑方差,您可以计算欧几里得距离的 z 分数

    距离的 Z 分数

    x_new = [1 0 1];
    X_means = zeros(1,numel(unique(c)));
    X_stds = zeros(1,numel(unique(c)));
    X_c = zeros(numel(unique(c)), size(X,2));
    for cid = unique(c)'
       distances = pdist2(X(c == cid,:),mean(X(c == cid,:))); 
       X_means(cid) = mean(distances);
       X_stds(cid) = std(distances);
    
       X_c(cid,:) = mean(X(c == cid,:)); 
    end
    [~,c_new] = min((pdist2(x_new,X_c) - X_means)./X_stds);
    

    如果您想考虑组件方差,您可以获取组件距离的 Z 分数(我不确定此结果与上述结果有什么不同...)

    组件距离的平均 Z 分数

    x_new = [1 0 1];
    X_means = zeros(numel(unique(c)),size(X,2));
    X_stds = zeros(numel(unique(c)),size(X,2));
    X_c = zeros(numel(unique(c)), size(X,2));
    for cid = unique(c)'
       comp_distances = abs(X(c == cid,:) - repmat(mean(X(c == cid,:)),[numel(find(c==cid)),1])); 
       X_means(cid,:) = mean(comp_distances);
       X_stds(cid,:) = std(comp_distances);
    
       X_c(cid,:) = mean(X(c == cid,:)); 
    end
    [~,c_new] = min(mean(((repmat(x_new,[size(X_c,1),1])-X_c) - X_means)./X_stds,2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-08
      • 2018-10-04
      • 2014-06-28
      • 2015-04-24
      • 2015-07-22
      • 2016-08-07
      • 2015-08-12
      • 2020-06-28
      相关资源
      最近更新 更多