我有一个由矩阵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的群集。
你能帮帮我吗?
提前致谢。
答案 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;
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
的第二个输出会返回每个群集的质心坐标。
随机新点:
%// 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-');