自组织地图
自组织地图(SOM) 是一种无监督的机器学习形式,可用于对具有许多特征的数据进行聚类。 SOM 不仅对您的数据进行聚类,而且还将其“映射”到较低维度(通常是二维),以便您可以更轻松地可视化集群。
传统上,SOM 被解释为人工神经网络的一种形式,其中特征是输入,集群是输出。 但几乎所有关于如何训练和构建 SOM 的内容都是不同的来自传统的前馈神经网络,尽管其中一些术语是相同的。 因此,如果您从一个空白的神经网络开始,您仍然可以遵循这一点。 
为了让事情变得更容易,我将预先定义一些术语及其含义:
节点. 我们称它们为节点是因为我们借用了神经网络的术语,但 SOM 中的节点代表了我们每个集群的中心。 您拥有的节点数就是您将拥有的集群数。
重量. 我们还从神经网络中借用了权重这个术语,但是 SOM 中的权重是不同的。 权重表示节点的空间位置(就像在 K-Means 中我们有集群中心一样)。 权重将与我们的数据向量具有相同的维度。
邻里. 节点的邻域是与它足够接近的所有节点。 当我们训练 SOM 时,“足够”接近的程度会发生变化。
学习率. 学习率反映了我们将在每次迭代中更改节点权重的程度。 大的学习率意味着我们的权重可能会剧烈波动。 非常小的学习率意味着我们的权重不会与其初始值发生太大变化。
格子/地图。 我们地图中节点的排列/网格。

增量学习 SOM
为了让您更好地了解 SOM 的功能,我们将首先查看经过训练的 SOM迭代地,这将让我们一一看到 SOM 创建的每一步。 这不是那种方法JMP实现。 为了提高计算效率,JMP 使用批处理方法,我们将在下面看到。
概述. 迭代训练 SOM 有五个主要步骤:
- 初始化SOM 节点的权重。 这可以随机完成,也可以选择特定的起始权重,以便它们有效地分布在所有可能的输入值中(JMP 就是这样做的)。
- 选择一个随机数据点从您的数据集中。
- 计算数据点离哪个Node最近. 我们可以通过计算我们的数据点和每个节点权重之间的距离来做到这一点。 距离最近的节点称为最佳匹配单元( BMU简称)。
- 一旦我们知道了 BMU,我们计算哪些节点在 BMU 的附近. 换句话说,地图中哪些节点与 BMU 足够接近。
- 我们更新权重BMU 及其所有邻居,以便它们的权重与我们的数据点更相似。 从本质上讲,我们正在使我们的集群更适合我们的数据。 距离 BMU 较远的节点比靠近 BMU 的节点(以及 BMU 本身)的更改要少。
我们重复步骤 2-5,直到达到最大迭代次数,或者我们的节点权重停止变化。
深入. 让我们更深入地了解步骤 3-5,以更直观地了解发生了什么。
在我们开始之前,不要让数学阻碍你阅读本节. 我将向您展示公式,但是如果您不了解所有数学知识也没关系,只要您知道背后的一般思想即可为什么我们使用这个数学。
寻找 BMU . 有很多方法可以计算两个 n 维向量之间的距离;通常使用 SOM,您可能会看到诸如欧几里得距离或余弦距离之类的度量。


在这种情况下,我们将使用欧几里得距离。 为了计算 BMU,我们计算了我们选择的数据向量和我们节点的每个权重向量之间的欧几里得距离。 BMU 的距离最小。
计算邻域. 更新多个节点/集群中心将 SOM 与 K-Means 等更简单的方法分开。 我们不仅将 BMU 的权重更改为更接近数据向量,而且我们还将更改我们认为足够接近 BMU 的节点。
如果节点在 BMU 的某个半径范围内,则认为它们在 BMU 的附近。 换句话说,如果一个节点在一个有半径的圆内, r ,以 BMU 为中心,它被认为是一个邻居。
首先,我们想使用一个大的邻域并更改许多节点。 但是,随着时间的推移,我们希望我们的社区变得更小,以便我们可以对我们的 SOM 进行更多“微调”。 想一想,在打磨某些东西时,我们经常从大号砂纸开始,然后逐步使用更细的砂纸。
在数学上,我们可以通过使用邻域半径公式来实现这一点, r ,这取决于时间并且随着我们继续训练我们的 SOM 变得更小。 最终,邻域将变得如此之小,它只会包含 BMU。
更新节点权重. 一旦我们知道我们想要更新哪些节点权重,我们就会计算改变它们的程度。 最靠近 BMU 的节点的权重将改变*最大*,而位于我们邻域边缘的节点将几乎没有变化。 但是所有节点的权重都会被拉近当前的数据向量。
我们使用这个公式这样做(别担心,我稍后会带你了解不同的部分):

W 代表节点权重。 W(t+1) 是我们的更新权重,W(t) 是我们的当前的重量。 如果我们稍微简化一下右侧的后半部分,我们可以看到新的更新权重是我们的旧权重乘以一些调整.

(V(t) - W(t)) 是我们的数据向量和当前节点权重之间的距离。 这表明我们的调整将取决于数据向量和节点之间的距离。

