如何找到數據的底層結構
聚類是一種將一組數據點組合在一起的方式,即將相似的數據點組合在一起。因此,聚類算法在數據點之間尋找相似性或相異性。聚類是一種無監督的學習方法,因此沒有與數據點相關的標籤。聚類算法試圖找到數據的底層結構。
有多種執行聚類任務的方法和算法,可以分為三個子類別:
基於分區的集群層次聚類基於密度的聚類所有這些方法旨在將數據分組到群集中。他們使用的方法略有不同。我將使用每種方法的通用算法詳細解釋每種方法。在開始本主題之前,我想指出聚類和分類之間的區別。
聚類與分類
分類任務中的觀測值(或數據點)具有標籤。每個觀察結果根據一些測量結果進行分類。分類算法嘗試對觀測值的度量(特徵)與其分配的類別之間的關係建模。然後,模型預測新觀測的類別。聚類中的觀測(或數據點)沒有標籤。我們希望該模型能夠在數據集中找到結構,以便將相似的觀察結果分組。我們基本上要求模型標記觀察結果。基於分區的集群
基於分區的群集技術嘗試根據應用於數據點的距離測量來創建數據分區。這種方法最常見的算法是k均值聚類。
K-均值聚類旨在將數據分為k個聚類,以使同一聚類中的數據點相似,而不同聚類中的數據點相距更遠。
兩個點的相似性取決於它們之間的距離。
有許多測量距離的方法。歐幾裡德距離(p = 2的minkowski距離)是最常用的距離測量之一。
K-均值聚類試圖使聚類內的距離最小化,並使不同聚類之間的距離最大化。K-均值算法無法確定簇數。創建KMeans對象時,我們需要對其進行定義,這可能是一項艱巨的任務。
K均值是一個迭代過程。它基於期望最大化算法。確定群集數後,它可以通過執行以下步驟來工作:
為每個群集隨機選擇形心(群集的中心)。計算所有數據點到質心的距離。將數據點分配給最近的群集。通過獲取群集中所有數據點的平均值,找到每個群集的新質心。重複步驟2,3和4,直到所有點收斂並且聚類中心停止移動。注意:初始質心是隨機選擇的,這可能會導致最終簇有所不同。為了克服這個問題,scikit learning提供了n_init參數。k均值算法以不同的初始質心運行「 n_init」次,最終結果將根據n_init個連續運行來確定。
優點:
容易解釋比較快可擴展用於大型數據集能夠以智能方式選擇初始質心的位置,從而加快收斂速度保證融合缺點:
簇數必須預先確定。K均值算法無法猜測數據中存在多少個簇。確定群集數量可能是一項艱巨的任務。只能繪製線性邊界。如果存在將數據中的組分開的非線性結構,則k均值將不是一個很好的選擇。隨著樣本數量的增加,速度會降低,因為在每個步驟中,k均值算法都會訪問所有數據點並計算距離。另一種方法是使用數據點的子集來更新質心的位置(即sklearn.cluster.MiniBatchKMeans)對異常值敏感層次聚類
這種方法通過建立集群層次結構來工作。分層聚類意味著通過迭代分組或分離數據點來創建聚類樹。有兩種類型的層次結構聚類:
聚集聚類分裂聚類分層聚類的優點之一是我們不必指定聚類的數量(但可以)。
聚集聚類是一種自下而上的方法。首先假定每個數據點都是一個單獨的群集。然後,將相似的群集進行迭代組合。讓我們看一個例子來清楚地解釋這個概念。
我們有一個由9個樣本組成的數據集。我選擇與這些樣本相關的數字來證明相似性的概念。在每個迭代(或級別),最接近的數字(即樣本)被組合在一起。如下圖所示,我們從9個集群開始。最接近的那些在第一級被合併,然後我們有7個群集。與藍線相交的黑線的數量表示簇的數量。
齒形圖
上圖稱為樹狀圖,該圖表示基於樹的方法。在分層聚類中,樹狀圖用於可視化聚類之間的關係。
隨著我們的上升,隨著更多樣本的組合,簇的數量減少。在第6級之後,所有樣本都合併到一個大類中。
分層聚類的優點之一是我們不必預先指定聚類數。但是,將所有數據點組合到一個群集中是不明智的。我們應該在某個時候停止合併集群。Scikit-learn為此提供了兩個選項:
在達到多個集群後停止(n_clusters)設置連結的閾值(distance_threshold)。如果兩個聚類之間的距離大於閾值,則這些聚類將不會合併。分裂聚類在現實生活中並不常用,因此我將簡要介紹一下。簡單而明確的解釋是分裂聚類與聚集聚類相反。我們從一個包含所有數據點的巨型群集開始。然後,將數據點分為不同的群集。這是自下而上的方法。
如果基礎數據具有某種層次結構,則層次結構群集很有用,並且可以提供更好的結果。
分層集群的一些常見用例:
遺傳或其他生物學數據可用於創建樹狀圖,以表示突變或進化水平。系統發育樹用於顯示基於相似性和差異性的進化關係。分層群集也用於對文本文檔進行分組。層次聚類的另一個常見用例是社交網絡分析。層次聚類也可用於離群值檢測。優點
不必事先指定群集數。必須為k均值算法指定簇數。在樹狀圖的幫助下易於實現和解釋。始終生成相同的群集。K-均值聚類可能會導致不同的聚類,具體取決於質心(聚類中心)的啟動方式。缺點
與k-means相比,它是一種較慢的算法。分層群集需要很長時間才能運行,尤其是對於大型數據集。基於密度的聚類
基於分區的分層聚類技術對於標準形狀的聚類非常高效。但是,當涉及到任意形狀的聚類或檢測離群值時,基於密度的技術更為有效。
考慮以下數字:
這些圖中的數據點以任意形狀分組或包含異常值。基於密度的聚類算法在發現高密度區域和異常值方面非常有效。對於某些任務,例如異常檢測,檢測異常值非常重要。這種方法最常用的算法之一是DBSCAN。
DBSCAN代表density- b ASED 小號(ε2)的上光一個與pplications 瓦茲。它能夠找到任意形狀的聚類和帶有噪聲的聚類(即離群值)。
DBSCAN的主要思想是,如果某個點與該簇中的許多點接近,則該點屬於該簇。
DBSCAN有兩個關鍵參數:
eps:指定鄰域的距離。如果兩個點之間的距離小於或等於eps,則將其視為鄰居。minPts:定義集群的最小數據點數。根據這兩個參數,將點分為核心點,邊界點或離群值:核心點:如果在其半徑為eps的周圍區域中至少有minPts個點(包括該點本身),則該點為核心點。邊界點:如果一個點可以從核心點到達並且在其周圍區域內的點數少於minPts,則它是邊界點。離群點:如果一個點不是核心點並且無法從任何核心點到達,則該點就是離群點。通過可視化可以更好地解釋這些觀點。下圖取自維基百科:
在這種情況下,minPts為4。紅色點是核心點,因為在其周圍區域內至少有4個半徑為eps的點。該區域用圖中的圓圈顯示。黃色點是邊界點,因為它們可以從核心點到達並且在其鄰域內不到4個點。可到達意味著在核心點的周圍。點B和C在其相鄰區域內(即半徑為eps的周圍區域)有兩個點(包括點本身)。最後,N是一個離群值,因為它不是核心點,無法從核心點獲得。
我們已經了解了參數和不同類型點的定義。現在我們來談談算法的工作原理。實際上很簡單:
確定minPts和eps。使用半徑eps在起點附近隨機選擇起點。如果附近至少有點的minPts個點,則將該點標記為核心點,並開始形成聚類。如果不是,則將該點標記為噪聲。一旦開始聚類形成(假設聚類A),初始點附近的所有點都將成為聚類A的一部分。如果這些新點也是核心點,則它們附近的點也將添加到集群A注意:標記為噪點的點可能會重新出現並成為群集的一部分。
下一步是在先前步驟中未訪問的點中隨機選擇另一個點。然後適用相同的步驟。訪問所有點後,此過程完成。點之間的距離是使用k-means算法中的距離測量方法確定的。最常用的方法是歐氏距離。
通過應用這些步驟,DBSCAN算法能夠找到高密度區域並將其與低密度區域分離。
一個群集包括相鄰的核心點(即,彼此可以到達)和這些核心點的所有邊界點。形成集群的必要條件是至少擁有一個核心點。儘管可能性很小,但我們可能有一個只有一個核心點及其邊界點的集群。
優點:
不需要預先指定群集數。在任意形狀的群集中表現良好。DBSCAN對異常值具有魯棒性,並且能夠檢測到異常值。缺點:
在某些情況下,確定適當的鄰域(eps)距離並不容易,並且需要領域知識。如果集群在集群內密度方面有很大不同,則DBSCAN不太適合定義集群。群集的特徵由eps-minPts參數的組合定義。由於我們將一個eps-minPts組合傳遞給該算法,因此無法很好地推廣到密度相差很大的聚類。謝謝閱讀。如果您有任何反饋意見,請告訴我。