在matlab中将测试数据划分为k-mean集群
Posted
技术标签:
【中文标题】在matlab中将测试数据划分为k-mean集群【英文标题】:Dividing test data into k-mean cluster in matlab 【发布时间】:2017-04-03 10:12:40 【问题描述】:我有 525 个数据,我使用 kmeans
函数将它们分成两部分。当我有一个测试数据时,我想将它相应地放入一个集群中。为此,我必须测量两个集群的测试数据和质心的距离。最短距离意味着数据在该集群上。
我该怎么做?
PS:数据有 9 个输入,这意味着每个数据由 9 个值组成。
这是我尝试过的:
for n = 1:174
for k = 1:9
testclust1(n,k) = C(1,k)-TEST(n,k)
testclust2(n,k) = C(2,k)-TEST(n,k)
end
if testclust1(1,:) <= testclust2(1,:)
%then cluster 1 else cluster 2
end
有什么想法吗?
【问题讨论】:
这是伪代码吗?要不然是啥?什么是C
、TEST
、testclust
?
距离函数,centeroid计算在哪里?
【参考方案1】:
你可以使用pdist2
:
dist_to_centers = pdist2(C, TEST);
dist_to_centers
是 2×174 矩阵,每个测试点到中心的距离。
idx_of_test_points_in_first = find(dist_to_centers(1,:)<=dist_to_centers(2,:));
idx_of_test_points_in_second = find(dist_to_centers(1,:)>dist_to_centers(2,:));
如果你想手动计算dist_to_centers
,你可以使用bsxfun:
dist_to_centers = bsxfun(@minus, permute(C,[1 3 2]), permute(TEST,[3 1 2]));
dist_to_centers = sum( dist_to_centers.^2, 3 );
【讨论】:
以上是关于在matlab中将测试数据划分为k-mean集群的主要内容,如果未能解决你的问题,请参考以下文章