聚類篇——(三)K-Medoids聚類

上一篇博文介紹了常用聚類算法之一K-means聚類,對其基本思想、優缺點、邏輯計算過程以及初始中心點的確定有了一定認識。本篇博文詳細介紹另外一種常用聚類算法K-Medoids聚類。

K-Medoids算法的基本思想爲: 對於給定聚類數目k,首先隨機選擇k個代表對象作爲初始聚類中心,計算各剩餘對象與代表對象的距離並將其分配給最近的一個簇,產生相應的聚類結果。然後開始迭代過程:對於每一次迭代,將隨機選擇的一個非中心點替代原始中心點中的一個,重新計算聚類結果。若聚類效果有所提高,保留此次替換,否則恢復原中心點。當替換對聚類效果不再有所提高,迭代停止。用代價函數來衡量聚類結果的質量,該函數用來度量對象與中心點之間的平均相異度,具體定義如下:
E=i=1kpCipoi2E=\sum\limits_{i=1}^{k}{\sum\limits_{p\in {{C}_{i}}}{{{\left| p-{{o}_{i}} \right|}^{2}}}}
其中,pp是空間中的點,即爲給定對象,oi{{o}_{i}}代表簇Ci{{C}_{i}}的中心點,EE則表示數據集中所有對象的離差平方和。
在進行新一輪中心替換後,以newCi,i=1,2,,k_{new}{{C}_{i}},i=1,2,\cdots ,k表示新中心集劃分的簇,以oldCi,i=1,2,,k_{old}{{C}_{i}},i=1,2,\cdots ,k代表原來的簇,它們的聚類評價函數分別爲Enew,Eold{{E}_{new}},{{E}_{old}},則
Enew=i=1kpnewCipoi2{{E}_{new}}=\sum\limits_{i=1}^{k}{\sum\limits_{p{{\in }_{new}}{{C}_{i}}}{{{\left| p-{{o}_{i}} \right|}^{2}}}}
Eold=i=1kpoldCipoi2{{E}_{old}}=\sum\limits_{i=1}^{k}{\sum\limits_{p{{\in }_{old}}{{C}_{i}}}{{{\left| p-{{o}_{i}} \right|}^{2}}}}
Enew,Eold{{E}_{new}},{{E}_{old}}定義中心替換的代價函數爲:Cost=EnewEoldCost={{E}_{new}}-{{E}_{old}}
聚類所要達到的目標是使得簇內各個對象之間的差異儘可能小,因此,若要判定一個非代表對象orandom{{o}_{random}}是否是對當前中心點oi{{o}_{i}}的更優替換點,對於每一個非中心點對象pp,每當重新分配時,平方-誤差E=i=1kpCipoi2E=\sum\limits_{i=1}^{k}{\sum\limits_{p\in {{C}_{i}}}{{{\left| p-{{o}_{i}} \right|}^{2}}}}所產生的差別會對代價函數產生影響,替換所產生的總代價是所有非中心點對象的代價之和。若總代價的值小於零,即實際平方-誤差減小,表明經過替換後,簇內對象之間的差異變得更小了,此時,可用orandom{{o}_{random}}替換oi{{o}_{i}}作爲新的中心點對象。反之,若替換所產生的總代價一直大於或等於零,則未能產生一個有效的替換,此時算法收斂。

K-Medoids聚類算法的具體步驟爲:

輸入:期望聚類數目k,包含n個數據對象的數據集。
輸出:k個簇,使得所有點與其最近中心點的相異度總和最小。
步驟:
(1) 在n個數據對象中隨機選擇k個點,作爲初始中心集;
(2) 計算每個非代表對象到各中心點的距離,將其分配給離其最近的簇中;
(3) 對於每個非中心對象,依次執行以下過程:用當前點替換其中一箇中心點,並計算替換所產生的代價函數,若爲負,則替換,否則不替換且還原中心點;
(4) 得到一個最終的較優k箇中心點集合,根據最小距離原則重新將所有對象劃分到離其最近的簇中。
說明:K-Medoids聚類初始中心的選擇仍可採用最大距離法、最大最小距離法和Huffman樹。

