Matlab 中的 K 均值

K-means in Matlab

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

我用的是Matlab中的代码:

idx=kmeans(A,5)

我得到了一个结果idx,其中包含矩阵A每一行的聚类索引。

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

当我在知识库中添加新条目B并用C(由A和B组成)调用函数时

idx1=kmeans(C,5)

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

我的范围是关于聚类KB得到的簇了解B的簇。

你能帮帮我吗?

提前致谢。

听起来您想将新数据点与 already-identified 集群进行比较。我不确定这是否会 always 给出你期望的结果,但你可以只计算到每个簇的欧几里德距离 centroid 并选择最小的。

例子

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

%// 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;

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

请注意,kmeans returns 的第二个输出是每个簇的质心坐标。

随机新点:

%// 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-');