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