下面舉一個實例,說明K-Medoids聚類的邏輯過程。 爲研究不同地區的經濟發展特點,根據各地區GDP、GDP指數、人均GDP指標數據,將北京市、天津市、江蘇省等10個地區按照其經濟水平分成3類。

  • 採用正向/極差化法對數據進行標準化,並計算樣本間的歐式距離;
    正向/極差化法
    在這裏插入圖片描述
    歐式距離
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 採用最大距離法得到3個初始聚類中心;
    在這裏插入圖片描述

  • 按照距離最近原則將各對象劃分到3個聚類中心所代表的簇中,此時離差平方和 E=2.4808,替換中心候選集爲
    {北京市,河北省,黑龍江,吉林省,遼寧省,上海市,內蒙古}
    在這裏插入圖片描述

  • 聚類中心的迭代替換;
    (1)內蒙古替換天津市,則以內蒙古、山西省、江蘇省爲聚類中心進行分類得,離差平方和Enew=5.0114> Eold=2.4808,則用內蒙古替換天津市後,代價函數大於零,因此仍以天津市、山西省、江蘇省爲中心。此時替換中心候選集爲 {北京市,河北省,黑龍江,吉林省,遼寧省,上海市}。
    在這裏插入圖片描述
    (2)遼寧省替換天津市,則以遼寧省、山西省、江蘇省爲聚類中心進行分類得,離差平方和Enew=4.7274> Eold=2.4808,則用遼寧省替換天津市後,代價函數大於零,因此仍以天津市、山西省、江蘇省爲中心。此時替換中心候選集爲 {北京市,河北省,黑龍江,吉林省,上海市}。
    在這裏插入圖片描述
    (3)吉林省替換天津市,則以吉林省、山西省、江蘇省爲聚類中心進行分類得,離差平方和Enew=3.6267> Eold=2.4808,則用吉林省替換天津市後,代價函數大於零,因此仍以天津市、山西省、江蘇省爲中心。此時替換中心候選集爲{北京市,河北省,黑龍江,上海市}。
    在這裏插入圖片描述
    (4)北京市替換天津市,則以北京市、山西省、江蘇省爲聚類中心進行分類得,離差平方和Enew=1.6461< Eold=2.4808,則用北京市替換天津市後,代價函數小於零,因此以北京市、山西省、江蘇省爲中心。此時Eold=1.6461,替換中心候選集爲 {河北省,黑龍江,上海市}。
    在這裏插入圖片描述
    (5)上海市替換北京市,則以上海市、山西省、江蘇省爲聚類中心進行分類得,離差平方和 Enew=1.6861> Eold=1.6461,則用上海市替換北京市後,代價函數大於零,因此仍以北京市、山西省、江蘇省爲中心。此時替換中心候選集爲 {河北省,黑龍江}。
    在這裏插入圖片描述
    (6)黑龍江替換山西省,則以北京市、黑龍江、江蘇省爲聚類中心進行分類得,離差平方和Enew=1.6700> Eold=1.6461 ,則用黑龍江替換山西省後,代價函數大於零,因此以北京市、山西省、江蘇省爲中心。此時替換中心候選集爲 {河北省}。
    在這裏插入圖片描述
    (7)河北省替換山西省,則以北京市、河北省、江蘇省爲聚類中心進行分類得,離差平方和Enew=2.0172> Eold=1.6461,則用河北省替換山西省後,代價函數大於零,因此仍以北京市、山西省、江蘇省爲中心。此時所有對象都已經替換一次,迭代終止。

  • 最終聚類結果
    在這裏插入圖片描述

K-Medoids算法在抗噪聲孤立點的能力方面有了很大的提高,但是K-Medoids算法在處理起來花費時間比較長,算法的時間複雜度爲O(tk(nk)2)O(tk(n-k)^2) ,不能很好的擴展到大型數據庫上去。

ps:初衷是通過撰寫博文記錄自己所學所用,實現知識的梳理與積累;將其分享,希望能夠幫到面臨同樣困惑的小夥伴兒。如發現博文中存在問題,歡迎隨時交流~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章