我有一个由矩阵A=(100x15)表示的知识库( KB ),我必须将这个知识库聚成5个集群。
我使用了Matlab中的代码:
idx=kmeans(A,5)得到了矩阵A中每一行的聚类指数idx的结果。
现在,我有了一个新的向量B=(1x15),一种新的条目,我必须对这个新向量进行聚类,从以前获得的聚类开始。
当我将新条目B添加到KB中时,我回忆起用C(由A和B组成)的函数
idx1=kmeans(C,5)我获得了一个新的idx1,它的所有结果都不同于idx。
我的范围是了解B的集群相对于集群所获得的对KB的集群。
你能帮我一下吗?
提前谢谢。
发布于 2016-01-21 15:26:57
听起来,您想要将新的数据点与已经识别的集群进行比较。我不确定这会给出你期望的结果,但是你可以计算出欧几里得距离到每个星系团的质心,并选择最小的。
示例
原始数据,构造成四组:
%// 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=4集群的K-均值聚类:
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-');

https://stackoverflow.com/questions/34921365
复制相似问题