K-means在Matlab中

时间:2016-01-21 10:37:25

标签: matlab cluster-analysis k-means

我有一个由矩阵A =(100x15)表示的知识库(KB),我必须将此KB聚类到5个集群中。

我在Matlab中使用了代码:

idx=kmeans(A,5)

我为矩阵A的每一行获得了一个带有簇索引的结果idx。

现在我有一个新的向量B =(1x15)一种新的条目,我必须从先前的聚类开始聚类这个新的向量。

当我将新条目B添加到KB时,我回想起C的功能(由A和B组成)

idx1=kmeans(C,5)

我获得了一个新的idx1,其结果与idx不同。

我的范围是了解B群集关于集群获取KB的群集。

你能帮帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

听起来您想要将新数据点与已识别的群集进行比较。我不确定这将始终给出您期望的结果,但您可以计算到每个群集的欧几里德距离质心并选择最小的。

示例

原始数据,构造成具有四个集群:

%// original data
A=[randn(25,1),   randn(25,1);
   randn(25,1)+5, randn(25,1);
   randn(25,1)+5, randn(25,1)+5;
   randn(25,1),   randn(25,1)+5];
plot(A(:,1),A(:,2),'k.');
hold on;

100 random points

K-means聚类,K = 4个聚类:

K=4;
[idx,centroids]=kmeans(A,K);
for n=1:K
    plot(A(idx==n,1),A(idx==n,2),'o');
end

Original points clustered

请注意,kmeans的第二个输出会返回每个群集的质心坐标。

随机新点:

%// new point:
B=2*randn(1,2);
plot(B(1),B(2),'rx');

新点与所有质心之间的距离:

dist2cent = sqrt(sum((repmat(B,[K,1])-centroids).^2,2));

最小距离指数:

[~,closest] = min(dist2cent);

plot([centroids(closest,1), B(1)],...
     [centroids(closest,2), B(2)],...
     'r-');

Random new point clustered by closest centroid