在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

有什么想法吗?

【问题讨论】:

这是伪代码吗?要不然是啥?什么是CTESTtestclust 距离函数,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集群的主要内容,如果未能解决你的问题,请参考以下文章

在内核k-means(R中的kernlab包)中将新数据点分配给集群?

在 MATLAB 中将数据拆分为训练/测试数据集?

关于k-means聚类算法的matlab实现

图像识别基于k-means聚类的手势识别matlab 源码

图像识别基于k-means聚类的手势识别matlab 源码

数学建模MATLAB应用实战系列(106)-机器学习算法:K-means聚类(附MATLAB代码)