導航:首頁 > 源碼編譯 > kmeans迭代演算法結束條件

kmeans迭代演算法結束條件

發布時間:2023-05-23 00:32:00

⑴ 聚類演算法 - kmeans

kmeans即k均值演算法。k均值聚類是最著名的劃分聚類演算法,由於簡潔和效率使得他成為所有聚類演算法中最廣泛使用的。給定一個數據點集合和需要的聚類數目k,k由用戶指定,k均值演算法根據某個距離函數反復把數據分入k個聚類中。

簡易動畫過程在這, 傳送門
第一步 ,輸入k的值,即我們希望將數據集經過聚類得到k類,分為k組
第二步 ,從數據集中隨機選擇k個數據點作為初識的聚類中心(質心,Centroid)
第三步 ,對集合中每一個數據點,計算與每一個聚類中心的距離,離哪個中心距離近,就標記為哪個中心。待分配完全時,就有第一次分類。
第四步 ,每一個分類根據現有的數據重新計算,並重新選取每個分類的中心(質心)
第五至N步 ,重復第三至四步,直至符合條件結束迭代步驟。條件是如果新中心和舊中心之間的距離小於某一個設置的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),可以認為我們進行的聚類已經達到期望的結果,終止迭代過程。

該演算法的核心就是選擇合適的k值,不同的k值出來有不同的結果。

手肘法的核心指標是SSE(sum of the squared errors,誤差平方和),

其中,Ci是第i個簇,p是Ci中的樣本點,mi是Ci的質心(Ci中所有樣本的均值),SSE是所有樣本的聚類誤差,代表了聚類效果的好壞。

手肘法的核心思想是:隨著聚類數k的增大,樣本劃分會更加精細,每個簇的聚合程度會逐漸提高,那麼誤差平方和SSE自然會逐漸變小。並且,當k小於真實聚類數時,由於k的增大會大幅增加每個簇的聚合程度,故SSE的下降幅度會很大,而當k到達真實聚類數時,再增加k所得到的聚合程度回報會迅速變小,所以SSE的下降幅度會驟減,然後隨著k值的繼續增大而趨於平緩,也就是說SSE和k的關系圖是一個手肘的形狀,而這個肘部對應的k值就是數據的真實聚類數。當然,這也是該方法被稱為手肘法的原因。

該方法的核心指標是輪廓系數(Silhouette Coefficient),某個樣本點Xi的輪廓系數定義如下:

其中,a是Xi與同簇的其他樣本的平均距離,稱為凝聚度,b是Xi與最近簇中所有樣本的平均距離,稱為分離度。而最近簇的定義是

其中p是某個簇Ck中的樣本。事實上,簡單點講,就是用Xi到某個簇所有樣本平均距離作為衡量該點到該簇的距離後,選擇離Xi最近的一個簇作為最近簇。

求出所有樣本的輪廓系數後再求平均值就得到了 平均輪廓系數 。平均輪廓系數的取值范圍為[-1,1],且簇內樣本的距離越近,簇間樣本距離越遠,平均輪廓系數越大,聚類效果越好。那麼,很自然地,平均輪廓系數最大的k便是最佳聚類數。

(1)容易理解,聚類效果不錯,雖然是局部最優, 但往往局部最優就夠了
(2)處理大數據集的時候,該演算法可以保證較好的伸縮性
(3)當簇近似高斯分布的時候,效果非常不錯
(4)演算法復雜度低

(1)K 值需要人為設定,不同 K 值得到的結果不一樣
(2)對初始的簇中心敏感,不同選取方式會得到不同結果
(3)對異常值敏感
(4)樣本只能歸為一類,不適合多分類任務
(5)不適合太離散的分類、樣本類別不平衡的分類、非凸形狀的分類

⑵ K-means 與KNN 聚類演算法

        K-means 演算法屬於聚類演算法的一種。聚類演算法就是把相似的對象通過靜態分類方法分成不同的組別或者更多的子集(subset),這樣讓在同一個子集中的成員對象都有相似的一些屬性。聚類演算法的任務是將數據集劃分為多個集群。在相同集群中的數據彼此會比不同集群的數據相似。通常來說,聚類演算法的目標就是通過相似特徵將數據分組並分配進不同的集群中。

K-means 聚類演算法是一種非監督學習演算法,被用於非標簽數據(data without defined categories or groups)。該演算法使用迭代細化來產生最終結果。演算法輸入的是集群的數量 K 和數據集。數據集是每個數據點的一組功能。  演算法從 Κ 質心的初始估計開始,其可以隨機生成或從數據集中隨機選擇 。然後演算法在下面兩個步驟之間迭代:

每個質心定義一個集群。在此步驟中,基於平方歐氏距離將每個數據點分配到其最近的質心。更正式一點, ci  屬於質心集合  C  ,然後每個數據點  x  基於下面的公式被分配到一個集群中。

在此步驟中,重新計算質心。這是通過獲取分配給該質心集群的所有數據點的平均值來完成的。公式如下:

K-means 演算法在步驟 1 和步驟 2 之間迭代,直到滿足停止條件(即,沒有數據點改變集群,距離的總和最小化,或者達到一些最大迭代次數)。

上述演算法找到特定預選 K 值和數據集標簽。為了找到數據中的集群數,用戶需要針對一系列 K 值運行 K-means 聚類演算法並比較結果。通常,沒有用於確定 K 的精確值的方法,但是可以使用以下技術獲得准確的估計。

Elbow point 拐點方法

通常用於比較不同 K 值的結果的度量之一是數據點與其聚類質心之間的平均距離。由於增加集群的數量將總是減少到數據點的距離,因此當 K 與數據點的數量相同時,增加 K 將總是減小該度量,達到零的極值。因此,該指標不能用作唯一目標。相反,繪制了作為 K 到質心的平均距離的函數,並且可以使用減小率急劇變化的「拐點」來粗略地確定 K 。

DBI(Davies-Bouldin Index)

DBI 是一種評估度量的聚類演算法的指標,通常用於評估 K-means 演算法中 k 的取值。簡單的理解就是:DBI 是聚類內的距離與聚類外的距離的比值。所以,DBI 的數值越小,表示分散程度越低,聚類效果越好。

還存在許多用於驗證 K 的其他技術,包括交叉驗證,信息標准,信息理論跳躍方法,輪廓方法和 G 均值演算法等等。

需要提前確定 K 的選值或者需嘗試很多 K 的取值

數據必須是數字的,可以通過歐氏距離比較

對特殊數據敏感,很容易受特殊數據影響

對初始選擇的質心/中心(centers)敏感

之前介紹了  KNN (K 鄰近)演算法 ,感覺這兩個演算法的名字很接近,下面做一個簡略對比。

K-means  :

聚類演算法

用於非監督學習

使用無標簽數據

需要訓練過程

K-NN :

分類演算法

用於監督學習

使用標簽數據

沒有明顯的訓練過程

鄰近演算法,或者說K最近鄰(kNN,k-NearestNeighbor)分類演算法是數據挖掘分類技術中最簡單的方法之一。所謂K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。Cover和Hart在1968年提出了最初的鄰近演算法。KNN是一種分類(classification)演算法,它輸入基於實例的學習(instance-based learning),屬於懶惰學習(lazy learning)即KNN沒有顯式的學習過程,也就是說沒有訓練階段,數據集事先已有了分類和特徵值,待收到新樣本後直接進行處理。與急切學習(eager learning)相對應。

KNN是通過測量不同特徵值之間的距離進行分類。 

思路是:如果一個樣本在特徵空間中的k個最鄰近的樣本中的大多數屬於某一個類別,則該樣本也劃分為這個類別。KNN演算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。

提到KNN,網上最常見的就是下面這個圖,可以幫助大家理解。

我們要確定綠點屬於哪個顏色(紅色或者藍色),要做的就是選出距離目標點距離最近的k個點,看這k個點的大多數顏色是什麼顏色。當k取3的時候,我們可以看出距離最近的三個,分別是紅色、紅色、藍色,因此得到目標點為紅色。

演算法的描述:

1)計算測試數據與各個訓練數據之間的距離;

2)按照距離的遞增關系進行排序;

3)選取距離最小的K個點;

4)確定前K個點所在類別的出現頻率;

5)返回前K個點中出現頻率最高的類別作為測試數據的預測分類

二、關於 K 的取值

K:臨近數,即在預測目標點時取幾個臨近的點來預測。

K值得選取非常重要,因為:

如果當K的取值過小時,一旦有雜訊得成分存在們將會對預測產生比較大影響,例如取K值為1時,一旦最近的一個點是雜訊,那麼就會出現偏差,K值的減小就意味著整體模型變得復雜,容易發生過擬合;

如果K的值取的過大時,就相當於用較大鄰域中的訓練實例進行預測,學習的近似誤差會增大。這時與輸入目標點較遠實例也會對預測起作用,使預測發生錯誤。K值的增大就意味著整體的模型變得簡單;

如果K==N的時候,那麼就是取全部的實例,即為取實例中某分類下最多的點,就對預測沒有什麼實際的意義了;

K的取值盡量要取奇數,以保證在計算結果最後會產生一個較多的類別,如果取偶數可能會產生相等的情況,不利於預測。

K的取法:

 常用的方法是從k=1開始,使用檢驗集估計分類器的誤差率。重復該過程,每次K增值1,允許增加一個近鄰。選取產生最小誤差率的K。

一般k的取值不超過20,上限是n的開方,隨著數據集的增大,K的值也要增大。

三、關於距離的選取

距離就是平面上兩個點的直線距離

關於距離的度量方法,常用的有:歐幾里得距離、餘弦值(cos), 相關度 (correlation), 曼哈頓距離 (Manhattan distance)或其他。

Euclidean Distance 定義:

兩個點或元組P1=(x1,y1)和P2=(x2,y2)的歐幾里得距離是

距離公式為:(多個維度的時候是多個維度各自求差)