L(t) 是学习率。 就像我们的邻域函数(实际上完全像我们的邻域半径函数......),我们的学习率从一个相对较大的值开始, ,并且随着时间的推移变得更小(指数部分对我们来说是这样的。)

当我们第一次开始训练我们的 SOM 时,我们的学习率很高,但是随着时间的推移,我们希望我们的节点权重更加稳定,所以我们降低了我们的学习率。

不仅学习率下降时间,但我们的节点权重的变化也随着节点的增加而减少更远来自我们的 BMU。
是一个高斯核,它在数学上表示这种衰减。 (距离是我们正在更改的节点与地图中 BMU 之间的距离。)

对于给定的半径 r(t),高斯核将是这个形状:
当我们正在更新的节点和BMU之间的距离很大时,会很小。 相反,当我们要更新的节点靠近 BMU 时,会更大。
我们终于解构了整个公式!

回顾:
W(t) 是节点的当前权重。

导致远离 BMU 的节点发生变化较少的比靠近 BMU(和 BMU 本身)的节点。
L(t) 是我们的衰减学习率。 随着时间的推移,我们正在“微调”并做出比训练开始时更小的更改。
V(t) - W(t) 是数据向量和节点权重(均为 n 维)之间的距离。 距离越大,变化越多。
如果你已经做到了这一步,你应该休息一下! 我们已经回顾了 SOM 的迭代训练方式。 这向我们展示了使 SOM 独一无二的一般想法:即我们更新多个节点权重的方式取决于时间、与 BMU 的距离以及数据向量与节点权重之间的距离。
如果您曾经在其他地方读过 SOM,人们会感到兴奋的是 SOM“保留拓扑”,这只是一种奇特的说法,即在多维空间中靠近的节点将在我们的 SOM 中靠近一旦我们训练了网格。 这有助于我们使用 SOM 网格可视化我们的数据,因为在二维中绘制事物很容易……但在多维中则要困难得多。
了解迭代 SOM 训练有助于理解这些属性,但计算效率不高。 这就是 JMP 使用批训练方法来实际进行 SOM 计算。
批量学习 SOM
该算法是 JMP 网站中描述的算法。 我们可以一次使用所有数据向量,而不是一次训练我们的 SOM 一个数据向量!
以下是步骤:
- 初始化SOM 节点的权重(这在迭代方法中是相同的)
- 一次全部,计算 BMU对于我们训练集中的每个数据向量。
- 计算新节点权重通过使用这个公式:

是 BMU 为节点 j 的数据向量的数量,
是所有这些数据向量的平均值,并且是邻域函数,它决定哪些节点被改变,改变多少。 它类似于
在我们的增量训练算法中。
4. 重复 2 和 3,直到我们的 SOM 收敛。
当它同时发生时,数学可能更难理解,但是批量学习算法的基本前提是,而不是更新我们的节点来响应一数据向量,我们更新它们以响应全部一次处理数据向量(有点像 K-Means……)。 谢天谢地,这种方法通常会加快 JMP 训练 SOM 的时间。
在 JMP 中
在 JMP 中,SOM 选项位于 K-Means 菜单中。 让我们使用 SOM 对来自不同美国餐厅的一些快餐汉堡包进行聚类。 去分析 > 聚类 > K 均值. 将弹出 K-Means 聚类窗口。 单击并拖动要使用的所有变量到是框并单击好的.
在控制面板中,有一个方法下拉菜单。 选择自组织图. 从这里,您可以选择网格的大小。 我们将做 2x2,这给了我们四个以矩形排列的节点。 点击去.
我们的输出会自动向我们展示四个集群中每一个集群的平均值。 我们可以通过转到 SOM Grid 菜单下的红色三角形并选择“保存集群”。 在同一个菜单中,我们还可以选择“双标图”以查看我们 SOM 的可视化表示。 JMP 将按前两个主成分绘制节点/集群。 在这里,看起来集群 1(在顶部)与其他三个相距甚远。 我们可以稍后在 Graph Builder 中查看。

即使通过检查我们的一些变量,我们也可以开始了解为什么集群 1 如此不同。 它绝对没有蛋白质。 如果我们查看我们的数据集,我们可以看到集群 1 中的项目往往是甜点。 
另一方面,Cluster 2 的卡路里、蛋白质和脂肪含量很高! 如果您想在吃完之后长时间保持清醒,您可能需要注意这些物品。
结论
自组织地图是一个有用的工具,可以通过构建一个地图来聚类您的数据,该地图采用潜在的高维数据并将其映射到更易于管理的 2D 形式。 在JMP , SOM 与 K-Means 一样容易实现(即使它背后的数学要复杂得多),那么尝试它们会失去什么?
自组织地图(SOM) 是一种无监督的机器学习形式,可用于对具有许多特征的数据进行聚类。 SOM 不仅对您的数据进行聚类,而且还将其“映射”到较低维度(通常是二维),以便您可以更轻松地可视化集群。
回复:自组织地图嗨切尔西
您有关于如何在 JMP 中使用 SOM 进行降维的示例吗?
我通常使用 SOM 进行聚类,但我知道它也可用于减少预测变量的数量。
谢谢
菲利斯