1. 程式人生 > >機器學習實戰--聚類

機器學習實戰--聚類

一 什麼是聚類?

在無監督學習中,訓練樣本的標記資訊是未知的,目標是通過對無標記訓練樣本的學習來揭示資料的內在性質及規律,為進一步的資料分析提供基礎。

聚類試圖將資料集中的樣本劃分為活幹個通常是不想交(正交)的子集,每個子集稱為一個簇。通過這樣的劃分每個簇可能對應於一些潛在的類別。這些類別對聚類演算法而言事前是未知的。聚類的過程僅能自動形成簇機構,簇所對應的類別語義需由使用者來把握和命名。

聚類既能作為一個獨立過程,用於找尋資料內在分佈結構,也可作為分類等其他學習任務的前驅過程。例如在一些商業應用中需要對新使用者的型別進行判別,但定義“使用者型別”對商家來說卻可能不太容易,此時往往可先對使用者資料進行聚類,根據聚類結果將每個簇定義一個類,然後再基於這些類訓練分類模型,用於判別新使用者的型別。

二 聚類型別

基於不同的學習策略,人們設計出多種型別的聚類演算法。

1 原型聚類

原型聚類亦稱基於原型的聚類,此類演算法假設聚類結構能通過一組原型刻畫。通常情況下,演算法先對原型進行初始化,人後對原型進行迭代更新求解,採用不同的原型表示、不同的求解方式,將產生不同的演算法。

1.1 k均值演算法

這是一個迭代演算法,需要根據不同的質心執行多次,直至其收斂。它是一個基於距離的聚類演算法。同一個簇中的物件彼此相似,不同簇中的物件彼此相異。

步驟:

(1)將N個物件劃分到K個非空子集中。

(2)計算當前分割槽的簇質心。

(3)將各個物件分配到有最近質心的簇。為各個資料點找到最近的簇

(4)如果不再有新的分配,則停止計算。否則重複(2)(3)知道演算法收斂。

這個演算法會反覆迭代,直到質心不再變化,此時就找到了我們想要的K個簇。由於K-均值演算法是一個迭代的過程,每一步都會根據各個現有簇當前中心重新計算簇各個物件成員關係。這個過程會反覆進行,直到達到演算法收斂。

1.2學習向量量化

與k均值演算法類似,“學習向量量化”(Learning Vector Quantization,簡稱LVQ)也是試圖找到一組原型向量來刻畫聚類結構,但與一般聚類演算法不同的是,LVQ假設資料樣本帶有類別標記,學習過程利用樣本的這些監督資訊來輔助聚類。

步驟: 

(1)統計樣本的類別,假設一共有q類,初始化為原型向量的標記為{t1,t2,……,tq}。從樣本中隨機選取q個樣本點位原型向量{p1,

p2 ,……, pq}。初始化一個學習率a,a 取值範圍(0,1)。 

(2) 從樣本集中隨機選取一個樣本(x, y),計算該樣本與q個原型向量的距離(歐幾里得距離),找到最小的那個原型向量p,判

樣本的標記y與原型向量的標記t是不是一致。若一致則更新為p’ = p + a*(x-p),否則更新為p’ = p - a*(x - p)。 

(3) 重複第2步直到滿足停止條件。(如達到最大迭代次數) 

(4) 返回q個原型向量。

1.3 高斯混合聚類

高斯模型即正態分佈,高斯混合模型就是幾個正態分佈的疊加,每一個正態分佈代表一個類別,所以和K-means很像,高斯混合

模型也可以用來做無監督的聚類分析。混合高斯模型(Gaussian Mixture Model,簡稱GMM)是用高斯概率密度函式(正態分

布曲線)精確地量化事物,將一個事物分解為若干的基於高斯概率密度函式(正態分佈曲線)形成的模型。通俗點講,無論觀測

資料集如何分佈以及呈現何種規律,都可以通過多個單一高斯模型的混合進行擬合。

高斯混合模型聚類演算法EM步驟如下:

(1)猜測有幾個類別,既有幾個高斯分佈。

(2)針對每一個高斯分佈,隨機給其均值和方差進行賦值。

(3)針對每一個樣本,計算其在各個高斯分佈下的概率。

(4)針對每一個高斯分佈,每一個樣本對該高斯分佈的貢獻可以由其下的概率表示,如概率大則表示貢獻大,反之亦然。這樣把 

樣本對該高斯分佈的貢獻作為權重來計算加權的均值和方差。之後替代其原本的均值和方差。

(5)重複3~4直到每一個高斯分佈的均值和方差收斂。

2 密度聚類