四、總結

KNN演算法是最簡單有效的分類演算法,簡單且容易實現。當訓練數據集很大時,需要大量的存儲空間,而且需要計算待測樣本和訓練數據集中所有樣本的距離,所以非常耗時

KNN對於隨機分布的數據集分類效果較差,對於類內間距小,類間間距大的數據集分類效果好,而且對於邊界不規則的數據效果好於線性分類器。

KNN對於樣本不均衡的數據效果不好,需要進行改進。改進的方法時對k個近鄰數據賦予權重,比如距離測試樣本越近,權重越大。

KNN很耗時,時間復雜度為O(n),一般適用於樣本數較少的數據集,當數據量大時,可以將數據以樹的形式呈現,能提高速度,常用的有kd-tree和ball-tree。

⑶ kmeans聚類演算法是什麼

K-means演算法是最為經典的基於劃分的聚類方法,是十大經典數據挖掘演算法之一。K-means演算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。

聚類屬於無監督學習,以往的回歸、樸素貝葉斯、SVM等都是有類別標簽y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特徵x,比如假設宇宙中的星星可以表示成三維空間中的點集。

(3)kmeans迭代演算法結束條件擴展閱讀:

k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個「中心對象」(引力中心)來進行計算的。

(1)適當選擇c個類的初始中心;

(2)在第k次迭代中,對任意一個樣本,求其到c個中心的距離,將該樣本歸到距離最短的中心所在的類;

(3)利用均值等方法更新該類的中心值;

(4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。

⑷ kmeans演算法原理

kmeans演算法原理如下:

K-means演算法是一種典型的基於劃分的聚類演算法該演算法具有運算速度快,執行過程簡單的優點,在很多大數據處理領域得到了廣泛的應用。

利用相似性度量方法來衡量數據集中所有數據之間的關系,將關系比較密切的數據劃分到一個集合中。K-means演算法首先需要選擇K個初始化聚類中,計算每個數據對象到K個初始化聚類中心的距離。

2、缺點:需要人工預先確定初始K值,該值與實際的類另數可能不吻合。tK均值只能收斂到局部最優。因為求解這個代價函數是個NP問題,採用的是貪心策略,所以只能通過多次迭代收斂到局部最優,而不是全局最優。

K<均值的效果受初始值和離群點的影響大。因為k均值本質上是基於距離度量來劃分的,均值和差大的維度將對數據的聚類結帆山塌果產生決定性的影響,因此需要進行歸-化處理:此外,離群點或雜訊對均值會產生影響,導致中心偏移,因此需要進行預處理。

⑸ K-MEANS演算法的處理流程

(1) 從 n個數據對象任意選擇 k 個對象作為初始聚類中心;
(2) 根據每個聚類對象的均值(中心對象),計算每個對象與這些中心對象的距離;並罩慧畝根據最小距離重新對相應對象進行劃分;
(3) 重新計算每個(有變化)聚類的均值(中心對象);
(4) 計算標准測度函數,當滿足一定條件,如函數收斂時,則演算法終止;如果條件不滿足則回到步驟(2)。 k-means 演算法接受輸入量 k ;然後將n個數據對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個「中心對象」(引力中心)來進行計算的。
k-means 演算法的工作過程說明如下:首先從n個數據對象任意選擇 k 個對象作為初始聚類中心;而對於所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復這一過程直到標准測度函數開始收斂為止。一般都採用均方差作為標准測度函數. k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。
演算法的時間復雜度上物森界為O(n*k*t), 其中t是迭代次數。
k-means演算法是一種基於樣本間相似性度量的間接聚類方法,屬於非監督學習方法。此演算法以k為參數,把n 個對象分為k個簇,以使簇內具有較高的相似度,而且簇間的相似度較低。相似度的計算根據一個簇中對象的平均值(被看作簇的重心)來進行。此演算法首先隨機選擇k個對象,每個對象代表一個聚類的質心。對於其餘的每一個對象,根據該對象與各聚類質心之間的距離,把它分配到與之最相似的聚類中。然後,計算每碧唯個聚類的新質心。重復上述過程,直到准則函數收斂。k-means演算法是一種較典型的逐點修改迭代的動態聚類演算法,其要點是以誤差平方和為准則函數。逐點修改類中心:一個象元樣本按某一原則,歸屬於某一組類後,就要重新計算這個組類的均值,並且以新的均值作為凝聚中心點進行下一次象元素聚類;逐批修改類中心:在全部象元樣本按某一組的類中心分類之後,再計算修改各類的均值,作為下一次分類的凝聚中心點。

⑹ 聚類演算法--KMeans

    與分類、序列標注等任務不同,聚類是在事先並不知道任何樣本標簽的情況下,通過數據之間的內在關系把樣本劃分為若干類別,使得同類別樣本之間的相似度高,不同類別之間的樣本相似度低(即增大類內聚,減少類間距)。    

    聚類屬於非監督學習,K均值聚類是最基礎常用的聚類演算法。它的基本思想是,通過迭代尋找K個簇(Cluster)的一種劃分方案,使得聚類結果對應的損失函數最小。其中,損失函數可以定義為各個樣本距離所屬簇中心點的誤差平方和。

其中 代表第i個樣本, 是 所屬的簇,  代表簇對應的中心點,M是樣本總數。

相關概念:

    K值: 要得到的簇的個數。

    質心: 每個簇的均值向量。即向量各維取平均即可。

    距離量度: 常用歐幾里得距離和餘弦相似度(先標准化)。

    KMeans的主要思想是:在給定K值和K個初始類簇中心點的情況下,把每個點(亦即數據記錄)分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之後,根據一個類簇內的所有點重新計算該類簇的中心點(取平均值),然後再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數。

    KMeans的核心目標是將給定的數據集劃分成K個簇(K是超餐),並給出每個樣本數據對應的中心點。具體步驟非常簡單:

    (1)首先確定一個K值,即我們希望將數據集經過聚類得到k個集合。

    (2)從數據集中隨機選擇K個數據點作為質心。

    (3)對數據集中每一個點,計算其與每一個質心的距離(如歐式距離),離哪個質心近,就劃分到哪個質心所屬的集合。

    (4)把所有數據歸好集合後,一共有K個集合。然後重新計算每個集合的質心。

    (5)如果新計算出來的質心和原來的質心之間的距離小於某一個設置的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),我們可以認為聚類已經達到期望的結果,演算法終止。

    (6)如果新質心和原質心距離變化很大,需要迭代3-5步驟。

