
火山引擎如何接入API:從入門到實踐的技術指南
下圖顯示了相同的數據,其中每個門店的卡布奇諾和冰咖啡銷售額分別繪制在 X 軸和 Y 軸上。在這個例子中,由于數據點有限,很容易在圖表上繪制兩個自然出現的咖啡館門店集群并手動將其可視化。
然而,當涉及到數千個數據點時,需要使用聚類分析算法將數據點分成不同的聚類。
聚類分析通常有兩種主要用途:
聚類分析通常用作各種機器學習算法的預處理步驟。
分類算法對大量數據集進行聚類分析,以過濾掉屬于明顯組的數據。然后,可以對減少的、不明顯的數據點使用高級數據分類技術。隨著數據集變小,計算時間大大減少。同樣的方法可以以相反的方式使用,即使用聚類分析算法來過濾掉噪聲或異常數據。
在運行監督學習算法之前,人們可能首先對輸入數據進行聚類分析,以找出數據中的自然聚類。
聚類分析算法通常屬于以下幾類:
每種算法本身都很復雜,可能適合某些分析,而不適合其他分析。
在此方法中,算法從幾個初始聚類開始。然后迭代地將數據點重新定位到不同的聚類中,直到實現最佳劃分。K 均值聚類算法是最流行的聚類算法之一。
下面的 K 均值聚類示例顯示了其工作原理。聚類分析有哪些應用?
步驟 1:確定集群
確定算法的簇數“K”,例如 K=3。算法會將上述 12 個數據點劃分為 3 個簇。K 可以是任意值。根據該值,聚類的正確性可能會有所不同。還有算法方法可用于確定 K 的最佳值。
第 2 步:選擇數據點
由于 K=3,取任意三個數據點作為初始均值。在此示例中,選擇點 C、D 和 E 作為初始均值。請注意,K 均值算法可以將任意點作為初始均值。
步驟 3:計算距離
計算數據集中每個點到每個初始聚類均值的距離。隨機選擇了三個聚類均值 C、D 和 E。對于樣本中的每個數據點,計算它與這三個均值的距離。兩點 (X1, Y1) 和 (X2, Y2) 之間的歐幾里得距離使用如下:
在步驟 3 之后,表格將顯示每個數據點與初始平均值 C、D 和 E 的距離。
根據數據點的最小距離將其添加到聚類中。例如,點 A 與初始均值 C 的距離最小。這意味著 A 在均值為 C 的聚類中。第一步完成后,便獲得了聚類。
步驟 4:重復——計算新均值
現在很容易看到初始聚類。下一步是計算三個新的聚類平均值。為此,取特定聚類中的每個數據點,并計算平均值。
“C” 聚類的新聚類均值 = (5+2+6+1+4+3+6/7, 21+11+22+10+23+14+12/7) = (3.85, 16.14),我們將此點稱為 X。
“D” 聚類的新聚類均值 = (1+2+5/3, 6+8+4/3) = (2.66, 6),我們將此點稱為 Y。
“E” 聚類的新聚類均值 = (4+5/2, 10+11/2) = (4.5, 10.5)。我們把這個點稱為 Z。
步驟 5:重復——計算每個數據點與新均值的距離
重復步驟 3,找出所有數據點與新計算的聚類均值 X、Y 和 Z 的距離。在這個新的迭代中,很容易看出數據點 C、D、I 和 L 的最小距離已經改變。它們現在屬于一個新的聚類,如下所示。
然后,由于某些數據點已經改變了其聚類,因此需要繼續進行 K-means 迭代。
步驟 6:重復——計算新均值和新聚類
由于數據點 C、D、I、L 已改變其聚類,因此需要像步驟 4 中那樣計算新的聚類均值。為此,取特定聚類中的每個數據點,并計算平均值。然后像步驟 5 中一樣,計算從每個數據點到新聚類均值的距離。根據距離,將數據點分配到與其距離最小的聚類。
K-means 是一種迭代分割算法:
在新的迭代中,如果每個數據點都保留在其先前的聚類中,則 K 均值算法終止。這意味著已獲得局部最優解。
K-medoids 算法是另一種基于分區的聚類算法。K-medoid 算法選擇 medoids 作為聚類的代表對象。K-medoid 算法試圖找到與特定聚類中每個其他數據點具有最小差異的數據點。在差異最小化之前,K-medoid 算法會迭代地對數據集進行分區。K-均值算法通常使用平方誤差距離(歐幾里得距離),而 K-medoid 算法通常使用絕對值距離(如曼哈頓距離)來測量兩個數據點之間的差異。
K-medoid 算法的一個標準實現是 Partition Around Medoids (PAM) 算法。以下是 PAM 算法的基本步驟。
盡管 K-均值算法很簡單,但當數據有大量噪聲和異常值時,它不會產生良好的結果。在這種情況下,K-中心點方法更為穩健。然而,像 PAM 這樣的 K-中心點算法只有在數據集較小時才有用。當數據集大小增加時,K-中心點算法的計算時間會成倍增加。
顧名思義,分裂算法首先將所有數據點分配到單個簇中。然后將簇劃分為最不相似的簇。然后,該算法遞歸地劃分這些簇,直到獲得最優解。分裂算法也稱為自上而下的聚類方法。
這些算法首先將每個數據點分配到不同的聚類。然后,該算法遞歸地連接最相似的聚類,直到獲得最佳解決方案。凝聚算法也稱為自下而上的聚類方法。
凝聚聚類算法的示例
下面是五個數據點的距離矩陣。點之間的距離可以根據歐幾里得距離或曼哈頓距離或任何其他距離公式計算。距離矩陣始終是對稱矩陣,因為點 X 和 Y 之間的距離與 Y 和 X 之間的距離相同。基于此距離矩陣,這是凝聚(自下而上)聚類算法的一個示例。
步驟 1:在距離矩陣中,找到距離最小的兩個點。在上面的例子中,它們是點 3 和 5。它們之間的距離為 2。將它們放入單個簇中。
步驟 2:刪除點 3 和 5,將其替換為簇“35”,并創建一個新的距離矩陣。為此,需要計算所有數據點與簇“35”之間的距離。有多種方法可以確定此距離。
在此示例中,使用以下方法來測量距離:
點 X 與簇“35”的距離 = 最小值 (距離 (X, 3), 距離 (X,5))。基于此方法更新的距離矩陣為:
步驟 3:重復步驟 2,直到所有數據點都分組為一個簇。在當前示例中,需要六次迭代。下圖顯示了簇的形成。這種表示稱為樹狀圖。在此表示中,Y 軸表示兩個數據點之間的距離。例如,點 3 和 5 之間的距離為 2。
步驟 4:一旦所有數據點都聚類完畢,如上所示,決定需要保留多少個簇。這是一個艱難的決定,因為每個層次聚類算法最終都會產生一個簇。在層次聚類算法對數據進行分區后,有幾種方法可用于確定最佳簇數。
這些算法基于這樣的理念:簇總是比其周圍的數據空間更密集。基于密度的算法從單個數據點開始,探索其鄰域內的數據點。初始點鄰域內的點包含在單個簇中。鄰域的定義因算法的實現而異。基于密度的噪聲應用空間聚類 (DBSCAN) 是此類別中一種流行的聚類算法。
基于網格的聚類算法與基于密度的聚類算法類似。數據空間被劃分為幾個較小的單元,稱為網格。每個數據點被分配到特定的網格單元。然后,該算法計算每個網格的密度。密度低于閾值的網格將被消除。接下來,該算法從相鄰的密集網格組中形成聚類。統計信息網格 (STING) 和任務中的聚類 (CLIQUE) 是兩種流行的基于網格的算法。
除了上面討論的算法外,聚類分析還包括一組基于模型的聚類、基于約束的聚類和異常值分析算法。
算法 | 優點 | 缺點 |
基于分區的聚類分析算法 | 簡單且可擴展。適用于具有緊湊且分離良好的集群的數據集。 | 需要提前定義聚類的數量。不適用于高維數據空間。易受噪聲和異常值的影響。穩定性較差。 |
層次聚類分析算法 | 不需要預先定義集群。計算所有可能聚類的完整層次結構。良好的可視化方法,如樹狀圖。 | 關于何時停止聚類尚不明確。高維數據空間的情況下性能下降。一旦集群分裂或合并完成,就很難糾正。 |
基于密度的聚類分析算法 | 發現任意形狀和大小的簇。更好地處理數據中的噪聲和異常值。不需要預先指定聚類的數量。 | 如果數據具有不同密度的聚類,則此方法可能會失敗。輸出高度依賴于輸入參數的初始設置。 |
基于網格的聚類分析算法 | 無需計算距離。因此該算法很快。該算法可以處理大型數據集。 | 集群邊界由水平或垂直邊界組成。它不包括對角線邊界 |
文章轉載自: What is cluster analysis?