當前位置:編程學習大全網 - 編程語言 - Kmeans聚類算法簡介(有點枯燥)

Kmeans聚類算法簡介(有點枯燥)

1簡介。Kmeans聚類算法

Kmeans聚類算法因其卓越的速度和良好的可擴展性而成為最著名的聚類方法。Kmeans算法是壹個反復移動類中心點的過程。它將類的中心點(也稱為重心)移動到其成員的平均位置,然後重新劃分其內部成員。k是算法計算的超參數,表示類別數;Kmeans可以自動將樣本分配到不同的類,但不能決定劃分多少個類。k必須是小於訓練集中樣本數的正整數。有時候,課時數是由問題內容指定的。例如,壹家鞋廠有三種新款式,它想知道每種新款式的潛在客戶是誰,所以它對客戶進行了調查,並從數據中找出了三個類別。還有壹些問題沒有指定聚類數,最優聚類數是不確定的。後面我會詳細介紹壹些估算最優聚類數的方法。

Kmeans的參數是類的重心位置及其內部觀測的位置。與廣義線性模型和決策樹類似,Kmeans參數的最優解也是以最小化代價函數為目標。Kmeans成本函數公式如下:

μiμi是kk級的重心。成本函數是各種失真的總和。每個類的扭曲度等於該類重心到其內部成員的距離的平方和。如果壹個類內的成員相互之間更加緊密,那麽這個類的扭曲程度就會更小;反之,如果壹個類內的成員相互之間越分散,這個類的失真程度就越大。求解最小化代價函數的參數是壹個反復配置每個類所包含的觀測值,不斷移動類的重心的過程。第壹,壹個類的重心是隨機確定的位置。實際上,重心的位置等於隨機選取的觀測值的位置。在每次叠代中,Kmeans會將觀測值分配給最近的類,然後將重心移動到該類所有成員的平均值。

2.K值的確定

2.1根據問題內容確定。

這個方法就不多講了,文章開頭舉了壹個例子。

2.2肘規則

如果問題中沒有指定kk的值,那麽可以用肘規則來估計聚類數。肘規則將繪制具有不同kk值的成本函數值。隨著kk值的增大,平均失真度會降低;每個類包含的樣本會更少,所以樣本會更靠近它的重心。但隨著kk值的不斷增大,平均失真度的改善效果會不斷降低。在增加kk值的過程中,畸變度改善效果下降最多的位置是肘部。為了讓讀者看得更清楚,我們先用肘子法則,通過壹張圖來確定最佳kk值。下圖中的數據顯然可以分為兩類:

從圖中可以看出,當k的取值範圍為1 ~ 2時,平均失真度變化最大。當它超過2時,平均失真度顯著變化。所以最好的k是2。

2.3結合層次聚類

壹個經常產生好的聚類結果的有趣策略是,首先通過層次聚集算法確定粗結果的數目,並找到壹個初始聚類,然後通過叠代重定位來改進該聚類。

2.4穩定性方法

穩定性方法對壹個數據集進行兩次重采樣,生成兩個數據子集,然後用相同的聚類算法對這兩個數據子集進行聚類,生成兩個帶有kk聚類的聚類結果,並計算兩個聚類結果的相似度分布。兩種聚類結果之間的高度相似性表明kk聚類反映了壹種穩定的聚類結構,它們的相似性可以用來估計聚類的個數。子方法用於探索多個kk並找到合適的K值。

2.5系統進化方法

系統演化方法將壹個數據集視為壹個偽熱力學系統,當數據集被劃分為kk個團簇時,該系統被稱為處於kk狀態。從初始狀態k=1k=1開始,系統將通過分裂和合並的過程演化到其穩定的平衡狀態。琪琪?相應的聚類結構決定了類的最佳數量。琪琪?。系統進化方法可以提供所有簇之間的相對邊界距離或可分性,適用於明顯分離的簇結構和輕微重疊的簇結構。

2.6使用canopy算法的初始劃分

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

(1)聚類最耗費的部分是計算對象的相似度。第壹階段,Canopy方法選擇壹種簡單、低成本的方法來計算對象的相似度,將相似的對象放在壹個子集內,稱為Canopy。通過壹系列的計算,可以得到幾個冠層,但不會出現壹個物體不屬於任何壹個冠層的情況。這個階段可以被認為是

