1. 程式人生 > >聚類分析之迭代聚類——“K-Means聚類…

聚類分析之迭代聚類——“K-Means聚類…

魯棒是Robust,英 [rə(ʊ)'bʌst]的音譯,也就是健壯、強壯、堅定、粗野的意思。魯棒性(robustness)就是系統的健壯性。常使用如:演算法的魯棒性。

演算法雜貨鋪轉載學習

演算法雜貨鋪——分類演算法之決策樹(Decision tree)

聚類演算法實踐(一)——層次聚類、K-means聚類

聚類之——“軟硬”之別

分類標準可以進行不同的分類。就好像人按照性別可以分成男人和女人,按照年齡可以分為老中青一樣。

聚類分析如果按照隸屬度的取值範圍可以分為兩類,一類叫硬聚類演算法,另一類就是模糊聚類演算法隸屬度的概念是從模糊集理論裡引申出來的。

傳統硬聚類演算法隸屬度只有兩個值 0 和 1。也就是說一個樣本只能完全屬於某一個類或者完全不屬於某一個類。舉個例子,把溫度分為兩類,大於10度為熱,小於或者等於10度為冷,這就是典型的“硬隸屬度”概念。那麼不論是5度還是負100度都屬於冷這個類,而不屬於熱這個類的。

模糊集裡的隸屬度是一個取值在[0 1]區間內的數。一個樣本同時屬於所有的類,但是通過隸屬度的大小來區分其差異。比如5度,可能屬於冷這類的隸屬度值為0.7,而屬於熱這個類的值為0.3。這樣做就比較合理,硬聚類也可以看做模糊聚類的一個特例。

一些僅為個人傾向的分析(不嚴謹或不盡規範):所謂的動態模糊分析法我在文獻裡很少見到好像並不主流,似乎沒有專門的這樣一種典型聚類演算法,可能是個別人根據自己需要設計並命名的一種針對模糊聚類的改進方法。有把每個不同樣本加權的,權值自己確定,這樣就冠以“動態"二字,這都是作者自己起的。也有別的也叫”動態“的,可能也不一樣,似乎都是個別人自己提出的。

概念:聚類與分類(

Classification)有別

 聚類(Clustering,屬無監督學習): ['klʌstərɪŋ],聚集,收集;分類歸併。 聚類是指根據“物以類聚”的原理,將本身沒有類別的樣本聚整合不同的組,這樣的一組資料物件的集合叫做,並且對每一個這樣的簇進行描述的過程。
它的目的是使得屬於同一個簇的樣本之間應該彼此相似,而不同簇的樣本應該足夠不相似
與分類規則不同,進行聚類前並不知道將要劃分成幾個組和什麼樣的組,也不知道根據哪些空間區分規則來定義組。
其目的旨在發現空間實體的屬性間的函式關係,挖掘的知識用以屬性名為變數的數學方程來表示。
當前,聚類技術正在蓬勃發展,涉及範圍包括資料探勘、統計學、機器學習、空間資料庫技術、生物學以及市場營銷等領域,聚類分析已經成為資料探勘研究領域中一個非常活躍的研究課題。
常見的聚類演算法包括:K-均值(K-Means)聚類演算法、K-中心點聚類演算法、CLARANS、BIRCH、CLIQUE、DBSCAN 就是把相似的東西分到一組。我們並不關心某一類是什麼,實現的目標只是把相似的東西聚到一起。 因此,一個聚類演算法通常只需要知道如何計算相似度就可以開始工作了,因此 clustering 通常並不需要使用訓練資料進行學習,這在 Machine Learning 中被稱作 unsupervised learning (無監督學習
)。 分類(Classification),則不同,對於一個 classifier ,通常需要你告訴它“這個東西被分為某某類”這樣一些例子,理想情況下,一個 classifier 會從它得到的訓練集中進行“學習”,從而具備對未知資料進行分類的能力,這種提供訓練資料的過程通常叫做 supervised learning (監督學習)。 例:拿來一個新水果,我們按著他的特徵,把他分到橘子或者香蕉那類中,叫做分類?
監督學習(supervised learning):簡單的說就是有輸入和輸出學習。
unsupervised :[,ʌn'sju:pəvaizd]無人監督的;無人管理的。
無監督學習(unsupervised learning):簡單的說就是有輸入沒有輸出的學習。 3.訓練集和測試集?
一般就是把資料分成10份,9:1
9份作為訓練資料,來學習一個模型;
1份作為測試資料,來測試這個模型。
  1. 聚類
    我們經常接觸到的聚類分析,一般都是數值聚類,一種常見的做法是同時提取 N 種特徵,將它們放在一起組成一個 N 維向量,從而得到一個從原始資料集合到 N 維向量空間的對映——你總是需要顯式地或者隱式地完成這樣一個過程,然後基於某種規則進行分類,在該規則下,同組分類具有最大的相似性。
      假設我們提取到原始資料的集合為(x1, x2, …, xn),並且每個xi為d維的向量,K-means聚類的目的就是,在給定分類組數k(k ≤ n)值的條件下,將原始資料分成k類
    S = {S1, S2, …, Sk},在數值模型上,即對以下表達式求最小值:
     
    這裡μi 表示分類Si 的平均值。
      那麼在計算機程式設計中,其又是如何實現的呢?其演算法步驟一般如下:
    1、從D中隨機取k個元素,作為k個簇的各自的中心。
    2、分別計算剩下的元素到k個簇中心的相異度,將這些元素分別劃歸到相異度最低的簇。
    3、根據聚類結果,重新計算k個簇各自的中心,計算方法是取簇中所有元素各自維度的算術平均數。
    4、將D中全部元素按照新的中心重新聚類。
    5、重複第4步,直到聚類結果不再變化。
    6、將結果輸出。
      用數學表示式來說,
    設我們一共有 N 個數據點需要分為 K 個 cluster ,k-means 要做的就是最小化

————————————————————————————————

K-Means聚類演算法

K-Means演算法的基本思想是初始隨機給定K個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心,從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。
 
K-Means聚類演算法主要分為三個步驟:
(1)第一步是為待聚類的點尋找聚類中心
(2)第二步是計算每個點到聚類中心的距離,將每個點聚類到離該點最近的聚類中去
(3)第三步是計算每個聚類所有點的座標平均值,並將這個平均值作為新的聚類中心
(4)反覆執行(2)、(3),直到聚類中心不再進行大範圍移動或者聚類次數達到要求為止
 
下圖展示了對n個樣本點進行K-means聚類的效果,這裡k取2:
(a)未聚類的初始點集
(b)隨機選取兩個點作為聚類中心
(c)計算每個點到聚類中心的距離,並聚類到離該點最近的聚類中去
(d)計算每個聚類中所有點的座標平均值,並將這個平均值作為新的聚類中心
(e)重複(c),計算每個點到聚類中心的距離,並聚類到離該點最近的聚類中去
(f)重複(d),計算每個聚類中所有點的座標平均值,並將這個平均值作為新的聚類中心