阿里工程師也在用的頂級機器學習聚類算法,了解一下!

2021-02-08 人工智慧研究院

如何找到數據的底層結構

聚類是一種將一組數據點組合在一起的方式,即將相似的數據點組合在一起。因此,聚類算法在數據點之間尋找相似性或相異性。聚類是一種無監督的學習方法,因此沒有與數據點相關的標籤。聚類算法試圖找到數據的底層結構。

有多種執行聚類任務的方法和算法,可以分為三個子類別:

基於分區的集群層次聚類基於密度的聚類所有這些方法旨在將數據分組到群集中。他們使用的方法略有不同。我將使用每種方法的通用算法詳細解釋每種方法。在開始本主題之前,我想指出聚類和分類之間的區別。

聚類與分類

分類任務中的觀測值(或數據點)具有標籤。每個觀察結果根據一些測量結果進行分類。分類算法嘗試對觀測值的度量(特徵)與其分配的類別之間的關係建模。然後,模型預測新觀測的類別。聚類中的觀測(或數據點)沒有標籤。我們希望該模型能夠在數據集中找到結構,以便將相似的觀察結果分組。我們基本上要求模型標記觀察結果。基於分區的集群

基於分區的群集技術嘗試根據應用於數據點的距離測量來創建數據分區。這種方法最常見的算法是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組合傳遞給該算法,因此無法很好地推廣到密度相差很大的聚類。謝謝閱讀。如果您有任何反饋意見,請告訴我。