KMeans最核心的部分是先固定中心點,調整每個樣本所屬的類別來減少J;再固定每個樣本的類別,調整中心點繼續減小J。兩個過程交替循環,J單調遞減直到極小值,中心點和樣本劃分的類別同時收斂。

KMeans的優點 :

 高效可伸縮,計算復雜度為O(NKt)接近於線性(N是數據量,K是聚類總數,t是迭代輪數)。

 收斂速度快,原理相對通俗易懂,可解釋性強。

當結果簇是密集的,而簇與簇之間區別是明顯時,他的效果較好。主要需要調參的參數僅僅是簇數K。

缺點 :

 受初始值和異常點影響,聚類結果可能不是全局最優而是局部最優。K-Means演算法對初始選取的質心點是敏感的,不同的隨機種子點得到的聚類結果完全不同,對結果影響很大。

 K是超參數,一般需要按經驗選擇。

 對噪音和異常點比較的敏感,用來檢測異常值。

 只能發現球狀的簇。在K-Means中,我們用單個點對cluster進行建模,這實際上假設各個cluster的數據是呈高維球型分布的,但是在生活中出現這種情況的概率並不算高。例如,每一個cluster是一個一個的長條狀的,K-Means的則根本識別不出來這種類別( 這種情況可以用GMM )。實際上,K-Means是在做凸優化,因此處理不了非凸的分布。

根據以上特點,我們可以從下面幾個角度對演算法做調優。

(1)數據預處理:歸一化和異常點過濾

    KMeans本質是一種基於歐式距離度量的數據劃分方法,均值和方差大的維度將對數據的聚類結果產生決定性影響 。所以在聚類前對數據( 具體的說是每一個維度的特徵 )做歸一化和單位統一至關重要。此外,異常值會對均值計算產生較大影響,導致 中心偏移 ,這些雜訊點最好能提前過濾。

(2)合理選擇K值

    K值的選擇一般基於實驗和多次實驗結果。例如採用 手肘法 ,嘗試不同K值並將對應的損失函數畫成折線。手肘法認為圖上的 拐點就是K的最佳值 (k=3)。

為了將尋找最佳K值的過程自動化,研究人員提出了Gap Statistic方法。不需要人們用肉眼判斷,只需要找到最大的Gap Statistic對應的K即可。

       損失函數記為  ,當分為K類時,Gap Statistic定義為:  。 是 的期望 ,一般由蒙特卡洛模擬產生。我們在樣本所在的區域內按照均勻分布隨機地產生和原始樣本數一樣多的隨機樣本,並對這個隨機樣本做KMeans,得到一個 ,重復多次就可以計算出 的近似值。

       的物理含義是隨機樣本的損失與實際樣本的損失之差。Gap越大說明聚類的效果越好 。一種極端情況是,隨著K的變化 幾乎維持一條直線保持不變。說明這些樣本間沒有明顯的類別關系,數據分布幾乎和均勻分布一致,近似隨機。此時做聚類沒有意義。

(3)改進初始值的選擇

    之前我們採用隨機選擇K個中心的做法,可能導致不同的中心點距離很近,就需要更多的迭代次數才能收斂。如果在選擇初始中心點時能 讓不同的中心盡可能遠離 ,效果往往更好。這類演算法中,以K-Means++演算法最具影響力。

