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

增量学习 SOM
为了让您更好地了解 SOM 的作用,我们将首先查看经过训练的 SOM迭代地,这将使我们一一了解 SOM 创建中的每一步。 这不是方法联合管理计划实施。 为了提高计算效率,JMP 使用以下方法训练其 SOM:批处理法,我们将在下面看到。
概述。 迭代训练 SOM 有五个主要步骤:
- 初始化SOM 节点的权重。 这可以随机完成,也可以选择特定的起始权重,以便它们有效地分布在所有可能的输入值上(JMP 就是这样做的)。
- 选择随机数据点从你的数据集中。
- 计算数据点最接近哪个Node 。 我们可以通过计算数据点和每个节点权重之间的距离来做到这一点。 最接近的节点称为最佳匹配单位(电池管理单元简称)。
- 一旦我们了解了 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节点的权重(这与迭代方法相同)
- 一次全部,计算 BMU对于我们训练集中的每个数据向量。
- 计算新的节点权重通过使用这个公式:

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

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