首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中的K-均值

Matlab中的K-均值
EN

Stack Overflow用户
提问于 2016-01-21 10:37:25
回答 1查看 1.1K关注 0票数 1

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

我使用了Matlab中的代码:

代码语言:javascript
复制
idx=kmeans(A,5)

得到了矩阵A中每一行的聚类指数idx的结果。

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

当我将新条目B添加到KB中时,我回忆起用C(由A和B组成)的函数

代码语言:javascript
复制
idx1=kmeans(C,5)

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

我的范围是了解B的集群相对于集群所获得的对KB的集群。

你能帮我一下吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-21 15:26:57

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

示例

原始数据,构造成四组:

代码语言:javascript
复制
%// 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-均值聚类:

代码语言:javascript
复制
K=4;
[idx,centroids]=kmeans(A,K);
for n=1:K
    plot(A(idx==n,1),A(idx==n,2),'o');
end

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

随机新点:

代码语言:javascript
复制
%// new point:
B=2*randn(1,2);
plot(B(1),B(2),'rx');

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

代码语言:javascript
复制
dist2cent = sqrt(sum((repmat(B,[K,1])-centroids).^2,2));

最小距离指数:

代码语言:javascript
复制
[~,closest] = min(dist2cent);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34921365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档