(4)採用核函數

    主要思想是通過一個非線性映射,將輸入空間中的數據點映射到高維的特徵空間中,並在新的空間進行聚類。非線性映射增加了數據點線性可分的概率(與SVM中使用核函數思想類似)對於非凸的數據分布可以達到更為准確的聚類結果。

 (1)初始的K個質心怎麼選?

    最常用的方法是隨機選,初始質心的選取對最終聚類結果有影響,因此演算法一定要多執行幾次,哪個結果更合理,就用哪個結果。當然也有一些優化的方法,第一種是選擇彼此距離最遠的點,具體來說就是先選第一個點,然後選離第一個點最遠的當第二個點,然後選第三個點,第三個點到第一、第二兩點的距離之和最小,以此類推。第二種是先根據其他聚類演算法(如層次聚類)得到聚類結果,從結果中每個分類選一個點

(2)關於離群值?

    離群值就是遠離整體的,非常異常、非常特殊的數據點,在聚類之前應該將這些"極大""極小"之類的離群數據都去掉,否則會對於聚類的結果有影響。但是,離散值往往自身就很有分析的價值,可以把離群值單獨作為一類來分析。

(3)單位要一致!

(4)標准化

    數據中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那麼在計算距離的時候Y起到的作用就比X大很多,X對於距離的影響幾乎可以忽略,這也有問題。因此,如果K-Means聚類中選擇歐幾里得距離計算距離,數據集又出現了上面所述的情況,就一定要進行數據的標准化(normalization),即將數據按比例縮放,使之落入一個小的特定區間。

    K-Means是無監督學習的聚類演算法,沒有樣本輸出;而KNN是監督學習的分類演算法,有對應的類別輸出 。KNN基本不需要訓練,對測試集裡面的點,只需要找到在訓練集中最近的K個點,用這最近的K個點的類別來決定測試點的類別。而K-Means則有明顯的訓練過程,找到K個類別的最佳質心,從而決定樣本的簇類別。當然,兩者也有一些相似點,兩個演算法都包含一個過程,即找出和某一個點最近的點。 兩周都利用了最近鄰的思想 。

⑺ K-means原理、優化、應用

K-Means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。K-Means演算法有大量的變體,本文就從最傳統的K-Means演算法講起,在其基礎上講述K-Means的優化變體方法。包括初始化優化K-Means++, 距離計算優化elkan K-Means演算法和大數據情況下的優化Mini Batch K-Means演算法。

    K-Means演算法的思想很簡單,對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為K個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。

1、隨機選擇K個聚類的初始中心。

2、對任意一個樣本點,求其到K個聚類中心的距離,將樣本點歸類到距離最小的中心的聚類。

3、每次迭代過程中,利用均值等方法更新各個聚類的中心點(質心)。

4、對K個聚類中心,利用2、3步迭代更新後,如果位置點變化很小(可以設置閾值),則認為達到穩定狀態,迭代結束。(畫圖時,可以對不同的聚類塊和聚類中心可選擇不同的顏色標注)

1、原理比較簡單,實現也是很容易,收斂速度快。 

2、聚類效果較優。 

3、演算法的可解釋度比較強。 

4、主要需要調參的參數僅僅是簇數k。

1、K值的選取不好把握 

2、對於不是凸的數據集比較難收斂 

3、如果各隱含類別的數據不平衡,比如各隱含類別的數據量嚴重失衡,或者各隱含類別的方差不同,則聚類效果不佳。 

4、 最終結果和初始點的選擇有關,容易陷入局部最優。

5、對噪音和異常點比較的敏感。

    解決K-Means演算法對 初始簇心 比較敏感的問題,二分K-Means演算法是一種弱化初始質心的一種演算法。

1、將所有樣本數據作為一個簇放到一個隊列中。

2、從隊列中選擇一個簇進行K-Means演算法劃分,劃分為兩個子簇,並將子簇添加到隊列中。

3、循環迭代步驟2操作,直到中止條件達到(聚簇數量、最小平方誤差、迭代次數等)。

4、隊列中的簇就是最終的分類簇集合。

從隊列中選擇劃分聚簇的規則一般有兩種方式;分別如下:

1、對所有簇計算誤差和SSE(SSE也可以認為是距離函數的一種變種),選擇SSE最大的聚簇進行劃分操作(優選這種策略)。

2、選擇樣本數據量最多的簇進行劃分操作:

    由於 K-means 演算法的分類結果會受到初始點的選取而有所區別,因此有提出這種演算法的改進: K-means++ 。

    其實這個演算法也只是對初始點的選擇有改進而已,其他步驟都一樣。初始質心選取的基本思路就是, 初始的聚類中心之間的相互距離要盡可能的遠 。

1、隨機選取一個樣本作為第一個聚類中心 c1;

2、計算每個樣本與當前已有類聚中心最短距離(即與最近一個聚類中心的距離),用 D(x)表示;這個值越大,表示被選取作為聚類中心的概率較大;最後,用輪盤法選出下一個聚類中心。

3、重復步驟2,知道選出 k 個聚類中心。

4、選出初始點(聚類中心),就繼續使用標準的 k-means 演算法了。

