1. 程式人生 > >kmeans聚類演算法改進

kmeans聚類演算法改進

由於kmeans聚類演算法對離群點或者噪音很敏感,而且適合凸規模的資料集,而且可能陷入區域性最優等等問題,前輩們又提出了很多改進的演算法!(總參考:機器學習(25)之K-Means聚類演算法詳解

二分kmeans(bisecting K-means)演算法:

思路:

1)將所有的資料看做一個簇;
2)當簇的個數小於所要求的k時候:
      對每一個簇:
                    假設對當前的簇進行k-means聚類(k=2),計算k-means之後的
                        當前簇的SSE1(Sum of Squared Error);
                    計算剩下的簇的SSE2;
                    然後總的SSE=SSE1+SSE2;
        選擇SSE最小的簇進行k-means
聚類(k=2);

以上就是二分k-means的總體思路,那麼它相比較k-means有什麼提升和改進呢,看看它的優點:

  1. 不受初始化問題的影響,而且每步都能保證得到的總體誤差最小;
  2. 加速kmeans演算法的執行速度,進行的運算有所降低;
  3. 《Machine Learning in action》說這種可以克服k-means收斂於區域性最優,達到全域性最優,但個人感覺這個演算法並不能達到全域性最優,有對這塊比較熟悉的大佬還望不吝賜教!

k-mediods(k中心點演算法)

思路:
1)隨機選取k個樣本作為k個簇;
2)對每一個數據點來說從k個簇中進行選擇,將其歸類為距離它最近的簇中;
3)此時進行質心轉移操作,k-means選用的是簇中所有節點的均值,而k-mediods則選用簇內距離其他各個頂點絕對誤差最小的點,作為新的質心;
4)如果新的質心與原質心相同 ,則停止;否則轉回2)步驟進行迴圈操作!

優點:
1)相比k-means演算法可以處理大規模的資料集;
2)對於離群點或者噪聲,k-mediods對其沒有那麼敏感,離群點就不會造成劃分的結果偏差太大;
3)相比k-means,k-mediods的時間複雜度提升了o(n),更快一些!
參考:K-mediods演算法

Mini-batch k-means演算法

思路:
1)隨機選擇k個樣本作為k個簇,注意k的選擇方法,在k-means那篇部落格中有介紹k的選取方法;
2)隨機選擇小批量的資料集,並將其歸屬到距離它最近的質心中,然後更新質心;
3)當質心穩定或者達到最大迭代次數的話停止迭代!

優點
- 可以提高k-means演算法的效能,降低它的時間複雜度;

k-means++演算法

思路:
1)將所有的資料點看做一個簇,隨機選擇一個節點作為第一個質心;
2)對每一個節點來說,計算D(i,k),即該節點i距離不同的質心的距離,D(i)的計算方法:
這裡寫圖片描述
然後計算每個樣本被選為第k個質心簇的概率這裡寫圖片描述,D(i)越大被選中的概率越大,利用輪盤法進行下一個聚類中心的選擇。
3)重複2)直到達到k個簇停止!

