Matlab 组合循环中的k-均值聚类结果

Matlab 组合循环中的k-均值聚类结果,matlab,cluster-computing,Matlab,Cluster Computing,我有一个kmeans集群,它必须将数据分成两个集群。此过程在循环中继续,直到达到某个条件。所以,最后我可能会得到20个集群。我这样做是因为我不想分配特定数量的集群。所以它必须继续分成两部分 我想知道如何在Matlab中实现它?我正在使用循环,但问题是在合并数据后,我必须更改集群编号。 是否有任何功能可以自行完成,而不是我分配新的群集号 以下示例可以是一种方法。可能还有其他方法。只要给出集群组合的结果就可以了。例如:*第一个循环:1 2 1 第二个循环:(它将采取第一个集群,并将其分为2组,然后将

我有一个kmeans集群,它必须将数据分成两个集群。此过程在循环中继续,直到达到某个条件。所以,最后我可能会得到20个集群。我这样做是因为我不想分配特定数量的集群。所以它必须继续分成两部分

我想知道如何在Matlab中实现它?我正在使用循环,但问题是在合并数据后,我必须更改集群编号。 是否有任何功能可以自行完成,而不是我分配新的群集号

以下示例可以是一种方法。可能还有其他方法。只要给出集群组合的结果就可以了。例如:*第一个循环:1 2 1

第二个循环:(它将采取第一个集群,并将其分为2组,然后将其与以前的结果相结合)

[1 1]在群集进入2集之后=>[1 2 1]=>与上一个循环[1 3 1]合并(它选择3,因为我们已经有群集2)

它将再次使用(子集群的)第一个集群:

[1 1]在群集=>[1 2]=>与上一个循环合并[1 3 4] 这里有一个例子:

我的代码:

[IDX,C,SUMD] = SpectralClustering(G, k); % k is two
.
.
.
if Wav > w % Wav is average weight of cluster

            Gi = subgraph(G, IDX==1); % IDX is cluster number 
            Ctemp = union(Ctemp, SpectralClustering(Gi, k)); % k is 2
 else
            Ctemp = union(Ctemp, IDX);
 end

C = Ctemp;

正如我在评论中提到的,如果集群标签是从父集群派生的,那么它们将是唯一的:

function [clusters] =  clusterExample(data, parentCluster)

% On each level, cluster data into two clusters based on value relative to
% quantiles (AKA the median, when k = 2)

% Stop clustering if the ratio of the standard deviation of the cluster
% to the mean of the cluster is  <= .1 
% This is an arbitary stopping rule for this example
k = 2;

cutOffPoint = quantile(data, (1 / k));

clusters = nan(1, length(data));
clusters(data <= cutOffPoint) = (parentCluster * 10) + 1;
clusters(data > cutOffPoint) =  (parentCluster * 10) + 2;
clusterLabels = unique(clusters);
for g = clusterLabels
   clusterIdx = clusters == g;
   clusterMean = mean(data(clusterIdx));
   clusterSD = std(data(clusterIdx));
   if (clusterSD / clusterMean) > .1
       clusters(clusterIdx) = clusterExample(data(clusterIdx), g);
   end
end

产生的每个聚类的SD都在聚类平均值的10%以内(本例中使用了任意停止规则)。

如果您发布了一条消息,而不是我们仅仅猜测您所做的事情,这将非常容易。@Biker,我补充道,现在好了吗?你是在问如何给每个集群编号吗?如果你给集群的每个“层”指定唯一的组名,你就不必跟踪其他分支中已经使用了哪些整数作为标签。例如,第一层为1:2,第二层为11:12,第三层为111:112,分支为11,等等@DMR,谢谢,但我不知道我有多少。因为有一个条件需要检查。
data = rand(1,100);
startCluster = 0;
clusters = clusterExample(data, startCluster);