資料聚類-----medoids

來源:互聯網
上載者:User

標籤:style   blog   http   使用   資料   for   ar   代碼   

      前一篇我們瞭解了一個最基本的 clustering 辦法 k-means ,這次要說的 k-medoids 演算法,其實從名字上就可以看出來,和 k-means 肯定是非常相似的。事實也確實如此,k-medoids 可以算是 k-means 的一個變種。

      k-medoids 和 k-means 不一樣的地方在於中心點的選取,在 k-means 中,我們將中心點取為當前 cluster 中所有資料點的平均值:

                                                        

並且我們已經證明在固定了各個資料點的 assignment 的情況下,這樣選取的中心點能夠把目標函數 J 最小化。然而在 k-medoids 中,我們將中心點的選取限制在當前 cluster 所包含的資料點的集合中。換句話說,在 k-medoids 演算法中,我們將從當前 cluster 中選取這樣一個點——它到其他所有(當前 cluster 中的)點的距離之和最小——作為中心點。k-means 和 k-medoids 之間的差異就類似於一個資料樣本的均值 (mean) 和中位元 (median) 之間的差異:前者的取值範圍可以是連續空間中的任意值,而後者只能在給樣本給定的那些點裡面選。那麼,這樣做的好處是什麼呢?
一個最直接的理由就是 k-means 對資料的要求太高了,它使用歐氏距離描述資料點之間的差異 (dissimilarity) ,從而可以直接通過求均值來計算中心點。這要求資料點處在一個歐氏空間之中。

然而並不是所有的資料都能滿足這樣的要求,對於數實值型別的特徵,比如身高,可以很自然地用這樣的方式來處理,但是類別 (categorical) 類型的特徵就不行了。舉一個簡單的例子,如果我現在要對犬進行聚類,並且希望直接在所有犬組成的空間中進行,k-means 就無能為力了,因為歐氏距離 \|x_i-x_j\|^2 在這裡不能用了:一隻 Samoyed 減去一隻 Rough Collie 然後在平方一下?天知道那是什麼!再加上一隻 German Shepherd Dog 然後求一下平均值?根本沒法算,k-means 在這裡寸步難行!

在 k-medoids 中,我們把原來的目標函數 J 中的歐氏距離改為一個任意的 dissimilarity measure 函數 :

                                                                     

最常見的方式是構造一個 dissimilarity matrix \mathbf{D} 來代表 \mathcal{V},其中的元素 \mathbf{D}_{ij} 表示第 i 只狗和第 j 只狗之間的差異程度,例如,兩隻 Samoyed 之間的差異可以設為 0 ,一隻 German Shepherd Dog 和一隻 Rough Collie 之間的差異是 0.7,和一隻 Miniature Schnauzer 之間的差異是 1 ,等等。

除此之外,由於中心點是在已有的資料點裡面選取的,因此相對於 k-means 來說,不容易受到那些由於誤差之類的原因產生的 Outlier 的影響,更加 robust 一些。

扯了這麼多,還是直接來看看 k-medoids 的效果好了,由於 k-medoids 對資料的要求比 k-means 要低,所以 k-means 能處理的情況自然 k-medoids 也能處理,為了能先睹為快,我們偷一下懶,直接在上一篇文章中的 k-means 代碼的基礎上稍作一點修改,還用同樣的例子。將代碼的 45 到 47 行改成下面這樣:

 for j in range(k):            idx_j = (labels == j).nonzero()            distj = distmat(X[idx_j], X[idx_j])            distsum = ml.sum(distj, axis=1)            icenter = distsum.argmin()            centers[j] = X[idx_j[0][icenter]]

  可以看到 k-medoids 在這個例子上也能得到很好的結果:

 

而且,同 k-means 一樣,運氣不好的時候也會陷入局部最優解中:

如果仔細看上面那段代碼的話,就會發現,從 k-means 變到 k-medoids ,時間複雜度陡然增加了許多:在 k-means 中只要求一個平均值  即可,而在 k-medoids 中則需要枚舉每個點,並求出它到所有其他點的距離之和,複雜度為  。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.