PS:
輪盤法:
在2)中,我們計算了每個樣本點被選擇為下一個聚類中心的概率p(x),然後呢,要怎麼利用這些概率來求解呢,答案是執行加和操作,第一個點被選擇的概率為p(x0),第二個點被選擇的概率為[p(x0),p(x0)+p(x1)],第三個節點被選中的概率為[p(x0)+p(x1),p(x0)+p(x1)+p(x2)].,第n個節點為[∑p(xi),∑p(xj)],(i=∑(k=0~n-2),j=∑(k=0~n-1);然後隨即地生成0~1之間的隨機數,判斷它屬於哪個區間,那麼該區間對應的序列號就是被選擇出來的下一個聚類中心了,這樣選擇的話就可以使得D(x)越大的樣本被選為下一個聚類樣本的概率越大!

相關推薦

kmeans演算法改進

由於kmeans聚類演算法對離群點或者噪音很敏感,而且適合凸規模的資料集,而且可能陷入區域性最優等等問題,前輩們又提出了很多改進的演算法!(總參考:機器學習(25)之K-Means聚類演算法詳解) 二分kmeans(bisecting K-means)演算

KMeans演算法分析以及實現

KMeans KMeans是一種無監督學習聚類方法, 目的是發現數據中資料物件之間的關係,將資料進行分組,組內的相似性越大,組間的差別越大,則聚類效果越好。 無監督學習,也就是沒有對應的標籤,只有資料記錄.通過KMeans聚類,可以將資料劃分成一個簇,進而發現數據之間的關係.

從零開始實現Kmeans演算法

本系列文章的所有原始碼都將會開源,需要原始碼的小夥伴可以去我的 Github fork! 1. Kmeans聚類演算法簡介 由於具有出色的速度和良好的可擴充套件性,Kmeans聚類演算法算得上是最著名的聚類方法。Kmeans演算法是一個重複移動類中心

影象基本變換---KMeans演算法

本文將詳細介紹K-Means均值聚類的演算法及實現。    聚類是一個將資料集中在某些方面相似的資料成員進行分類組織的過程。K均值聚類是最著名的劃分聚類演算法,由於簡潔和效率使得他成為所有聚類演算法中最廣泛使用的。給定一個數據點集合和需要的聚類數目k,k由使用者指定,k均值

Scala語言實現Kmeans演算法

/** * @author weixu_000 */ import java.util.Random import scala.io.Source import java.io._ object Kmeans { val k = 5 val dim = 41

基礎演算法(二):Kmeans演算法的基本原理與應用

Kmeans聚類演算法的基本原理與應用       內容說明:主要介紹Kmeans聚類演算法的數學原理,並使用matlab程式設計實現Kmeans的簡單應用,不對之處還望指正。 一、Km

kmeans演算法及複雜度

kmeans是最簡單的聚類演算法之一,kmeans一般在資料分析前期使用,選取適當的k,將資料分類後,然後分類研究不同聚類下資料的特點。 演算法原理 隨機選取k箇中心點; 遍歷所有資料,將每個資料劃分到最近的中心點中; 計算每個聚類的平均值,並作為新的中心點; 重複

Kmeans演算法及其matlab原始碼

本文介紹了K-means聚類演算法,並註釋了部分matlab實現的原始碼。K-means演算法K-means演算法是一種硬聚類演算法,根據資料到聚類中心的某種距離來作為判別該資料所屬類別。K-means演算法以距離作為相似度測度。假設將物件資料集分為個不同的類,k均值聚類演算

KMeans演算法

1、什麼是聚類     所謂聚類就是將一組物件按照特徵劃分不為的小組,使得組內的差異性儘可能的小,組間的差異儘可能的大。例如,粗粒度的分類,按照學校實力,分為985、211高校,普通一本高校,二本高校,三本高校。如果再更加細的分類,一個學校裡面會按照所修的課程差異性分為不同

NLP——Kmeans演算法簡單實現

本例中主要是對二維點進行距離計算,開始得時候選取兩個心,最終聚為兩簇。 結束條件的判斷有很多種,這裡採用的是最簡單的:當兩個心不再變化了,則停止聚類。 內部距離和可以不需要計算,這裡輸出來做結果評估用。 public class Km_w2 { //初始

KMeans演算法示例

三個例子:1.二位點聚類 2.手寫字元聚類 3.影象壓縮 Clustering: K-Means In-Depth Here we’ll explore K Means Clustering, which is an unsupervised clus

大資料:Spark mlib(一) KMeans演算法原始碼分析

1. 聚類1.1 什麼是聚類?所謂聚類問題,就是給定一個元素集合D,其中每個元素具有n個可觀察屬性,使用演算法將集合D劃分成k個子集,要求每個子集內部的元素之間相異度儘可能低,而不同子集的元素相異度儘可能高,其中每個子集叫做一個簇。1.2 KMeans 聚類演算法K-Mean

Kmeans演算法在python下的實現--附測試資料

Kmeans演算法 1:隨機初始化一個聚類中心 2:根據距離將資料點劃分到不同的類中 3:計算代價函式 4:重新計算各類資料的中心作為聚類中心 5:重複2-4步直到代價函式不發生變化 測試資料: XY -1.260.46 -1.150.49 -1.190.36 -1.330

python實現簡單的kmeans演算法

問題描述:一堆二維資料,用kmeans演算法對其進行聚類,下面例子以分k=3為例。 原資料: 1.5,3.1 2.2,2.9 3,4 2,1 15,25 43,13 32,42 0,0 8,9 12,5 9,12 11,8 22,33 24,25 實現程式碼: #codin

Hadoop/MapReduce 及 Spark KMeans演算法實現

package kmeans; import java.io.BufferedReader; import java.io.DataInput; import java.io.DataOutput; import java.io.File; import java.io.

kmeans演算法及matlab實現

一、kmeans聚類演算法介紹:    kmeans演算法是一種經典的無監督機器學習演算法,名列資料探勘十大演算法之一。作為一個非常好用的聚類演算法,kmeans的思想和實現都比較簡單。kmeans的主要思想:把資料劃分到各個區域(簇),使得資料與區域中心的距

Spark MLlib中KMeans演算法的解析和應用

聚類演算法是機器學習中的一種無監督學習演算法,它在資料科學領域應用場景很廣泛,比如基於使用者購買行為、興趣等來構建推薦系統。 核心思想可以理解為,在給定的資料集中(資料集中的每個元素有可被觀察的n個屬性),使用聚類演算法將資料集劃分為k個子集,並且要求每個子集內部的元素之間的差異度儘可能低,而不同子集元素的差

機器學習實戰(Machine Learning in Action)學習筆記————06.k-均值演算法kMeans)學習筆記

機器學習實戰(Machine Learning in Action)學習筆記————06.k-均值聚類演算法(kMeans)學習筆記關鍵字:k-均值、kMeans、聚類、非監督學習作者:米倉山下時間:2018-11-3機器學習實戰(Machine Learning in Action,@author: Pet

演算法(一)—— k-means演算法以及其改進演算法

      聚類演算法是一種無監督學習,它把資料分成若干類,同一類中的資料的相似性應儘可能地大,不同類中的資料的差異性應儘可能地大。聚類演算法可分為“軟聚類”和“硬聚類”,對於“硬聚類”,樣本中的每一個點都是 100%確定分到某一個類別;而“軟聚類”是指樣本點以一定的概率被分

演算法KMEANS原理介紹

聚類演算法:KMEANS原理介紹 聚類介紹 聚類分析是一個無監督學習過程,一般是用來對資料物件按照其特徵屬性進行分組,經常被應用在客戶分群、欺詐檢測、影象分析等領域。K-means應該是最有名並且最經常使用的聚類演算法。 演算法介紹    KMeans演算法的基本思想是初