盡管K-Means++在聚類中心的計算上浪費了很多時間,但是在迭代過程中,k-mean 本身能快速收斂,因此演算法實際上降低了計算時間。

      解決K-Means++演算法缺點而產生的一種演算法;主要思路是改變每次遍歷時候的取樣規則,並非按照K-Means++演算法每次遍歷只獲取一個樣本,而是每次獲取K個樣本,重復該取樣操作O(logn)次 (n是樣本的個數) ,然後再將這些抽樣出來的樣本聚類出K個點,最後使用這K個點作為K-Means演算法的初始聚簇中心點。實踐證明:一般5次重復採用就可以保證一個比較好的聚簇中心點。

1、在N個樣本中抽K個樣本,一共抽logn次,形成一個新的樣本集,一共有Klogn個數據。

2、在新數據集中使用K-Means演算法,找到K個聚簇中心。

3、把這K個聚簇中心放到最初的樣本集中,作為初始聚簇中心。

4、原數據集根據上述初始聚簇中心,再用K-Means演算法計算出最終的聚簇。

        Canopy屬於一種『粗』聚類演算法,即使用一種簡單、快捷的距離計算方法將數據集分為若干可重疊的子集canopy,這種演算法不需要指定k值、但精度較低,可以結合K-means演算法一起使用:先由Canopy演算法進行粗聚類得到k個質心,再使用K-means演算法進行聚類。

 1、將原始樣本集隨機排列成樣本列表L=[x1,x2,...,xm](排列好後不再更改),根據先驗知識或交叉驗證調參設定初始距離閾值T1、T2,且T1>T2 。

2、從列表L中隨機選取一個樣本P作為第一個canopy的質心,並將P從列表中刪除。

3、從列表L中隨機選取一個樣本Q,計算Q到所有質心的距離,考察其中最小的距離D:

如果D≤T1,則給Q一個弱標記,表示Q屬於該canopy,並將Q加入其中;

如果D≤T2,則給Q一個強標記,表示Q屬於該canopy,且和質心非常接近,所以將該canopy的質心設為所有強標記樣本的中心位置,並將Q從列表L中刪除;

 如果D>T1,則Q形成一個新的聚簇,並將Q從列表L中刪除。

4、重復第三步直到列表L中元素個數為零。

1、『粗』距離計算的選擇對canopy的分布非常重要,如選擇其中某個屬性、其他外部屬性、歐式距離等。

2、當T2<D≤T1時,樣本不會從列表中被刪除,而是繼續參與下一輪迭代,直到成為新的質心或者某個canopy的強標記成員。

3、T1、T2的取值影響canopy的重疊率及粒度:當T1過大時,會使樣本屬於多個canopy,各個canopy間區別不明顯;當T2過大時,會減少canopy個數,而當T2過小時,會增加canopy個數,同時增加計算時間。

4、canopy之間可能存在重疊的情況,但是不會存在某個樣本不屬於任何canopy的情況。

5、Canopy演算法可以消除孤立點,即刪除包含樣本數目較少的canopy,往往這些canopy包含的是孤立點或噪音點。

    由於K-Means演算法存在初始聚簇中心點敏感的問題,常用使用Canopy+K-Means演算法混合形式進行模型構建。

1、先使用canopy演算法進行「粗」聚類得到K個聚類中心點。

2、K-Means演算法使用Canopy演算法得到的K個聚類中心點作為初始中心點,進行「細」聚類。

1、執行速度快(先進行了一次聚簇中心點選擇的預處理);

2、不需要給定K值,應用場景多。

3、能夠緩解K-Means演算法對於初始聚類中心點敏感的問題。

    Mini Batch K-Means演算法是K-Means演算法的一種優化變種,採用 小規模的數據子集 (每次訓練使用的數據集是在訓練演算法的時候隨機抽取的數據子集) 減少計算時間 ,同時試圖優化目標函數;Mini Batch K-Means演算法可以減少K-Means演算法的收斂時間,而且產生的結果效果只是略差於標准K-Means演算法。

1、首先抽取部分數據集,使用K-Means演算法構建出K個聚簇點的模型。

2、繼續抽取訓練數據集中的部分數據集樣本數據,並將其添加到模型中,分配給距離最近的聚簇中心點。

3、更新聚簇的中心點值。

4、循環迭代第二步和第三步操作,直到中心點穩定或者達到迭代次數,停止計算操作。

https://www.jianshu.com/p/f0727880c9c0

⑻ K-Means 聚類演算法

問題導入

    假如有這樣一種情況,在一天你想去某個城市旅遊,這個城市裡你想去的有70個地方,現在你只有每一個地方的地址,這個地址列表很長,有70個位置。事先肯定要做好攻略,你要把一些比較接近的地方放在一起組成一組,這樣就可以安排交通工具抵達這些組的「某個地址」,然後步行到每個組內的地址。那麼,如何確定這些組,如何確定這些組的「某個地址」?答案就是聚類。而本文所提供的k-means聚類分析方法就可以用於解決這類問題。

