自組織地圖
自組織地圖(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 進行聚類,但我知道它也可用於減少預測變量的數量。
謝謝
菲利斯