1. 程式人生 > >聚類:層次聚類、基於劃分的聚類(k-means)、基於密度的聚類、基於模型的聚類

聚類:層次聚類、基於劃分的聚類(k-means)、基於密度的聚類、基於模型的聚類

oca 基本思想 初始化 methods 根據 範圍 下使用 對象 適用於

一、層次聚類

1、層次聚類的原理及分類

1)層次法(Hierarchicalmethods)先計算樣本之間的距離。每次將距離最近的點合並到同一個類。然後,再計算類與類之間的距離,將距離最近的類合並為一個大類。不停的合並,直到合成了一個類。其中類與類的距離的計算方法有:最短距離法,最長距離法,中間距離法,類平均法等。比如最短距離法,將類與類的距離定義為類與類之間樣本的最短距離。

層次聚類算法根據層次分解的順序分為:自下底向上和自上向下,即凝聚的層次聚類算法和分裂的層次聚類算法(agglomerative和divisive),也可以理解為自下而上法(bottom-up)和自上而下法(top-down)。自下而上法就是一開始每個個體(object)都是一個類,然後根據linkage尋找同類,最後形成一個“類”。自上而下法就是反過來,一開始所有個體都屬於一個“類”,然後根據linkage排除異己,最後每個個體都成為一個“類”。這兩種路方法沒有孰優孰劣之分,只是在實際應用的時候要根據數據特點以及你想要的“類”的個數,來考慮是自上而下更快還是自下而上更快。至於根據Linkage判斷“類”的方法就是最短距離法、最長距離法、中間距離法、類平均法等等(其中類平均法往往被認為是最常用也最好用的方法,一方面因為其良好的單調性,另一方面因為其空間擴張/濃縮的程度適中)。為彌補分解與合並的不足,層次合並經常要與其它聚類方法相結合,如循環定位。

2Hierarchical methods中比較新的算法有BIRCHBalanced Iterative Reducingand Clustering Using Hierarchies利用層次方法的平衡叠代規約和聚類)主要是在數據量很大的時候使用,而且數據類型是numerical。首先利用樹的結構對對象集進行劃分,然後再利用其它聚類方法對這些聚類進行優化;ROCKA Hierarchical ClusteringAlgorithm for Categorical Attributes)主要用在categorical的數據類型上;Chameleon(A Hierarchical Clustering AlgorithmUsing Dynamic Modeling)裏用到的linkage是kNN(k-nearest-neighbor)算法,並以此構建一個graph,Chameleon的聚類效果被認為非常強大,比BIRCH好用,但運算復雜度很高,O(n^2)。

2、層次聚類的流程

凝聚型層次聚類的策略是先將每個對象作為一個簇,然後合並這些原子簇為越來越大的簇,直到所有對象都在一個簇中,或者某個終結條件被滿足。絕大多數層次聚類屬於凝聚型層次聚類,它們只是在簇間相似度的定義上有所不同。 這裏給出采用最小距離的凝聚層次聚類算法流程:

(1) 將每個對象看作一類,計算兩兩之間的最小距離;

(2) 將距離最小的兩個類合並成一個新類;

(3) 重新計算新類與所有類之間的距離;

(4) 重復(2)、(3),直到所有類最後合並成一類。

聚類的效果如下圖,黑色是噪音點:

技術分享

另外我們可以看出凝聚的層次聚類並沒有類似基本K均值的全局目標函數,沒有局部極小問題或是很難選擇初始點的問題。合並的操作往往是最終的,一旦合並兩個簇之後就不會撤銷。當然其計算存儲的代價是昂貴的。

3、層次聚類的優缺點

優點:1,距離和規則的相似度容易定義,限制少;2,不需要預先制定聚類數;3,可以發現類的層次關系;4,可以聚類成其它形狀

缺點:1,計算復雜度太高;2,奇異值也能產生很大影響;3,算法很可能聚類成鏈狀

r語言中使用hclust(d,method = "complete", members=NULL) :進行層次聚類。d為距離矩陣;method表示類的合並方法,single最短距離法,complete最長距離法,median中間距離法,mcquitty 相似法,average 類平均法,centroid重心法,ward離差平方和法;members為NULL或d長度的矢量。

二、劃分聚類法k-means

基於劃分的方法(Partition-based methods):其原理簡單來說就是,想象你有一堆散點需要聚類,想要的聚類效果就是“類內的點都足夠近,類間的點都足夠遠”。首先你要確定這堆散點最後聚成幾類,然後挑選幾個點作為初始中心點,再然後依據預先定好的啟發式算法(heuristicalgorithms)給數據點做叠代重置(iterativerelocation),直到最後到達“類內的點都足夠近,類間的點都足夠遠”的目標效果。

Partition-based methods聚類多適用於中等體量的數據集,但我們也不知道“中等”到底有多“中”,所以不妨理解成,數據集越大,越有可能陷入局部最小。

1、Kmeans算法的原理

k-means算法以k為參數,把n個對象分成k個簇,使簇內具有較高的相似度,而簇間的相似度較低。k-means算法的處理過程如下:首先,隨機地選擇k個對象,每個對象初始地代表了一個簇的平均值或中心,即選擇K個初始質心;對剩余的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;然後重新計算每個簇的平均值。這個過程不斷重復,直到準則函數收斂,直到質心不發生明顯的變化。通常,采用平方誤差準則,誤差的平方和SSE作為全局的目標函數,即最小化每個點到最近質心的歐幾裏得距離的平方和。此時,簇的質心就是該簇內所有數據點的平均值。

選擇K個點作為初始質心

repeat

將每個點指派到最近的質心,形成K個簇

重新計算每個簇的質心

until 簇不發生變化或達到最大叠代次數

時間復雜度:O(tKmn),其中,t為叠代次數,K為簇的數目,m為記錄數,n為維數

空間復雜度:O((m+K)n),其中,K為簇的數目,m為記錄數,n為維數

技術分享

K-Means 算法的詳細過程

從上圖中,我們可以看到,A, B, C, D, E 是五個在圖中點。而灰色的點是我們的種子點,也就是我們用來找點群的點。有兩個種子點,所以K=2。

然後,K-Means的算法如下:

①隨機在圖中取K(這裏K=2)個種子點。

②然後對圖中的所有點求到這K個種子點的距離,假如點Pi離種子點Si最近,那麽Pi屬於Si點群。(我們可以看到A,B屬於上面的種子點,C,D,E屬於下面中部的種子點)

③接下來,我們要移動種子點到屬於他的“點群”的中心。(見圖上的第三步)

④然後重復第2)和第3)步,直到,種子點沒有移動(我們可以看到圖中的第四步上面的種子點聚合了A,B,C,下面的種子點聚合了D,E)。

聚類的效果如下圖,折線是歷次循環時3個簇的質心的更新軌跡,黑點是初始質心:

技術分享

我們查看基本K均值算法實現步驟及上面的聚類效果可以發現,該聚類算法將所有數據點都進行了指派,不識別噪音點。另外選擇適當的初試質心是基本K均值過程的關鍵。

2、k均值的優缺點及分類

優點:1,簡單,易於理解和實現;2,時間復雜度低

缺點:

1)kmeans要手工輸入類數目,對初始值的設置很敏感;所以有了k-means++、intelligent k-means、genetic k-means;

2)k-means對噪聲和離群值非常敏感,所以有了k-medoids和k-medians;

3)k-means只用於numerical類型數據,不適用於categorical類型數據,所以k-modes;

4)k-means不能解決非凸(non-convex)數據,所以有了kernel k-means。

5)k-means主要發現圓形或者球形簇,不能識別非球形的簇。

3、k-means與DBSCAN的區別

k-means聚類算法的初始點選擇不穩定,是隨機選取的,這就引起聚類結果的不穩定。k-means屬於動態聚類,往往聚出來的類有點圓形或者橢圓形。kmeans對於圓形區域聚類效果較好,dbscan基於密度,對於集中區域效果較好。對於不規則形狀,kmeans完全無法用,dbscan可以起到很好的效果。

4、k-means註意問題

1)K如何確定

kmenas算法首先選擇K個初始質心,其中K是用戶指定的參數,即所期望的簇的個數。這樣做的前提是我們已經知道數據集中包含多少個簇,但很多情況下,我們並不知道數據的分布情況,實際上聚類就是我們發現數據分布的一種手段。如何有效的確定K值,這裏大致提供幾種方法:

與層次聚類結合[2]

經常會產生較好的聚類結果的一個有趣策略是,首先采用層次凝聚算法決定結果粗的數目,並找到一個初始聚類,然後用叠代重定位來改進該聚類。

②穩定性方法[3]

穩定性方法對一個數據集進行2次重采樣產生2個數據子集,再用相同的聚類算法對2個數據子集進行聚類,產生2個具有k個聚類的聚類結果,計算2個聚類結果的相似度的分布情況。2個聚類結果具有高的相似度說明k個聚類反映了穩定的聚類結構,其相似度可以用來估計聚類個數。采用次方法試探多個k,找到合適的k值。

③系統演化方法[3]

系統演化方法將一個數據集視為偽熱力學系統,當數據集被劃分為K個聚類時稱系統處於狀態K。系統由初始狀態K=1出發,經過分裂過程和合並過程,系統將演化到它的穩定平衡狀態Ki,所對應的聚類結構決定了最優類數Ki。系統演化方法能提供關於所有聚類之間的相對邊界距離或可分程度,適用於明顯分離的聚類結構和輕微重疊的聚類結構。

④使用canopy算法進行初始劃分[4]

基於CanopyMethod的聚類算法將聚類過程分為兩個階段

Stage1、聚類最耗費計算的地方是計算對象相似性的時候,CanopyMethod在第一階段選擇簡單、計算代價較低的方法計算對象相似性,將相似的對象放在一個子集中,這個子集被叫做Canopy,通過一系列計算得到若幹Canopy,Canopy之間可以是重疊的,但不會存在某個對象不屬於任何Canopy的情況,可以把這一階段看做數據預處理;

Stage2、在各個Canopy內使用傳統的聚類方法(如K-means),不屬於同一Canopy 的對象之間不進行相似性計算。

從這個方法起碼可以看出兩點好處:首先,Canopy 不要太大且Canopy 之間重疊的不要太多的話會大大減少後續需要計算相似性的對象的個數;其次,類似於K-means這樣的聚類方法是需要人為指出K的值的,通過Stage1得到的Canopy 個數完全可以作為這個K值,一定程度上減少了選擇K的盲目性。

其他方法如貝葉斯信息準則方法(BIC)可參看文獻[5]。

2)初始質心的選取

選擇適當的初始質心是基本kmeans算法的關鍵步驟。常見的方法是隨機的選取初始質心,但是這樣簇的質量常常很差。處理選取初始質心問題的一種常用技術是:多次運行,每次使用一組不同的隨機初始質心,然後選取具有最小SSE(誤差的平方和)的簇集。這種策略簡單,但是效果可能不好,這取決於數據集和尋找的簇的個數。

第二種有效的方法是,取一個樣本,並使用層次聚類技術對它聚類。從層次聚類中提取K個簇,並用這些簇的質心作為初始質心。該方法通常很有效,但僅對下列情況有效:(1)樣本相對較小,例如數百到數千(層次聚類開銷較大);(2)K相對於樣本大小較小

第三種選擇初始質心的方法,隨機地選擇第一個點,或取所有點的質心作為第一個點。然後,對於每個後繼初始質心,選擇離已經選取過的初始質心最遠的點。使用這種方法,確保了選擇的初始質心不僅是隨機的,而且是散開的。但是,這種方法可能選中離群點。此外,求離當前初始質心集最遠的點開銷也非常大。為了克服這個問題,通常該方法用於點樣本。由於離群點很少(多了就不是離群點了),它們多半不會在隨機樣本中出現。計算量也大幅減少。

第四種方法就是上面提到的canopy算法。

3)距離的度量

常用的距離度量方法包括:歐幾裏得距離和余弦相似度。兩者都是評定個體間差異的大小的。歐幾裏得距離度量會受指標不同單位刻度的影響,所以一般需要先進行標準化,同時距離越大,個體間差異越大;空間向量余弦夾角的相似度度量不會受指標刻度的影響,余弦值落於區間[-1,1],值越大,差異越小。但是針對具體應用,什麽情況下使用歐氏距離,什麽情況下使用余弦相似度?

從幾何意義上來說,n維向量空間的一條線段作為底邊和原點組成的三角形,其頂角大小是不確定的。也就是說對於兩條空間向量,即使兩點距離一定,他們的夾角余弦值也可以隨意變化。感性的認識,當兩用戶評分趨勢一致時,但是評分值差距很大,余弦相似度傾向給出更優解。舉個極端的例子,兩用戶只對兩件商品評分,向量分別為(3,3)和(5,5),這兩位用戶的認知其實是一樣的,但是歐式距離給出的解顯然沒有余弦值合理。

4)質心的計算

對於距離度量不管是采用歐式距離還是采用余弦相似度,簇的質心都是其均值,即向量各維取平均即可。

5)算法停止條件

一般是目標函數達到最優或者達到最大的叠代次數即可終止。對於不同的距離度量,目標函數往往不同。當采用歐式距離時,目標函數一般為最小化對象到其簇質心的距離的平方和。

當采用余弦相似度時,目標函數一般為最大化對象到其簇質心的余弦相似度和。

6)空聚類的處理

如果所有的點在指派步驟都未分配到某個簇,就會得到空簇。如果這種情況發生,則需要某種策略來選擇一個替補質心,否則的話,平方誤差將會偏大。一種方法是選擇一個距離當前任何質心最遠的點。這將消除當前對總平方誤差影響最大的點。另一種方法是從具有最大SSE的簇中選擇一個替補的質心。這將分裂簇並降低聚類的總SSE。如果有多個空簇,則該過程重復多次。另外,編程實現時,要註意空簇可能導致的程序bug。

三、基於密度的聚類

基於密度的方法(Density-based methods):k-means解決不了不規則形狀的聚類。於是就有了Density-based methods來系統解決這個問題。該方法同時也對噪聲數據的處理比較好。基於密度聚類的思想:思路就是定一個距離半徑,最少有多少個點,然後把可以到達的點都連起來,判定為同類。其原理簡單說畫圈兒,其中要定義兩個參數,一個是圈兒的最大半徑,一個是一個圈兒裏最少應容納幾個點。最後在一個圈裏的,就是一個類。DBSCAN(Density-Based Spatial Clustering ofApplications with Noise)就是其中的典型,可惜參數設置也是個問題,對這兩個參數的設置非常敏感。DBSCAN的擴展叫OPTICS(OrderingPoints To Identify Clustering Structure)通過優先對高密度(high density)進行搜索,然後根據高密度的特點設置參數,改善了DBSCAN的不足。

1、DBSCAN的概念

dbscan基於密度,對於集中區域效果較好,為了發現任意形狀的簇,這類方法將簇看做是數據空間中被低密度區域分割開的稠密對象區域;一種基於高密度連通區域的基於密度的聚類方法,該算法將具有足夠高密度的區域劃分為簇,並在具有噪聲的空間數據中發現任意形狀的簇。

DBSCAN中的幾個定義:

Ε鄰域:給定對象半徑為Ε內的區域稱為該對象的Ε鄰域;

核心對象:如果給定對象Ε領域內的樣本點數大於等於MinPts,則稱該對象為核心對象;

直接密度可達:對於樣本集合D,如果樣本點q在p的Ε領域內,並且p為核心對象,那麽對象q從對象p直接密度可達。

密度可達:對於樣本集合D,給定一串樣本點p1,p2….pn,p= p1,q= pn,假如對象pi從pi-1直接密度可達,那麽對象q從對象p密度可達。註意:密度可達是單向的,密度可達即可容納同一類。

密度相連:存在樣本集合D中的一點o,如果對象o到對象p和對象q都是密度可達的,那麽p和q密度相聯。

技術分享

密度可達是直接密度可達的傳遞閉包,並且這種關系是非對稱的。密度相連是對稱關系。DBSCAN目的是找到密度相連對象的最大集合。

有了以上的概念接下來就是算法描述了:DBSCAN通過檢查數據庫中每點的r鄰域來搜索簇。如果點p的r鄰域包含的點多於MinPts個,則創建一個以p為核心對象的新簇。然後,DBSCAN叠代的聚集從這些核心對象直接密度可達的對象,這個過程可能涉及一些密度可達簇的合並。當沒有新的點可以添加到任何簇時,該過程結束。

例如:Eg: 假設半徑Ε=3,MinPts=3,點p的E領域中有點{m,p,p1,p2,o}, 點m的E領域中有點{m,q,p,m1,m2},點q的E領域中有點{q,m},點o的E領域中有點{o,p,s},點s的E領域中有點{o,s,s1}.

那麽核心對象有p,m,o,s(q不是核心對象,因為它對應的E領域中點數量等於2,小於MinPts=3);

點m從點p直接密度可達,因為m在p的E領域內,並且p為核心對象;

點q從點p密度可達,因為點q從點m直接密度可達,並且點m從點p直接密度可達;

點q到點s密度相連,因為點q從點p密度可達,並且s從點p密度可達。

2、簇的生成原理及過程

1)DBSCAN聚類算法原理的基本要點:確定半徑eps的值

①DBSCAN算法需要選擇一種距離度量,對於待聚類的數據集中,任意兩個點之間的距離,反映了點之間的密度,說明了點與點是否能夠聚到同一類中。由於DBSCAN算法對高維數據定義密度很困難,所以對於二維空間中的點,可以使用歐幾裏德距離來進行度量。

②DBSCAN算法需要用戶輸入2個參數:一個是半徑(Eps),表示以給定點P為中心的圓形鄰域的範圍;另一個是以點P為中心的鄰域內最少點的數量(MinPts)。如果滿足:以點P為中心、半徑為Eps的鄰域內的點的個數不少於MinPts,則稱點P為核心點。

③DBSCAN聚類使用到一個k-距離的概念,k-距離是指:給定數據集P={p(i);i=0,1,…n},對於任意點P(i),計算點P(i)到集合D的子集S={p(1), p(2), …, p(i-1), p(i+1), …, p(n)}中所有點之間的距離,距離按照從小到大的順序排序,假設排序後的距離集合為D={d(1), d(2), …, d(k-1), d(k), d(k+1),…,d(n)},則d(k)就被稱為k-距離。也就是說,k-距離是點p(i)到所有點(除了p(i)點)之間距離第k近的距離。對待聚類集合中每個點p(i)都計算k-距離,最後得到所有點的k-距離集合E={e(1), e(2), …, e(n)}。

④根據經驗計算半徑Eps:根據得到的所有點的k-距離集合E,對集合E進行升序排序後得到k-距離集合E’,需要擬合一條排序後的E’集合中k-距離的變化曲線圖,然後繪出曲線,通過觀察,將急劇發生變化的位置所對應的k-距離的值,確定為半徑Eps的值。

⑤根據經驗計算最少點的數量MinPts:確定MinPts的大小,實際上也是確定k-距離中k的值,DBSCAN算法取k=4,則MinPts=4。

⑥如果對經驗值聚類的結果不滿意,可以適當調整Eps和MinPts的值,經過多次叠代計算對比,選擇最合適的參數值。可以看出,如果MinPts不變,Eps取得值過大,會導致大多數點都聚到同一個簇中,Eps過小,會導致一個簇的分裂;如果Eps不變,MinPts的值取得過大,會導致同一個簇中點被標記為噪聲點,MinPts過小,會導致發現大量的核心點。

我們需要知道的是,DBSCAN算法,需要輸入2個參數,這兩個參數的計算都來自經驗知識。半徑Eps的計算依賴於計算k-距離,DBSCAN取k=4,也就是設置MinPts=4,然後需要根據k-距離曲線,根據經驗觀察找到合適的半徑Eps的值。

2)連通核心點生成簇:核心點能夠連通(有些書籍中稱為:“密度可達”),它們構成的以Eps長度為半徑的圓形鄰域相互連接或重疊,這些連通的核心點及其所處的鄰域內的全部點構成一個簇。假設MinPts=4,則連通的核心點示例,如下圖所示:

技術分享

計算連通的核心點的思路是,基於廣度遍歷與深度遍歷集合的方式:從核心點集合S中取出一個點p,計算點p與S集合中每個點(除了p點)是否連通,可能會得到一個連通核心點的集合C1,然後從集合S中刪除點p和C1集合中的點,得到核心點集合S1;再從S1中取出一個點p1,計算p1與核心點集合S1集中每個點(除了p1點)是否連通,可能得到一個連通核心點集合C2,再從集合S1中刪除點p1和C2集合中所有點,得到核心點集合S2,……最後得到p、p1、p2、……,以及C1、C2、……就構成一個簇的核心點。最終將核心點集合S中的點都遍歷完成,得到所有的簇。

參數eps的設置,如果eps設置過大,則所有的點都會歸為一個簇,如果設置過小,那麽簇的數目會過多。如果MinPts設置過大的話,很多點將被視為噪聲點。

3、根據數據點的密度分為三類點:

(1)核心點:該點在鄰域內的密度超過給定的閥值MinPs。

(2)邊界點:該點不是核心點,但是其鄰域內包含至少一個核心點。

(3)噪音點:不是核心點,也不是邊界點。

有了以上對數據點的劃分,聚合可以這樣進行:各個核心點與其鄰域內的所有核心點放在同一個簇中,把邊界點跟其鄰域內的某個核心點放在同一個簇中。

聚類的效果如下圖,黑色是噪音點:初識聚類算法:

技術分享

因為DBSCAN使用簇的基於密度的定義,因此它是相對抗噪音的,並且能處理任意形狀和大小的簇。但是如果簇的密度變化很大,例如ABCD四個簇,AB的密度大大大於CD,而且AB附近噪音的密度與簇CD的密度相當,這是當MinPs較大時,無法識別簇CD,簇CD和AB附近的噪音都被認為是噪音;當MinPs較小時,能識別簇CD,但AB跟其周圍的噪音被識別為一個簇。這個問題可以基於共享最近鄰(SNN)的聚類結局。

4、DBSCAN的優缺點:

優點:

1. 與K-means方法相比,DBSCAN不需要事先知道要形成的簇類的數量。

2. 與K-means方法相比,DBSCAN可以發現任意形狀的簇類。

3. 同時,DBSCAN能夠識別出噪聲點。

4.DBSCAN對於數據庫中樣本的順序不敏感,即Pattern的輸入順序對結果的影響不大。但是,對於處於簇類之間邊界樣本,可能會根據哪個簇類優先被探測到而其歸屬有所擺動。

缺點:

1. DBScan不能很好反映高尺寸數據。

2. DBScan不能很好反映數據集變化的密度。

3.對於高維數據,點之間極為稀疏,密度就很難定義了。

四、基於模型的聚類

基於模型的方法(Model-based methods):該方法主要是指基於概率模型的方法和基於神經網絡模型的方法,尤其以基於概率模型的方法居多。這裏的概率模型主要指概率生成模型(generative Model),同一”類“的數據屬於同一種概率分布。這中方法的優點就是對”類“的劃分不那麽”堅硬“,而是以概率形式表現,每一類的特征也可以用參數來表達;但缺點就是執行效率不高,特別是分布數量很多並且數據量很少的時候。其中最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models)。基於神經網絡模型的方法主要就是指SOM(Self Organized Maps)了,也是我所知的唯一一個非監督學習的神經網絡了。

1、EM應用場景:

最大期望經常用在機器學習和計算機視覺的數據聚類(Data Clustering)領域,即EM算法常用於聚類領域。

EM算法屬於基於模型的聚類方法。EM算法有很多的應用,最廣泛的就是GMM混合高斯模型、聚類、HMM等等。EM算法在高斯混合模型GMM(Gaussian Mixture Model )中有很重要的用途。簡單來講GMM就是一些高斯分布的組合。

2、EM概念:

最大期望算法經過兩個步驟交替進行計算,第一步是計算期望(E),利用對隱藏變量的現有估計值,計算其最大似然估計值;第二步是最大化(M),最大化在 E 步上求得的最大似然值來計算參數的值。M步上找到的參數估計值被用於下一個 E 步計算中,這個過程不斷交替進行。E步,求期望(expectation);M步,求極大(maximization)。稱為期望-最大算法(Expectation Maximization Algorithm),簡稱EM算法。

在統計計算中,最大期望(EM)算法是在概率模型中尋找參數最大似然估計或者最大後驗估計的算法,其中概率模型依賴於無法觀測的隱藏變量(Latent Variable)。

EM是一種以叠代的方式來解決一類特殊最大似然 (Maximum Likelihood) 問題的方法,這類問題通常是無法直接求得最優解,但是如果引入隱含變量,在已知隱含變量的值的情況下,就可以轉化為簡單的情況,直接求得最大似然解。

所謂EM算法就是在含有隱變量的時候,把隱變量的分布設定為一個以觀測變量為前提條件的後驗分布,使得參數的似然函數與其下界相等,通過極大化這個下界來極大化似然函數,從避免直接極大化似然函數過程中因為隱變量未知而帶來的困難!

比如,食堂的大師傅炒了一份菜,要等分成兩份給兩個人吃,顯然沒有必要拿來天平一點一點的精確的去稱分量,最簡單的辦法是先隨意的把菜分到兩個碗中,然後觀察是否一樣多,把比較多的那一份取出一點放到另一個碗中,這個過程一直叠代地執行下去,直到大家看不出兩個碗所容納的菜有什麽分量上的不同為止。(來自百度百科)

3、EM算法的思想:

先有雞還是先有蛋的問題:雞說,沒有我誰把你生出來的啊。蛋不服說,沒有我你從哪蹦出來啊。為了解決這個你依賴我,我依賴你的循環依賴問題,總得有一方要先打破僵局,不管了,我先隨便整一個值出來,看你怎麽變,然後我再根據你的變化調整我的變化,然後如此叠代著不斷互相推導,最終就會收斂到一個解。這就是EM算法的基本思想了。

EM算法就是這樣,假設我們想估計知道A和B兩個參數,在開始狀態下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反過來知道了B也就得到了A。可以考慮首先賦予A某種初值,以此得到B的估計值,然後從B的當前值出發,重新估計A的取值,這個過程一直持續到收斂為止。

EM算法另一種理解:坐標上升法(Coordinate ascent)

技術分享

圖中的直線式叠代優化的路徑,可以看到每一步都會向最優值前進一步,而且前進路線是平行於坐標軸的,因為每一步只優化一個變量。

這猶如在x-y坐標系中找一個曲線的極值,然而曲線函數不能直接求導,因此什麽梯度下降方法就不適用了。但固定一個變量後,另外一個可以通過求導得到,因此可以使用坐標上升法,一次固定一個變量,對另外的求極值,最後逐步逼近極值。對應到EM上,E步:固定θ,優化Q;M步:固定Q,優化θ;交替將極值推向最大。

4、EM算法流程:

EM算法:期望最大算法是一種從不完全數據或有數據丟失的數據集(存在隱含變量)中求解概率模型參數的最大似然估計方法。

EM的算法流程:初始化分布參數θ,重復以下步驟直到收斂

E步驟:E步選擇出合適的隱變量分布(一個以觀測變量為前提條件的後驗分布),使得參數的似然函數與其下界相等,從而計算最大似然的期望值;

M步驟:最大化在 E 步上找到的最大似然的期望值,也就是最大化似然函數的下界;從而計算參數的最大似然估計,擬合出參數。

因為下界不斷提高,所以極大似然估計單調增加,那麽最終我們會到達最大似然估計的最大值。對於信息缺失的數據來說,EM算法是一種極有效的工具。

EM 算法的優點:對於信息缺失的數據來說,EM算法是一種極有效的工具。

與 k-means 聚類分析算法相比,它有多個優點:

最多需要一次數據庫掃描。

工作時不受內存 (RAM) 限制。

能夠使用只進遊標。

優於抽樣方法。

聚類:層次聚類、基於劃分的聚類(k-means)、基於密度的聚類、基於模型的聚類