一,聚類思想

        所謂聚類演算法是指將一堆沒有標簽的數據自動劃分成幾類的方法,屬於無監督學習方法,這個方法要保證同一類的數據有相似的特徵,如下圖:

        根據樣本之間的距離或者說相似性,把越相似,差異越小的樣本聚成一類(簇),最後形成多個簇,使同一個簇內部的樣本相似度高,不同簇之間差異性高。

二,K-Means聚類分析演算法

        K-Means是一種基於自下而上的聚類分析方法,基本概念就是空間中有N個點,初始選擇K個點作為中心聚類點,將N個點分別與K個點計算距離,選擇自己最近的點作為自己的中心點,不斷地更新中心聚集點。

相關概念:

        K值:要得到的簇的個數

        質心:每個簇的均值向量,即向量各維取品軍即可

        距離度量:常用歐幾里得距離和餘弦相似度(先標准化)

        兩點之間的距離:

演算法流程:

        1    首先確定一個K值,即我們希望將數據集經過聚類得到 K個集合;

        2    從數據集中隨機選擇K個數據點作為質心;

        3    對數據集中每一個點,計算其與每個質心的距離(如歐式距離),離哪個質心近,就劃分到哪個質心所屬的集合

        4    把所有數據歸好集合,一共有K個集合,然後重新計算每個集合的質心;

        5    如果新計算出來的質心和原來的質心之間的距離小於某一個設置的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),我們可以認為聚類已經達到期望的結果,演算法終止。

        6    如果新質心和原質心距離變化大,需要迭代3-5步驟

K-means實現過程

K-means 聚類演算法是一種非監督學習演算法,被用於非標簽數據(data without defined categories or groups)。該演算法使用迭代細化來產生最終結果。演算法輸入的是集群的數量 K 和數據集。數據集是每個數據點的一組功能。

演算法從 Κ 質心的初始估計開始,其可以隨機生成或從數據集中隨機選擇 。然後演算法在下面兩個步驟之間迭代:

1.數據分配:

每個質心定義一個集群。在此步驟中,基於平方歐氏距離將每個數據點分配到其最近的質心。更正式一點, ci 屬於質心集合 C ,然後每個數據點 x 基於下面的公式被分配到一個集群中。

其中 dist(·)是標准(L2)歐氏距離。讓指向第 i 個集群質心的數據點集合定為 Si 。

2. 質心更新:

在此步驟中,重新計算質心。這是通過獲取分配給該質心集群的所有數據點的平均值來完成的。公式如下:

K-means 演算法在步驟 1 和步驟 2 之間迭代,直到滿足停止條件(即,沒有數據點改變集群,距離的總和最小化,或者達到一些最大迭代次數)。

K 值的選擇

上述演算法找到特定預選 K 值和數據集標簽。為了找到數據中的集群數,用戶需要針對一系列 K 值運行 K-means 聚類演算法並比較結果。通常,沒有用於確定 K 的精確值的方法,但是可以使用以下技術獲得准確的估計。

Elbow point 拐點方法

通常用於比較不同 K 值的結果的度量之一是數據點與其聚類質心之間的平均距離。由於增加集群的數量將總是減少到數據點的距離,因此當 K 與數據點的數量相同時,增加 K 將總是減小該度量,達到零的極值。因此,該指標不能用作唯一目標。相反,繪制了作為 K 到質心的平均距離的函數,並且可以使用減小率急劇變化的「拐點」來粗略地確定 K 。

DBI(Davies-Bouldin Index)

DBI 是一種評估度量的聚類演算法的指標,通常用於評估 K-means 演算法中 k 的取值。簡單的理解就是:DBI 是聚類內的距離與聚類外的距離的比值。所以,DBI 的數值越小,表示分散程度越低,聚類效果越好。

還存在許多用於驗證 K 的其他技術,包括交叉驗證,信息標准,信息理論跳躍方法,輪廓方法和 G 均值演算法等等。

三,數學原理

K-Means採用的啟發式很簡單,可以用下面一組圖來形象的描述:

上述a表達了初始的數據集,假設 k=2 。在圖b中,我們隨機選擇了兩個 k 類所對應的類別質點,即圖中的紅色質點和藍色質點,然後分別求樣本中所有點到這兩個質心的距離,並標記每個樣本類別為和該樣本距離最小的質心的類別,如圖c所示,經過計算樣本和紅色質心和藍色質心的距離,我們得到了所有樣本點的第一輪迭代後的類別。此時我們對我們當前標記為紅色和藍色的點分別求其新的質心,如圖d所示,新的紅色質心和藍色質心大熱位置已經發生了變化。圖e和圖f重復了我們在圖c和圖d的過程,即將所有點的類別標記為距離最近的質心的類別並求出新的質心。最終我們得到的兩個類別如圖f.

四,實例

坐標系中有六個點:

1、我們分兩組,令K等於2,我們隨機選擇兩個點:P1和P2

2、通過勾股定理計算剩餘點分別到這兩個點的距離:

3、第一次分組後結果:

        組A:P1

        組B:P2、P3、P4、P5、P6

