- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试根据 body 部位之间的角度对一些图像进行聚类。
从每张图片中提取的特征是:
angle1 : torso - torso
angle2 : torso - upper left arm
..
angle10: torso - lower right foot
因此输入数据是一个大小为 1057x10 的矩阵,其中 1057 代表图像的数量,10 代表 body 部位与躯干的角度。类似地,测试集是 821x10 矩阵。
我希望输入数据中的所有行都聚类成 88 个簇。那我就用这些簇来找出TestData属于哪些簇呢?
在之前的工作中,我使用了 K-Means clustering这非常简单。我们只是让 K-Means 将数据聚类到 88 个簇中。并实现另一种方法,计算测试数据中每一行与每个簇中心之间的距离,然后选择最小值。这是对应输入数据行的簇。
我有两个问题:
是否可以使用 SOM 来做到这一点?在 MATLAB 中?AFAIK SOM 用于视觉聚类。但我需要知道每个聚类的实际类别,以便稍后通过计算它属于哪个聚类来标记我的测试数据。
你有更好的解决方案吗?
最佳答案
Self-Organizing Map (SOM)是一种聚类方法,被视为 Artificial Neural Network (ANN) 的无监督变体.它使用竞争性学习技术来训练网络(节点之间相互竞争以显示对给定数据的最强激活)
您可以将 SOM 视为由互连节点(方形、六边形、..)组成的网格,其中每个节点都是一个 N 维权重向量(与我们想要的数据点的维度大小相同)集群)。
这个想法很简单;给定一个向量作为 SOM 的输入,我们找到 closet 到它的节点,然后更新它的权重和相邻节点的权重,使它们接近输入向量的权重(因此称为自组织).对所有输入数据重复此过程。
形成的集群由节点如何组织自身并形成一组具有相似权重的节点来隐式定义。它们很容易在视觉上看到。
SOM 在某种程度上类似于 K-Means algorithm但不同之处在于我们不强加固定数量的集群,而是指定我们希望它适应我们的数据的网格中节点的数量和形状。
基本上,当您拥有经过训练的 SOM 并且想要对新的测试输入向量进行分类时,您只需将其分配给网格上最近的(距离作为相似性度量)节点(最佳匹配单元 BMU),并将属于该 BMU 节点的向量的 [majority] 类作为预测给出。
对于 MATLAB,您可以找到许多实现 SOM 的工具箱:
nctool
聚类工具)。关于MATLAB:自组织映射 (SOM) 聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686567/
我是一名优秀的程序员,十分优秀!