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-');
我有一个由矩阵 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-');