(2)不同的冠層使用傳統的聚類方法(如Kmeans),不屬於同壹冠層的對象之間不進行相似度計算。

從這種方法至少可以看出兩個好處:第壹,如果冠層不太大,冠層之間沒有太多重疊,那麽需要計算相似度的對象數量就會大大減少;其次,像Kmeans這樣的聚類方法,需要人為的指出k的值,用(1)得到的冠層數就可以作為這個值,壹定程度上減少了選擇k的盲目性。

其他方法如貝葉斯信息準則法(BIC)可以在參考文獻[4]中找到。

3.初始質心的選擇

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

第二種有效的方法是取壹個樣本,用層次聚類技術進行聚類。Kk類是從層次聚類中提取出來的,它們的質心作為初始質心。這種方法通常是有效的,但只在以下幾種情況下有效:(1)樣本量比較小,比如幾百到幾千(層次聚類開銷很大);(2)?相對於樣本量,Kk較小。

選擇初始質心的第三種方法是隨機選擇第壹個點,或者取所有點的質心作為第壹個點。然後,對於每個隨後的初始質心,選擇離所選初始質心最遠的點。利用這種方法,保證了選取的初始質心不僅是隨機的,而且是分散的。但是,這種方法可能會選擇異常值。此外,尋找離當前初始質心集最遠的點也是非常昂貴的。為了克服這個問題,這種方法通常用於點樣本。因為離群值很少(更多的離群值不是),所以隨機樣本中絕大部分不會出現。計算量也大大減少。

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

4.距離的測量

常用的距離度量方法有歐氏距離和余弦相似度。兩者都評價個體之間的差異。

歐幾裏德距離是最常見的距離度量,而余弦相似性是最常見的相似性度量。很多距離度量和相似度量都是基於兩者的變形和推導,所以下面重點討論度量個體差異時實現和應用環境的差異。

三維坐標系下歐氏距離和余弦相似度的區別:

從圖中可以看出,距離測量的是空間中各點之間的絕對距離,與各點的位置坐標(即個體特征尺寸的數值)有直接關系;余弦相似度衡量空間向量的夾角,更多體現在方向上的不同,而不是位置上的不同。如果A點的位置不變,B點在原方向遠離坐標軸原點,那麽此時余弦相似度cosθ不變,因為夾角不變,A點和B點的距離在明顯變化,這就是歐氏距離和余弦相似度的區別。

歐氏距離和余弦相似度根據各自的計算方法和度量特點,適用於不同的數據分析模型:歐氏距離可以反映個體數值特征的絕對差異,因此更多用於需要從維度的數值大小來反映差異的分析,如利用用戶行為指標來分析用戶價值的相似性或差異性;余弦相似度更多用於區分方向差異,對絕對值不太敏感。更多的是利用用戶對內容的評分來區分用戶興趣的異同,同時修正了用戶之間可能存在的衡量標準不壹致的問題(因為余弦相似度對絕對值不敏感)。

因為歐氏距離度量會受到指標單位尺度不同的影響,壹般需要先標準化,距離越大,個體間的差異越大;空間向量余弦夾角的相似性度量不會受到索引尺度的影響,余弦值落在區間[-1,1]內。值越大,差異越小。但是對於具體的應用,什麽時候用歐氏距離,什麽時候用余弦相似度?

從幾何學上講,N維向量空間中的線段是由底和原點組成的三角形,其頂角是不確定的。也就是說,對於兩個空間矢量,即使兩點之間的距離不變,它們的夾角余弦也可以任意改變。感性認識,當兩個用戶的評分趨勢相同,但評分值相差很大時,余弦相似度往往會給出更好的解決方案。舉個極端的例子,兩個用戶只對向量分別為(3,3)和(5,5)的兩個產品進行評級。這兩個用戶的認知其實是壹樣的,但是歐氏距離給出的解決方案顯然沒有余弦值合理。

5.聚類效果評估

