K-Means算法

1、相異度計算 mysql

在正式討論聚類前,咱們要先弄清楚一個問題:如何定量計算兩個可比較元素間的相異度。用通俗的話說,相異度就是兩個東西差異有多大,例如人類與章魚的相異度明顯大於人類與黑猩猩的相異度,這是能咱們直觀感覺到的。可是,計算機沒有這種直觀感覺能力,咱們必須對相異度在數學上進行定量定義。
      設 ,其中X,Y是兩個元素項,各自具備n個可度量特徵屬性,那麼X和Y的相異度定義爲:算法

 ,其中R爲實數域。也就是說相異度是兩個元素對實數域的一個映射,所映射的實數定量表示兩個元素的相異度。
      下面介紹不一樣類型變量相異度計算方法。sql

一、標量數據庫

 

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

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

 

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

     曼哈頓距離:學習

(3) 閔可夫斯基距離:大數據

(4)皮爾遜係數(Pearson Correlation Coefficient)spa

 

兩個變量之間的皮爾遜相關係數定義爲兩個變量之間的協方差和標準差的商.

(其中,E爲數學指望或均值,D爲方差,D開根號爲標準差,E{ [X-ux] [Y-uy]}稱爲隨機變量X與Y的協方差,記爲Cov(X,Y),即Cov(X,Y) = E{ [X-ux] [Y-ux},而兩個變量之間的協方差和標準差的商則稱爲隨機變量X與Y的相關係數,記爲)

 

歐氏距離和曼哈頓距離能夠看作是閔可夫斯基距離在p=2和p=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的歐幾里得範數。要注意,餘弦度量度量的不是二者的相異度,而是類似度!

 

2、聚類問題

 所謂聚類問題,就是給定一個元素集合D,其中每一個元素具備n個可觀察屬性,使用某種算法將D劃分紅k個子集,要求每一個子集內部的元素之間相異度儘量低,而不一樣子集的元素相異度儘量高。其中每一個子集叫作一個簇。
      與分類不一樣,分類是示例式學習,要求分類前明確各個類別,並斷言每一個元素映射到一個類別,而聚類是觀察式學習,在聚類前能夠不知道類別甚至不給定類別數量,是無監督學習的一種。目前聚類普遍應用於統計學、生物學、數據庫技術和市場營銷等領域,相應的算法也很是的多。本文僅介紹一種最簡單的聚類算法——k均值(k-means)算法。

一、算法簡介

k-means算法,也被稱爲k-平均或k-均值,是一種獲得最普遍使用的聚類算法。 它是將各個聚類子集內的全部數據樣本的均值做爲該聚類的表明點,

算法的主要思想是經過迭代過程把數據集劃分爲不一樣的類別,使得評價聚類性能的準則函數達到最優,從而使生成的每一個聚類內緊湊,類間獨立。這一算法不適合處理離散型屬性,可是對於連續型具備較好的聚類效果。

二、算法描述
一、爲中心向量c1, c2, …, ck初始化k個種子
二、分組:
(1)將樣本分配給距離其最近的中心向量
(2)由這些樣本構造不相交( non-overlapping )的聚類
三、肯定中心:
用各個聚類的中心向量做爲新的中心
四、重複分組和肯定中心的步驟,直至算法收斂。

三、法  k-means算法
輸入:簇的數目k和包含n個對象的數據庫。
輸出:k個簇,使平方偏差準則最小。
算法步驟: 
1.爲每一個聚類肯定一個初始聚類中心,這樣就有K 個初始聚類中心。 
 2.將樣本集中的樣本按照最小距離原則分配到最鄰近聚類  
 3.使用每一個聚類中的樣本均值做爲新的聚類中心。
 4.重複步驟2.3直到聚類中心再也不變化。
 5.結束,獲得K個聚類

PS

一、將樣本分配給距離它們最近的中心向量,並使目標函數值減少

二、更新簇平均值

三、計算準則函數E

計算準則函數

E

四、劃分聚類方法對數據集進行聚類時包括以下
  三個要點:
  (1)選定某種距離做爲數據樣本間的類似性度量              
     上面講到,k-means聚類算法不適合處理離散型屬性,對連續型屬性比較適合。所以在計算數據樣本之間的距離時,能夠根據實際須要選擇歐式距離、曼哈頓距離或者明考斯距離中的一種來做爲算法的類似性度量,其中最經常使用的是歐式距離。下面我再給你們具體介紹一下歐式距離。平均值

 

假設給定的數據集,X中的樣本用d個描述屬性A1,A2…Ad來表示,而且d個描述屬性都是連續型屬性。數據樣本xi=(xi1,xi2,…xid),xj=(xj1,xj2,…xjd)其中,xi1,xi2,…xid和xj1,xj2,…xjd分別是樣本xi和xj對應d個描述屬性A1,A2,…Ad的具體取值。樣本xi和xj之間的類似度一般用它們之間的距離d(xi,xj)來表示,距離越小,樣本xi和xj越類似,差別度越小;距離越大,樣本xi和xj越不類似,差別度越大。

      歐式距離公式以下:

(2)選擇評價聚類性能的準則函數
      k-means聚類算法使用偏差平方和準則函數來 評價聚類性能。給定數據集X,其中只包含描述屬性,不包含類別屬性。假設X包含k個聚類子集X1,X2,…XK;各個聚類子集中的樣本數量分別爲n1,n2,…,nk;各個聚類子集的均值表明點(也稱聚類中心)分別爲m1,m2,…,mk。則偏差平方和準則函數公式爲:

(3)類似度的計算根據一個簇中對象的平均值來進行。
1)將全部對象隨機分配到k個非空的簇中。
2)計算每一個簇的平均值,並用該平均值表明相應的簇。
3)根據每一個對象與各個簇中心的距離,分配給最近的簇。
4)而後轉2),從新計算每一個簇的平均值。這個過程不斷重複直到知足某個準則函數才中止

 

