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