機器學習六--K-means聚類算法

機器學習六--K-means聚類算法html

想一想常見的分類算法有決策樹、Logistic迴歸、SVM、貝葉斯等。分類做爲一種監督學習方法,要求必須事先明確知道各個類別的信息,而且斷言全部待分類項都有一個類別與之對應。可是不少時候上述條件得不到知足,尤爲是在處理海量數據的時候,若是經過預處理使得數據知足分類算法的要求,則代價很是大,想一想若是給你50G這麼大的文本,裏面已經分好詞,這時須要將其按照給定的幾十個關鍵字進行劃分歸類,監督學習的方法確實有點困難,並且也不划算,前期工做作得太多了。算法

這時候能夠考慮使用聚類算法,咱們只須要知道這幾十個關鍵字是什麼就能夠了。聚類屬於無監督學習,相比於分類,聚類不依賴預約義的類和類標號的訓練實例。本文首先介紹聚類的基礎——距離與相異度,而後介紹一種常見的聚類算法——K-means聚類數據庫

在正式討論聚類前,咱們要先弄清楚一個問題:如何定量計算兩個可比較元素間的相異度。前面的這些知識弄懂了,加上K-means的定義,基本上就能夠大概理解K-means的算法了,不算一個特別難的算法。用通俗的話說,相異度就是兩個東西差異有多大,例如人類與章魚的相異度明顯大於人類與黑猩猩的相異度,這是能咱們直觀感覺到的。可是,計算機沒有這種直觀感覺能力,咱們必須對相異度在數學上進行定量定義。機器學習

設X={x1,x2,x3,,,,xn},Y={y1,y2,y3,,,,yn} ,其中X,Y是兩個元素項,各自具備n個可度量特徵屬性,那麼X和Y的相異度定義爲:d=(X,Y)=f(X,Y)->R,其中R爲實數域。也就是說相異度是兩個元素對實數域的一個映射,所映射的實數定量表示兩個元素的相異度。學習

下面介紹不一樣類型變量相異度計算方法。url

標量spa

標量也就是無方向意義的數字,也叫標度變量。如今先考慮元素的全部特徵屬性都是標量的狀況。例如,計算X={2,1,102}和Y={1,3,2}的相異度。一種很天然的想法是用二者的歐幾里得距離來做爲相異度,歐幾里得距離的定義以下:3d

其意義就是兩個元素在歐氏空間中的集合距離,由於其直觀易懂且可解釋性強,被普遍用於標識兩個標量元素的相異度。將上面兩個示例數據代入公式,可得二者的歐氏距離爲:htm

除歐氏距離外,經常使用做度量標量相異度的還有曼哈頓距離和閔可夫斯基距離,二者定義以下:blog

曼哈頓距離:

閔可夫斯基距離:

歐氏距離和曼哈頓距離能夠看作是閔可夫斯基距離在p=2和p=1下的特例。

0-1規格化

下面要說一下標量的規格化問題。上面這樣計算相異度的方式有一點問題,就是取值範圍大的屬性對距離的影響高於取值範圍小的屬性。例如上述例子中第三個屬性的取值跨度遠大於前兩個,這樣不利於真實反映真實的相異度,爲了解決這個問題,通常要對屬性值進行規格化。所謂規格化就是將各個屬性值按比例映射到相同的取值區間,這樣是爲了平衡各個屬性對距離的影響。一般將各個屬性均映射到[0,1]區間,映射公式爲:

其中max(ai)和min(ai)表示全部元素項中第i個屬性的最大值和最小值。例如,將示例中的元素規格化到[0,1]區間後,就變成了X’={1,0,1},Y’={0,1,0},從新計算歐氏距離約爲1.732。

二元變量

所謂二元變量是隻能取0和1兩種值變量,有點相似布爾值,一般用來標識是或不是這種二值屬性。對於二元變量,上一節提到的距離不能很好標識其相異度,咱們須要一種更適合的標識。一種經常使用的方法是用元素相同序位同值屬性的比例來標識其相異度。