3、聚類例子

數據對象集合S見上表,做爲一個聚類分析的二維樣本,要求的簇的數量k=2。
(1)選擇 ,爲初始的簇中心,即 

   ,                  。
(2)對剩餘的每一個對象,根據其與各個簇中心的距離,將它賦給最近的簇

對O3 :

     

     

顯然 O3,故將C2分配給

對於O4:

由於:因此將O4分配給C2

對於O5:

由於:因此講O5分配給C1

更新,獲得新簇 和

計算平方偏差準則,單個方差爲

整體平均方差是:

(3)計算新的簇的中心。 

重複(2)和(3),獲得O1分配給C1;O2分配給C2,O3分配給C2 ,O4分配給C2,O5分配給C1。更新,獲得新簇
 和。 中心爲  , 。

單個方差分別爲

整體平均偏差是: 


由上能夠看出,第一次迭代後,整體平均偏差值52.25~25.65,顯著減少。因爲在兩次迭代中,簇中心不變,因此中止迭代過程,算法中止。

PS 

一、k-means算法的性能分析

主要優勢:
是解決聚類問題的一種經典算法,簡單、快速。
對處理大數據集,該算法是相對可伸縮和高效率的。由於它的複雜度是0 (n k t ) , 其中, n 是全部對象的數目, k 是簇的數目, t 是迭代的次數。一般k < <n 且t < <n 。
當結果簇是密集的,而簇與簇之間區別明顯時, 它的效果較好。

主要缺點
在簇的平均值被定義的狀況下才能使用,這對於處理符號屬性的數據不適用。
必須事先給出k(要生成的簇的數目),並且對初值敏感,對於不一樣的初始值,可能會致使不一樣結果。

    它對於「躁聲」和孤立點數據是敏感的,少許的該類數據可以對平均值產生極大的影響。

K-Means算法對於不一樣的初始值,可能會致使不一樣結果。解決方法:
1.多設置一些不一樣的初值,對比最後的運算結果)一直到結果趨於穩定結束,比較耗時和浪費資源
2.不少時候,事先並不知道給定的數據集應該分紅多少個類別才最合適。這也是 K-means 算法的一個不足。有的算法是經過類的自動合併和分裂,獲得較爲合理的類型數目 K.

二、k-means算法的改進方法——k-prototype算法
k-Prototype算法:能夠對離散與數值屬性兩種混合的數據進行聚類,在k-prototype中定義了一個對數值與離散屬性都計算的相異性度量標準。

K-Prototype算法是結合K-Means與K-modes算法,針對混合屬性的,解決2個核心問題以下:
1.度量具備混合屬性的方法是,數值屬性採用K-means方法獲得P1,分類屬性採用K-modes方法P2,那麼D=P1+a*P2,a是權重,若是以爲分類屬性重要,則增長a,不然減小a,a=0時即只有數值屬性
2.更新一個簇的中心的方法,方法是結合K-Means與K-modes的更新方法。

三、k-means算法的改進方法——k-中心點算法 k-中心點算法:k -means算法對於孤立點是敏感的。爲了解決這個問題,不採用簇中的平均值做爲參照點,能夠選用簇中位置最中心的對象,即中心點做爲參照點。這樣劃分方法仍然是基於最小化全部對象與其參照點之間的相異度之和的原則來執行的。 

相關文章
相關標籤/搜索