2009-11-06 183 views
9

我试图根据身体各部分之间的角度对一些图像进行聚类。MATLAB:自组织映射(SOM)聚类所需的帮助

从每个图像提取的特征是:

angle1 : torso - torso 
angle2 : torso - upper left arm 
.. 
angle10: torso - lower right foot 

因此输入数据是大小1057x10的矩阵,其中1057所代表的图像的数量,和10只表示具有躯干的身体部分的角度。 类似地,testSet是821x10矩阵。

我希望输入数据中的所有行都能与88个集群聚类。 然后,我将使用这些群集来查找TestData落入哪些群集?

在以前的工作中,我使用了非常简单的K-Means clustering。我们只是要求K-Means将数据聚类成88个簇。并实现另一种计算测试数据中每行与每个集群中心之间距离的方法,然后选取最小值。这是相应输入数据行的集群。

我有两个问题:

(1) 是否有可能做到这一点使用SOM在MATLAB? AFAIK SOM用于视觉聚类。但是我需要知道每个集群的实际类别,以便稍后可以通过计算它属于哪个集群来标记测试数据。

(2)您有更好的解决方案吗?

+1

为什么你想要的是88簇?什么是SOM?你的问题是什么?它是从图像中找出身体各部分之间的角度,还是它是聚类算法? – 2009-11-06 18:14:34

回答

16

Self-Organizing Map (SOM)是一种聚类方法,被认为是Artificial Neural Network (ANN)的无监督变化。它采用竞争学习技术对网络进行训练(他们之间的节点竞相展示最强激活一个给定的数据)

www.lohninger.com/helpcsuite/kohonen_network_-_background_information.htm

你可以认为SOM的,就好像它是由相互连接的节点的网格(正方形,六边形,..),其中每个节点是权重的N-dim矢量(与我们想要聚类的数据点具有相同的尺寸大小)。

这个想法很简单;给定一个向量作为SOM的输入,我们发现节点对它更接近,然后更新它的权重和相邻节点的权重,以便它们接近输入向量(因此名称自组织)。对所有输入数据重复此过程。

plotsompos

形成的簇被隐式地通过所述节点如何组织起来,形成一组具有类似的权重的节点定义。他们可以很容易地看到。

plotsomnd

SOM是类似于K-Means algorithm,但不同之处在于一个方式,我们不征收固定的聚类数量,而不是我们指定它,我们希望在网格节点的数量和形状适应我们的数据。

基本上,当你有一个训练SOM,并且要一个新的测试输入向量进行分类,只需将其分配到最近的(距离作为相似性度量)在网格节点(最佳匹配单元 BMU),并作为预测给出属于该BMU节点的[多数]类别的向量。

plotsomhits

对于MATLAB,你可以找到许多实现SOM工具箱: