a*算法的优缺点_五种聚类算法一览与python实现
今天的主題是聚類算法,小結一下,也算是炒冷飯了,好久不用真忘了。
小目錄:
1.K-means聚類2.Mean-Shift聚類3.Dbscan聚類4.層次聚類5.GMM_EM聚類【1】.K-means聚類
1.算法介紹
kmeans算法又名k均值算法,K-means算法中的k表示的是聚類為k個簇,means代表取每一個聚類中數據值的均值作為該簇的中心,或者稱為質心(質量中心,可以利用球坐標進行三重積分求解),即用每一個的類的質心對該簇進行描述。可以看下圖直觀點:
2.算法思想
先從樣本集中隨機選取 k個樣本作為簇中心,并計算所有樣本與這 k個“簇中心”的距離,對于每一個樣本,將其劃分到與其距離最近的“簇中心”所在的簇中,對于新的簇重新計算各個簇的新的“簇中心”,然后再繼續距離知道簇中心不發生變化。
?根據以上描述,我們可以得到實現kmeans算法的主要四點:
(1)簇個數 k 的選擇
(2)各個樣本點到“簇中心”的距離
(3)根據新劃分的簇,更新“簇中心”
(4)重復上述2、3過程,直至"簇中心"沒有移動
3.優缺點
優點:
1.容易實現,計算速度快
缺點:
1.可能收斂到局部最小值,在大規模數據上收斂較慢;我們必須提前知道數據有多少類/組。
2.K值需要預先給定,屬于預先知識,很多情況下K值的估計是非常困難的,對于像計算全部微信用戶的交往圈這樣的場景就完全的沒辦法用K-Means進行。對于可以確定K值不會太大但不明確精確的K值的場景,可以進行迭代運算,然后找出Cost Function最小時所對應的K值,這個值往往能較好的描述有多少個簇類。
3.K-Means算法對初始選取的聚類中心點是敏感的,不同的隨機種子點得到的聚類結果完全不同
4.K-Means算法對離群點的數據進行聚類時,K均值也有問題,這種情況下,離群點檢測和刪除有很大的幫助。(異常值對聚類中心影響很大,需要離群點檢測和剔除)
4.K-Means算法并不是適用所有的樣本類型。它不能處理非球形簇、不同尺寸和不同密度的簇。如下圖:
4.詳細步驟
(1)K值的選擇
k 的選擇一般是按照實際需求進行決定,或在實現算法時直接給定 k 值。
(2)距離度量
將對象點分到距離聚類中心最近的那個簇中需要最近鄰的度量策略,在歐式空間中采用的是歐式距離,在處理文檔中采用的是余弦相似度函數,有時候也采用曼哈頓距離作為度量,不同的情況用的度量公式是不同的。
(補充:歐式空間:歐幾里得空間就是在對現實空間的規則抽象和推廣(從n<=3推廣到有限n維空間))
歐式距離公式:
曼哈頓距離公式:
余弦相似度:
(3)新質心的計算
對于分類后的產生的k個簇,分別計算到簇內其他點距離均值最小的點作為質心(對于擁有坐標的簇可以計算每個簇坐標的均值作為質心)
(4)是否停止K-means
?? 質心不再改變,或給定loop最大次數loopLimit
【2】.Mean-Shift聚類
1.算法介紹
Mean Shift算法,又稱為均值漂移算法,Mean Shift的概念最早是由Fukunage在1975年提出的,在后來由Yizong Cheng對其進行擴充,主要提出了兩點的改進:
定義了核函數;
增加了權重系數。
核函數的定義使得偏移值對偏移向量的貢獻隨之樣本與被偏移點的距離的不同而不同。權重系數使得不同樣本的權重不同。Mean Shift算法在聚類,圖像平滑、分割以及視頻跟蹤等方面有廣泛的應用。
2.算法思想
均值漂移聚類是基于滑動窗口的算法,來找到數據點的密集區域。這是一個基于質心的算法,通過將中心點的候選點更新為滑動窗口內點的均值來完成,來定位每個組/類的中心點。然后對這些候選窗口進行相似窗口進行去除,最終形成中心點集及相應的分組。
3.優缺點
優點:
(1)不同于K-Means算法,均值漂移聚類算法不需要我們知道有多少類/組。
(2)基于密度的算法相比于K-Means受均值影響較小。
缺點:
(1)窗口半徑r的選擇可能是不重要的。
4.詳細步驟
1. 確定滑動窗口半徑r,以隨機選取的中心點C半徑為r的圓形滑動窗口開始滑動。均值漂移類似一種爬山算法,在每一次迭代中向密度更高的區域移動,直到收斂。在指定區域內計算出每個樣本點漂移均值。
2. 每一次滑動到新的區域,計算滑動窗口內的均值來作為中心點,滑動窗口內的點的數量為窗口內的密度。在每一次移動中,窗口會像密度更高的區域移動。
3. 移動窗口,計算窗口內的中心點以及窗口內的密度,知道沒有方向在窗口內可以容納更多的點,即一直移動到圓內密度不再增加為止。
4. 步驟一到三會產生很多個滑動窗口,當多個滑動窗口重疊時,保留包含最多點的窗口,然后根據數據點所在的滑動窗口進行聚類。
?
【3】.Dbscan聚類
1.算法介紹
與均值漂移聚類類似,DBSCAN也是基于密度的聚類算法。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一個比較有代表性的基于密度的聚類算法,類似于均值轉移聚類算法,但它有幾個顯著的優點。
2.算法思想
?DBSCAN的聚類定義很簡單:由密度可達關系導出的最大密度相連的樣本集合,即為我們最終聚類的一個類別,或者說一個簇。
這個DBSCAN的簇里面可以有一個或者多個核心對象。如果只有一個核心對象,則簇里其他的非核心對象樣本都在這個核心對象的??-鄰域里;如果有多個核心對象,則簇里的任意一個核心對象的??-鄰域中一定有一個其他的核心對象,否則這兩個核心對象無法密度可達。這些核心對象的??-鄰域里所有的樣本的集合組成的一個DBSCAN聚類簇。
那么怎么才能找到這樣的簇樣本集合呢?DBSCAN使用的方法很簡單,它任意選擇一個沒有類別的核心對象作為種子,然后找到所有這個核心對象能夠密度可達的樣本集合,即為一個聚類簇。接著繼續選擇另一個沒有類別的核心對象去尋找密度可達的樣本集合,這樣就得到另一個聚類簇。一直運行到所有核心對象都有類別為止。
3.優缺點
優點:
(1)不需要知道簇的數量
(2) 可以對任意形狀的稠密數據集進行聚類,相對的,K-Means之類的聚類算法一般只適用于凸數據集。
(3) 可以在聚類的同時發現異常點,對數據集中的異常點不敏感。
(4) 聚類結果沒有偏倚,相對的,K-Means之類的聚類算法初始值對聚類結果有很大影響。
缺點:
(1)如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差,這時用DBSCAN聚類一般不適合。
(2) 如果樣本集較大時,聚類收斂時間較長,此時可以對搜索最近鄰時建立的KD樹或者球樹進行規模限制來改進。
(3) 調參相對于傳統的K-Means之類的聚類算法稍復雜,主要需要對距離閾值??,鄰域樣本數閾值MinPts聯合調參,不同的參數組合對最后的聚類效果有較大影響。
4.詳細步驟
1. 首先確定半徑r和minPoints. 從一個沒有被訪問過的任意數據點開始,以這個點為中心,r為半徑的圓內包含的點的數量是否大于或等于minPoints,如果大于或等于minPoints則改點被標記為central point,反之則會被標記為noise point。
2. 重復1的步驟,如果一個noise point存在于某個central point為半徑的圓內,則這個點被標記為邊緣點,反之仍為noise point。重復步驟1,直到所有的點都被訪問過。
【4】.GMM_EM聚類
1.算法介紹
K-Means的缺點在于對聚類中心均值的簡單使用。下面的圖中的兩個圓如果使用K-Means則不能作出正確的類的判斷。同樣的,如果數據集中的點類似下圖中曲線的情況也是不能正確分類的。
2.算法思想
使用高斯混合模型(GMM)做聚類首先假設數據點是呈高斯分布的,相對應K-Means假設數據點是圓形的,高斯分布(橢圓形)給出了更多的可能性。我們有兩個參數來描述簇的形狀:均值和標準差。所以這些簇可以采取任何形狀的橢圓形,因為在x,y方向上都有標準差。因此,每個高斯分布被分配給單個簇。
所以要做聚類首先應該找到數據集的均值和標準差,我們將采用一個叫做最大期望(EM)的優化算法。
3.優缺點
優點:
(1)GMMs使用均值和標準差,簇可以呈現出橢圓形而不是僅僅限制于圓形。K-Means是GMMs的一個特殊情況,是方差在所有維度上都接近于0時簇就會呈現出圓形。
(2)GMMs是使用概率,所有一個數據點可以屬于多個簇。例如數據點X可以有百分之20的概率屬于A簇,百分之80的概率屬于B簇。也就是說GMMs可以支持混合資格。
?缺點:
(1)計算復雜,是一種軟聚類,給出樣本的類別概率
補充:
當引入一些額外條件,GMM就退化成了K-means:
4.詳細步驟
1. 選擇簇的數量(與K-Means類似)并隨機初始化每個簇的高斯分布參數(均值和方差)。也可以先觀察數據給出一個相對精確的均值和方差。
2. 給定每個簇的高斯分布,計算每個數據點屬于每個簇的概率。一個點越靠近高斯分布的中心就越可能屬于該簇。
3. 基于這些概率我們計算高斯分布參數使得數據點的概率最大化,可以使用數據點概率的加權來計算這些新的參數,權重就是數據點屬于該簇的概率。
4. 重復迭代2和3直到在迭代中的變化不大。
【5】.層次聚類
1.算法介紹
層次聚類算法分為兩類:自上而下和自下而上。
凝聚層級聚類(HAC)是自下而上的一種聚類算法。HAC首先將每個數據點視為一個單一的簇,然后計算所有簇之間的距離來合并簇,知道所有的簇聚合成為一個簇為止。
分裂(divisive)層次聚類:分裂的層次聚類與凝聚的層次聚類相反,采用自頂向下的策略,它首先將所有對象置于同一個簇中,然后逐漸細分為越來越小的簇,直到每個對象自成一簇,或者達到了某個終止條件。該種方法一般較少使用。
2.優缺點
優點:
(1)不需要知道有多少個簇
(2)對于距離度量標準的選擇并不敏感
缺點:
(1)效率低
3.詳細步驟
1. 首先我們將每個數據點視為一個單一的簇,然后選擇一個測量兩個簇之間距離的度量標準。例如我們使用average linkage作為標準,它將兩個簇之間的距離定義為第一個簇中的數據點與第二個簇中的數據點之間的平均距離。
2. 在每次迭代中,我們將兩個具有最小averagelinkage的簇合并成為一個簇。
3. 重復步驟2知道所有的數據點合并成一個簇,然后選擇我們需要多少個簇。
后記:附上一個總結的聚類算法對比表
對了也附上代碼把:
1.kmeans
結果:
2.Mean-shift
結果:
3.Dbscan聚類
結果:
4.GMM_EM
結果:
5.層次聚類
結果:
往期推薦閱讀▽白話MCMC爬蟲之scrapy框架不要再被這些圖騙了我被詐騙了?極速可視化BI——TableauEnd
作者:濤網站:http://atshare.top/
半壺水全棧工程師,好讀書,甚喜之
總結
以上是生活随笔為你收集整理的a*算法的优缺点_五种聚类算法一览与python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python多态_Python面向对象教
- 下一篇: python希尔排序的优缺点_Pytho