4、分別計算A組和B組的質心:

        A組質心還是P1=(0,0)

        B組新的質心坐標為:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)

5、再次計算每個點到質心的距離:

6、第二次分組結果:

        組A:P1、P2、P3

        組B:P4、P5、P6

7、再次計算質心:

        P哥1=(1.33,1) 

        P哥2=(9,8.33)

8、再次計算每個點到質心的距離:

9、第三次分組結果:

        組A:P1、P2、P3

        組B:P4、P5、P6

可以發現,第三次分組結果和第二次分組結果一致,說明已經收斂,聚類結束。

五、K-Means的優缺點

優點:

1、原理比較簡單,實現也是很容易,收斂速度快。

2、當結果簇是密集的,而簇與簇之間區別明顯時, 它的效果較好。

3、主要需要調參的參數僅僅是簇數k。

缺點:

1、K值需要預先給定,很多情況下K值的估計是非常困難的。

2、K-Means演算法對初始選取的質心點是敏感的,不同的隨機種子點得到的聚類結果完全不同 ,對結果影響很大。

3、對噪音和異常點比較的敏感。用來檢測異常值。

4、採用迭代方法, 可能只能得到局部的最優解,而無法得到全局的最優解 。

六、細節問題

1、K值怎麼定?

答:分幾類主要取決於個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋,更符合分析目的等。或者可以把各種K值算出的 E 做比較,取最小的 E 的K值。

2、初始的K個質心怎麼選?

        答:最常用的方法是隨機選,初始質心的選取對最終聚類結果有影響,因此演算法一定要多執行幾次,哪個結果更reasonable,就用哪個結果。      當然也有一些優化的方法,第一種是選擇彼此距離最遠的點,具體來說就是先選第一個點,然後選離第一個點最遠的當第二個點,然後選第三個點,第三個點到第一、第二兩點的距離之和最小,以此類推。第二種是先根據其他聚類演算法(如層次聚類)得到聚類結果,從結果中每個分類選一個點。

3、關於離群值?

        答:離群值就是遠離整體的,非常異常、非常特殊的數據點,在聚類之前應該將這些「極大」「極小」之類的離群數據都去掉,否則會對於聚類的結果有影響。但是,離群值往往自身就很有分析的價值,可以把離群值單獨作為一類來分析。

4、單位要一致!

        答:比如X的單位是米,Y也是米,那麼距離算出來的單位還是米,是有意義的。但是如果X是米,Y是噸,用距離公式計算就會出現「米的平方」加上「噸的平方」再開平方,最後算出的東西沒有數學意義,這就有問題了。

5、標准化

        答:如果數據中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那麼,在計算距離的時候Y起到的作用就比X大很多,X對於距離的影響幾乎可以忽略,這也有問題。因此,如果K-Means聚類中選擇歐幾里德距離計算距離,數據集又出現了上面所述的情況,就一定要進行數據的標准化(normalization),即將數據按比例縮放,使之落入一個小的特定區間。

⑼ k-means聚類演算法常用的終止條件有哪些

K-means 演算法屬於聚類分析方法中一種基本的且應用最廣泛的劃分演算法,它是一種已知聚類類別數的聚類演算法。指定類別數為K,對樣本集合進行聚類,聚類的結果由K 個聚類中心來表達,基於給定的聚類目標函數(或者說是聚類效果判別准則),演算法採用迭代更新的方法,每一次迭代過程都是向目標函數值減小的方向進行,最終的聚類結果使目標函數值取得極小值,達到較優的聚類效果。使用平均誤差准則函數E作為聚類結果好壞的衡量標准之一,保證了演算法運行結果的可靠性和有效性。

⑽ k-means演算法數據需標准化嗎

理論上是不需要的,因為標准化的線性變換不會影響距離的相對早橘大小,但是實踐時,數據標准化與否結果是不陸槐團同的,明銀可能與演算法具體實現有關。

閱讀全文

與kmeans迭代演算法結束條件相關的資料

熱點內容
樂高機器人的編程軟體下載 瀏覽:223
工作中怎麼使用加密狗 瀏覽:735
雲伺服器的後台找不到 瀏覽:98
php逐行寫入文件 瀏覽:912
javaoracleweb 瀏覽:440
京東加密碼怎麼弄 瀏覽:467
單片機程序員培訓 瀏覽:992
PHP商城源代碼csdn 瀏覽:636
怎麼把電腦里文件夾挪出來 瀏覽:693
java流程處理 瀏覽:685
ftp創建本地文件夾 瀏覽:660
腰椎第一節壓縮 瀏覽:738
xp去掉加密屬性 瀏覽:117
2345怎麼壓縮文件 瀏覽:982
迷你奪寶新演算法 瀏覽:407
伺服器如何防止木馬控制 瀏覽:715
壓縮空氣用電磁閥 瀏覽:742
微信為什麼不能設置加密認證 瀏覽:672
鄧倫參加密室逃脫視頻 瀏覽:391
音頻壓縮編碼標准 瀏覽:300