我正在使用MATLAB中的K-means进行聚类。如您所知,用法如下:
[IDX,C] = kmeans(X,k) 其中IDX给出了X中每个数据点的簇号,C给出了每个簇的质心。我需要获取最接近该质点的索引(实际数据集X中的行号)。有谁知道我该怎么做?谢谢
回答:
@Dima提到的“暴力方法”如下
%# loop through all clusters for iCluster = 1:max(IDX) %# find the points that are part of the current cluster currentPointIdx = find(IDX==iCluster); %# find the index (among points in the cluster) %# of the point that has the smallest Euclidean distance from the centroid %# bsxfun subtracts coordinates, then you sum the squares of %# the distance vectors, then you take the minimum [~,minIdx] = min(sum(bsxfun(@minus,X(currentPointIdx,:),C(iCluster,:)).^2,2)); %# store the index into X (among all the points) closestIdx(iCluster) = currentPointIdx(minIdx); end 要获取最接近聚类中心k的点的坐标,请使用
X(closestIdx(k),:)
更多&回答...