我們將機器學習定義為系統的設計和學習,通過對經驗數據的學習,以任務效果的持續改善為衡量標準。Kmeans是壹種無監督學習,沒有標簽或其他信息來比較聚類結果。但是,我們仍然有壹些指標來評估算法的性能。我們介紹了類失真的測量方法。本節將介紹另壹種叫做輪廓系數的聚類算法效果評估方法。輪廓系數是評價類的密度和離散度的壹個指標。它會隨著班級人數的增加而增加。距離較遠且自身密集的類,輪廓系數較大,相互集中的類,輪廓系數較小。從所有樣本計算輪廓系數,每個樣本得分的平均值計算如下:

Aa是每個類中樣本之間距離的平均值,bb是壹個類中樣本與其最近類中所有樣本之間距離的平均值。

6.Kmeans算法流程

輸入:簇號k,數據集XmxnXmxn。?

輸出:滿足最小方差標準的K個聚類。

(1)選擇k個初始中心點,例如c [0] = x [0],…,c[k-1]= x[k-1];

(2)對於x [0]...x [n],與c [0]比較...c [k-1]分別假設與c[i]的差值最小,標為I;

(3)對於所有標有I的點,重新計算c[i]={所有標有I的樣本的每個特征的平均值};

(4)重復(2)和(3)直到所有c[i]值的變化小於給定閾值或達到最大叠代次數。

Kmeans的時間復雜度為O(tkmn),空間復雜度為O((m+k)n)。其中t是叠代次數,k是聚類數,m是樣本數,n是特征數。

7.KMeans算法的優缺點

7.1的優點

(1).算法很簡單。需要調整的超參數是壹個k。

(2).擁有卓越的速度和良好的可擴展性。

7.2缺點

(1).在Kmeans算法中?kk?需要提前確定,這個?kk?值的選擇有時很難確定。

(2)在Kmeans算法中,首先需要初始的k個聚類中心,然後確定壹個初始劃分,再對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有很大的影響。壹旦初始值選擇不好,就可能得不到有效的聚類結果。設置更多不同的初始值,比較最終的運算結果,直到結果趨於穩定。

(3)算法需要調整樣本分類,計算調整後的新聚類中心,所以當數據量很大時,算法的時間開銷很大。

(4)對異常值非常敏感。

(5)從數據表示的角度來看,在Kmeans中,我們用單點來建模集群,這其實是最簡化的數據建模形式。事實上,這種基於點的聚類建模已經假設每個聚類的數據以圓形(或高維球形)或方形分布。找不到非凸形的簇。但在現實生活中,很少會出現這種情況。因此,在GMM,壹個更普遍的數據表示,即高斯分布,被使用。

(6)從數據先驗的角度,在Kmeans中,我們假設每個聚類的先驗概率是相同的,但是每個聚類的數據量可能是不均勻的。例如,聚類A包含10000個樣本,而聚類B僅包含100個樣本。那麽,對於壹個新的樣本,它屬於A類的概率肯定大於B類的概率,不管它與A類和B類的相似度如何。

(7)在Kmeans中,歐氏距離通常用來度量樣本和聚類之間的相似性。這個距離實際上假設數據的所有維度具有相同的相似性度量。但是在GMM,後驗概率是用來衡量相似性的?αcG(x|μc,∑c)αcG(x|μc,∑c)?通過引入協方差矩陣,我們可以對每個維度中數據的不同重要性進行建模。

(8).在Kmeans中,每個樣本點只屬於相似度最高的聚類,這實際上是壹種硬聚類。

針對Kmeans算法的不足,許多前人提出了壹些改進算法。例如,K-modes算法可以實現離散數據的快速聚類,保持Kmeans算法的高效性,擴大Kmeans對離散數據的應用範圍。還有K-Prototype算法,它可以對具有離散和數值屬性的數據進行聚類。在K-prototype中,定義了壹個相異度來計算數值屬性和離散屬性。當然還有其他算法,這裏就不壹壹列舉了。

Kmeans和GMM更像是壹種自上而下的思路,他們的首要問題是確定聚類的個數,也就是k的值,確定k之後,數據就會被聚類。但是,層次聚類是壹種自下而上的形式,先有數據,然後通過不斷選擇最相似的數據進行聚類。

  • 上一篇:健康的家庭關系應該是怎樣的
  • 下一篇:什麽才是好的蒸?亮相AWE2019的方太蒸箱為妳揭曉答案
  • copyright 2024編程學習大全網