相關焦點

  • 機器學習中五種常用的聚類算法
    機器學習中五種常用的聚類算法 李倩 發表於 2018-05-25 17:10:51 聚類是機器學習中一種重要的無監督算法,它可以將數據點歸結為一系列特定的組合。
  • 機器學習中的聚類算法有哪幾種?
    來源:博學谷 作者:照照目前,聚類算法被廣泛應用於用戶畫像、廣告推薦、新聞推送和圖像分割等等。聚類算法是機器學習中一種「數據探索」的分析方法,它幫助我們在大量的數據中探索和發現數據的結構。那麼機器學習中的聚類算法有哪幾種呢?
  • 機器學習之SKlearn(scikit-learn)的K-means聚類算法
    Scikit learn 也簡稱 sklearn, 是機器學習領域當中最知名的 python 模塊之一.預處理:特徵提取和歸一化,常用的模塊有:preprocessing,feature extraction,常見的應用有:把輸入數據(如文本)轉換為機器學習算法可用的數據。
  • 五分鐘了解機器學習十大算法
    本文為有志於成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。機器學習是該行業的一個創新且重要的領域。我們為機器學習程序選擇的算法類型,取決於我們想要實現的目標。現在,機器學習有很多算法。因此,如此多的算法,可能對於初學者來說,是相當不堪重負的。
  • 機器學習——詳解經典聚類算法Kmeans
    在特徵比較抽象和隱晦的時候,我們想直接劃分往往不太容易,由於不知道真實的標籤,我們也沒有辦法用上監督模型。為了解決問題,Kmeans只能反其道而行之,我們不再對數據進行劃分了,而讓比較接近的數據自己聚集在一起。Kmeans算法正是基於這一思想而生,讓數據通過某種算法聚集,不再進行劃分的方法稱為聚類算法。
  • 機器學習算法實踐 K均值聚類的實用技巧
    在本文中,他詳細介紹了一種稱為 K-Means Clustering(k均值聚類)的算法,其中包括如何衡量算法效果,以及如何確定你需要生成的數據段集數量。雷鋒網編譯整理,更多AI開發技術文章,關注AI研習社(微信號:okweiwu)。Bilal Mahmood:我們最常做的分析之一,便是在數據中提取模式。 比方說,某公司的客戶可被劃分入哪些細分市場?
  • 機器學習算法實踐之K均值聚類的實用技巧
    在本文中,他詳細介紹了一種稱為 K-Means Clustering(k均值聚類)的算法,其中包括如何衡量算法效果,以及如何確定你需要生成的數據段集數量。雷鋒網編譯整理,更多AI開發技術文章,關注AI研習社(微信號:okweiwu)。Bilal Mahmood:我們最常做的分析之一,便是在數據中提取模式。 比方說,某公司的客戶可被劃分入哪些細分市場?
  • 無監督機器學習中,最常見的聚類算法有哪些?
    在機器學習過程中,很多數據都具有特定值的目標變量,我們可以用它們來訓練模型。但是,大多數情況下,在處理實際問題時,數據不會帶有預定義標籤,因此我們需要開發能夠對這些數據進行正確分類的機器學習模型,通過發現這些特徵中的一些共性,來預測新數據的類。
  • 機器學習十大經典算法之K-Means聚類算法
    聚類介紹聚類在機器學習,數據挖掘,模式識別,圖像分析以及生物信息等領域有廣泛的應用。聚類是把相似的對象通過靜態分類的方法分成不同的組別或者更多的子集(subset),這樣讓在同一個子集中的成員對象都有相似的一些屬性,常見的包括在坐標系中更加短的空間距離(一般是歐式距離)等。
  • 機器學習最主流的算法庫sklearn
    「 scikit-learn,簡稱sklearn,是用Python語言開發的機器學習模塊庫,其包含大量的機器學習算法和測試數據集
  • python機器學習之k-means聚類算法(1)
    k-means算法是一種無監督的機器學習算法,雖然是機器學習,但它簡單易於實現。本篇採用python語言,自主編程實現k-menas算法,當然python用專門的庫函數來實現該算法,但本次主要使用該算法闡述編程思想,所以不採用內置函數。採用自主編寫的程序的方式。
  • 機器學習聚類算法綜述
    基本上這就是DBSCAN算法的主要內容了,是不是很簡單?但是我們還是有三個問題沒有考慮。第一個是一些異常樣本點或者說少量游離於簇外的樣本點,這些點不在任何一個核心對象在周圍,在DBSCAN中,我們一般將這些樣本點標記為噪音點。
  • 圖解機器學習的常見算法
    確實,機器學習的各種套路確實不少,但是如果掌握了正確的路徑和方法,其實還是有跡可循的,這裡我推薦SAS的Li Hui的這篇博客,講述了如何選擇機器學習的各種方法。另外,Scikit-learn 也提供了一幅清晰的路線圖給大家選擇:其實機器學習的基本算法都很簡單,下面我們就利用二維數據和交互圖形來看看機器學習中的一些基本算法以及它們的原理。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    所以,當你使用一個固定的數據測試集來評估性能,挑選最適合算法時,你應該針對你的問題嘗試多種不同的算法。當然,你所使用的算法必須要適合於你試圖解決的問題,這也就有了如何選擇正確的機器學習任務這一問題。做個類比,如果你需要打掃你的房子,你可能會用吸塵器、掃帚或者是拖把,但是你絕不會掏出一把鏟子然後開始挖地。
  • K-Means聚類算法詳解
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 動手寫機器學習算法:K-Means聚類算法
    K-Means算法是無監督的聚類算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。今天小七和你一起用Python實現機K-Means聚類算法。第二種就是人為觀察選擇將圖片的像素分為若干類,然後用這個類代替原來的像素值執行聚類的算法代碼:# 聚類算法def runKMeans(X,initial_centroids,max_iters,plot_process):    m,n = X.shape                   # 數據條數和維度
  • ...分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R實現)
    所以,當你使用一個固定的數據測試集來評估性能,挑選最適合算法時,你應該針對你的問題嘗試多種不同的算法。當然,你所使用的算法必須要適合於你試圖解決的問題,這也就有了如何選擇正確的機器學習任務這一問題。做個類比,如果你需要打掃你的房子,你可能會用吸塵器、掃帚或者是拖把,但是你絕不會掏出一把鏟子然後開始挖地。
  • 一文解讀聚類中的兩種流行算法
    何為聚類?「聚類」顧名思義,就是將相似樣本聚合在一起,屬於機器學習中的無監督學習問題。聚類的目標是找到相近的數據點,並將相近的數據點聚合在一起。為什麼選擇聚類?將相似的實體聚合有助於刻畫不同類別的屬性。換句話說,這將讓我們深入了解不同類別的潛在模式。
  • 機器學習算法基礎:層次聚類詳解
    簇間的距離度量 合併或拆分層次聚類算法都是基於簇間相似度進行的,每個簇類包含了一個或多個樣本點,通常用距離評價簇間或樣本間的相似度,即距離越小相似度越高
  • 聚類算法——k均值和層次聚類
    通過樹型圖的結構,我們能更深入了解數據集的結構。在上面的案例中,我們看到了兩個主要的分支,一個分支是 HW 和 FW,另一個是 BD、RD、PW、KW。在生物進化學中,通常會使用包含更多物種和測量的大型數據集推斷這些物種之間的分類學關係。在生物學之外,層次聚類也在機器學習和數據挖掘中使用。重要的是,使用這種方法並不需要像 K-均值聚類那樣設定分組的數量。