設有X={1,0,0,0,1,0,1,1},Y={0,0,0,1,1,1,1,1},能夠看到,兩個元素第二、三、五、7和8個屬性取值相同,而第一、4和6個取值不一樣,那麼相異度能夠標識爲3/8=0.375。通常的,對於二元變量,相異度可用「取值不一樣的同位屬性數/單個元素的屬性位數」標識。

上面所說的相異度應該叫作對稱二元相異度。現實中還有一種狀況,就是咱們只關心二者都取1的狀況,而認爲二者都取0的屬性並不意味着二者更類似。例如在根據病情對病人聚類時,若是兩我的都患有肺癌,咱們認爲兩我的加強了類似度,但若是兩我的都沒患肺癌,並不以爲這增強了兩人的類似性,在這種狀況下,改用「取值不一樣的同位屬性數/(單個元素的屬性位數-同取0的位數)」來標識相異度,這叫作非對稱二元相異度。若是用1減去非對稱二元相異度,則獲得非對稱二元類似度,也叫Jaccard係數,是一個很是重要的概念。

分類變量

分類變量是二元變量的推廣,相似於程序中的枚舉變量,但各個值沒有數字或序數意義,如顏色、民族等等,對於分類變量,用「取值不一樣的同位屬性數/單個元素的所有屬性數」來標識其相異度。

序數變量

序數變量是具備序數意義的分類變量,一般能夠按照必定順序意義排列,如冠軍、亞軍和季軍。對於序數變量,通常爲每一個值分配一個數,叫作這個值的秩,而後以秩代替原值當作標量屬性計算相異度。

向量

對於向量,因爲它不只有大小並且有方向,因此閔可夫斯基距離不是度量其相異度的好辦法,一種流行的作法是用兩個向量的餘弦度量,這個應該你們都知道吧,其度量公式爲:

其中||X||表示X的歐幾里得範數。要注意,餘弦度量度量的不是二者的相異度,而是類似度!

什麼是聚類?

所謂聚類問題,就是給定一個元素集合D,其中每一個元素具備n個可觀察屬性,使用某種算法將D劃分紅k個子集,要求每一個子集內部的元素之間相異度儘量低,而不一樣子集的元素相異度儘量高。其中每一個子集叫作一個

與分類不一樣,分類是示例式學習,要求分類前明確各個類別,並斷言每一個元素映射到一個類別,而聚類是觀察式學習,在聚類前能夠不知道類別甚至不給定類別數量,是無監督學習的一種。目前聚類普遍應用於統計學、生物學、數據庫技術和市場營銷等領域,相應的算法也很是的多。本文僅介紹一種最簡單的聚類算法——k均值(k-means)算法

k均值算法的計算過程很是直觀:

一、從D中隨機取k個元素,做爲k個簇的各自的中心。

二、分別計算剩下的元素到k個簇中心的相異度,將這些元素分別劃歸到相異度最低的簇。

三、根據聚類結果,從新計算k個簇各自的中心,計算方法是取簇中全部元素各自維度的算術平均數。

四、將D中所有元素按照新的中心從新聚類。

五、重複第4步,直到聚類結果再也不變化。

六、將結果輸出。

時間複雜度:O(T*n*k*m)

空間複雜度:O(n*m)

n:元素個數,k:第一步中選取的元素個數,m:每一個元素的特徵項個數,T:第5步中迭代的次數

參考:

T2噬菌體(不少理解都是借鑑這位大牛的,還在閱讀學習TA的其餘博文)

K-means聚類--百度百科

 

總結

接下來的目標就是Logistic迴歸、SVM。以前看過不少遍有關這兩個算法的博客,可是理解仍是不夠深刻,繼續學習,但願有所收穫。

相關文章
相關標籤/搜索