密度聚類亦稱“基於密度的聚類”,此類演算法假設聚類結構能通過樣本分佈的緊密程度確定,通常情況下,密度聚類演算法從樣本密度的角度來考察樣本之間的可連續性,並基於可連續樣本不斷擴充套件聚類簇以獲得最終的聚類結果。這個演算法是資料探勘技術中被廣泛應用的一類演算法,其核心思想是用一個點的鄰域內鄰居點數衡量該點所在空間密度。

DBSCAN是一種著名的j密度聚類演算法,它基於一組“鄰域”引數來刻畫樣本分佈的緊密程度,給定數量集D={x1,x2,……,xm},定義下面幾個概念:

-鄰域:對xj∈D,其-鄰域包含樣本集D中與xj的距離不大於的樣本,即Neps(xj)= xi{xi∈D|dist(xi,xj)≤};通俗解釋就是把集合D中的所有樣本到xj的距離小於等於的樣本放到集合Neps(xj)裡面。

核心物件:若的-鄰域至少包含MinPts個樣本,即Neps(xj)≥MinPts,則xj是一個核心物件;通俗解釋:如果在鄰域內有足夠多的樣本(大於等於MinPts),xj是一個核心物件,否則就不是。

密度直達:若 xi位於xj-鄰域中,且xj是核心物件,則稱由密度直達。通俗解釋: xi位於以xj是圓心,為半徑的圓中。

密度可達:對於,如存在樣本序列p1,p2,……,pn,其中p1=xi,pn=xj且pi+1由pi密度直達,則稱xj由xi密度可達;通俗解釋:存在一個密度直達的傳遞鏈。

密度相連:對xi與xj,若存在xk使得xi與xj均由xk密度可達,則稱與密度相連。

給定圓的半徑為,另MinPts = 3 。


從圖中可以看出m、p、o、u、v、w和r是核心點。因為他們的鄰域內至少包含3個物件。物件q是從m密度直達的。m是從p密度直達的,p也是從m直達的。物件q是從p可達的,p不是從q密度可達的,因為q不是核心;r和s是從o密度可達的,而o是從r密度可達的,因此o、r和s都是密度相連的。

DBSCAN如何發現簇?初始給定資料集D中所有的物件都標記為“unvisited”。DBSCAN隨機地選擇一個未訪問的物件p,標記p為“visited”,並檢查p的鄰域是否至少包含MinPts個物件。如果不是則p標記為噪音點。否則為p建立一個新的簇C,並且把p的鄰域中的所有物件放在候選集合N中。DBSCAN迭代地把N中不屬於其它簇的物件新增到C中,在此過程中,對於N中標記為unvisited的物件p′,DBSCAN把它標記為“visited”,並且檢查他的鄰域。如果 p′的鄰域至少有MinPts個物件,則p′的鄰域中的物件都被新增到N中。DBSCAN繼續新增物件到C,直達C不能再擴充套件,即知道N為空。此時,簇C完全生成,於是被輸出。為了找出下一個簇,DBSCAN從剩下的物件中隨機地選擇一個未訪問的物件。聚類過程繼續,知道所有物件都被訪問。總之,N為p的鄰域物件的集合,C為不屬於任何其它簇的成員。

      一般來說,如果資料集是稠密的,並且資料集不是凸的,那麼用DBSCAN會比K-Means聚類效果好很多。如果資料集不是稠密的,則不推薦用DBSCAN來聚類。

3 層次聚類

層次聚類試圖在不同層次上對資料集進行劃分,從而形成樹形的聚類結構。資料集的劃分可採用自底向上的聚合策略,也可採用自頂向下的分拆策略。AGNES是一種採用自底向上聚類策略的層析聚類演算法。它先將資料集中的每個樣本看做一個初始聚類簇,然後在演算法執行的每一步中找出距離最近兩個聚類簇進行合併,該過程不斷重複,直至達到預設的聚類簇個數這裡的關鍵是如何計算聚類簇之間的距離。實際上,每個簇是一個樣本集合, 因此,只需採用關於集合的某種距離即可。

      演算法的原理很簡單,最開始的時候將所有資料點本身作為簇,然後找出距離最近的兩個簇將它們合為一個,不斷重複以上步驟直到達到預設的簇的個數 。

AGNES演算法先對僅含一個樣本的初始聚類簇和形影的聚類矩陣進行初始化;然後不斷合併距離最近的聚類簇,併合並得到聚類簇的聚類矩陣進行更新上述過程不多重複,知道達到預設的聚類簇數。


總結:原型聚類都是給定初始值,然後不斷優化;密度聚類再過程中形成簇;層次聚類類似不斷合併同類項。