我正在應用二等分 k 均值演算法來對每個天線波束的用戶進行聚類。
將包含所有用戶的集群分成兩部分后會出現問題。事實上,此時我必須去選擇最高的集群,wcss但我不知道該怎么做。
我曾考慮過利用sumd和idx值。
function [Clustering, SYSTEM] = CLUST_Bkmeans(kk, SYSTEM, USERS, ChannelMatrix)
Clustering = cell(SYSTEM.Nbeams,1);
UserPool = (1:SYSTEM.Nusers)';
Channel_real = real(ChannelMatrix);
Channel_imag = imag(ChannelMatrix);
avg_clusterSize = kk;
for ii=1:SYSTEM.Nbeams
Users = UserPool(USERS.BeamIndex==ii);
%Matrix of channel coefficient built as [real part | imaginary part]
Users_real = Channel_real(Users,:);
Users_imag = Channel_imag(Users,:);
X = [Users_real Users_imag];
SYSTEM.Nclusters(ii) = ceil(size(Users,1)/avg_clusterSize);
Clustering{ii} = cell(SYSTEM.Nclusters(ii),1);
%Bisecting k-means clustering of X
[idx,C,sumd] = kmeans(X,2); %first division in two cluster
for pp = 3:SYSTEM.Ncluster(ii)
%kmeans applied to cluster with higher WCSS
end
% silhouette(X,idx)
% xlabel('Silhouette Value')
% ylabel('Cluster')
for jj = 1:SYSTEM.Nclusters(ii)
Clustering{ii}{jj,1} = Users(idx==jj)';
end
end
end
uj5u.com熱心網友回復:
正如您已經注意到kmeans的,回傳集群索引和每個集群內的平方距離之和(以及每個集群的質心,但在這種情況下我們不需要它)。
找到具有最高 WCSS 的集群很容易。sumd是 akx 1 向量,其中 k 是簇的數量。只有兩個集群,您可以輕松選擇哪個更大,但如果您有更多集群,您可以使用I(index) 回傳值 from max:
[~, max_wcss_cluster] = max(sumd); % index is the second return value
在某些時候,您可能需要知道X特定集群中的哪些觀測值。要列出 的那些行X,您將使用idx回傳的向量kmeans和邏輯索引:
cluster_number = 2; % find all observations in cluster 2
my_cluster = X(idx==cluster_number, :);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/489874.html
