1. 程式人生 > >機器學習之劃分聚類及程式碼示例

機器學習之劃分聚類及程式碼示例

一、聚類

聚類是一種無監督學習,根據樣本的內在相似性/距離,將大量未知標記的樣本集劃分為多個類別,使得同一個類別內的樣本相似度較大(距離較小),而不同類別間的樣本相似度較小(距離較大)。

劃分聚類包含K-Means、Bisecting K-Means(二分K均值)、K-Means++、Mini Bacth K-Means等。

二、相似性/距離的度量

既然聚類是根據樣本之間的內在相似性/距離進行分類的,那相似性/距離的度量有哪些呢?一般來說,相似性越小,距離則越大,二者成反比關係。對於兩個樣本X,Y,描述它們之間的相似性/距離可有以下幾種:

1、閔可夫斯基距離

閔可夫斯基Minkowski距離公式為

Dist(X,Y)=(i=1n|xiyi|p)1p

當 p = 2 時,即為歐氏距離:兩個樣本點的直線距離;
當 p = 1 時,即為曼哈頓距離:兩個樣本點的座標軸距離;
當 p → ∞ 時,即為切比雪夫距離:兩個樣本點在各個座標軸上相差距離的最大距離。

2、傑卡德相似係數

傑卡德相似係數表示為

J(A,B)=|AB||AB|
即兩個樣本的特徵集合A和B的交集元素在A和B的並集中所佔的比例。傑卡德相似係數越大,兩個樣本的相似性越大。

3、餘弦相似度

餘弦相似度表示為

cos(θ)=ab|a||b|

其中 a、b為兩個樣本的特徵向量。

餘弦相似度可看作兩個樣本在座標系中的向量表示a和b之間的夾角的餘弦值,當夾角為0°時,餘弦相似度為1;當夾角為90°時,餘弦相似度為0;當夾角為180°時,餘弦相似度為-1;

4、皮爾遜相關係數

皮爾遜相關係數的表示為

ρXY=cov(X,Y)σXσY=E[(XμX)(YμY)]σXσY=(xiμX)(yiμY)(xiμX)2(yiμY)2

這裡將樣本X、Y的特徵向量分別看作隨機向量,可以得到關於X、Y的均值和方差。

當皮爾遜相關係數等於-1或1時,X和Y線性相關;等於0時,X和Y兩個樣本不相關。

從公式的角度看,餘弦相似度可以看作 去均值化後的隨機向量間的相關係數:

cos(θ)=XY|X||Y|=xiyix2iy2i

三、K-Means演算法

K-Means演算法,也成為K-均值演算法。演算法的基本思路為:

a. 任意選擇k個點作為k個類別中心的初始位置

b. 對於每個樣本點,根據其對k個類別中心的距離,將該樣本點標記為距離某個類別中心最近的那個類別。

c. 對於每個類別中心,將其位置更變為隸屬該類別的所有樣本點的座標均值。

d.重複b,c兩步,直到類別中心的變化小於某個閾值或者迭代次數達到某個閾值。

K-Means演算法缺陷

a. K-Means演算法將同一個類別中的所有點作為新的質心,當類別集合中含有異常點時,將導致均值偏離嚴重。為了減少質心的偏移嚴重,可改用類別集合中的中位數作為質心。這種聚類方式也叫做K-Mediods聚類或K中值聚類。

b. K-Means演算法對初次選取的類別中心敏感的:當k個類別中心的初值太相近時,聚類的效果往往不是很好,容易收斂到區域性最優解。不同的初始點選擇往往帶來的聚類結果也不同,可以隨機地選取幾組初始點,然後通過一些聚類效果的評價指標來選擇較好的一組。

c. K-Means演算法需要預先設定類別的數量K,K的選擇對聚類的結果起到絕對的作用。

d. K-Means不適合於發現非凸形狀的集合或者大小差別很大的集合。

四、聚類效果的評價

聚類效果的評價指標有很多種,但還沒有一個很好的評價指標,以下主要介紹 輪廓係數 和 SSE 這兩種評價指標。

輪廓係數

輪廓係數(Silhouette Coefficient),聚類效果好壞的一種評價方式。

計算步驟為:

a. 計算樣本 i 到 同類別中的其他樣本的平均距離,記作 這裡寫圖片描述。將 這裡寫圖片描述 稱為樣本 i 的集合/簇內不相似度。這裡寫圖片描述 越小,說明樣本 i 越屬於它的類別集合。

b. 計算樣本 i 到其他的某類別集合 這裡寫圖片描述 的所有樣本的平均距離 這裡寫圖片描述 , 將其稱為 樣本 i 與 類別集合 這裡寫圖片描述 的 不相似度。定義樣本 i 的類別集合/簇間不相似度為 這裡寫圖片描述這裡寫圖片描述 越大,說明樣本 i 越不屬於其他類別集合/簇。

c. 對於樣本 i , 其輪廓係數為 這裡寫圖片描述
這裡寫圖片描述 小於0,說明樣本 i 與其所在的類別集合的平均距離大於最近的其他簇,表示聚類效果不好;
這裡寫圖片描述 趨近1時,說明聚類效果比較好;
這裡寫圖片描述 等於0時,說明樣本 i 在 兩個簇的邊界上。

d. 所有樣本的輪廓係數的均值稱為該聚類結果的輪廓係數,即該聚類結果的一個評價標準。

Sum of Squared Error

在 K-means演算法中,聚類結束後可以得到 k 個 簇及其對應的 k 箇中心點,因此可以將每個簇的樣本點到這個簇的中心點的聚類的總和作為聚類效果的一個評價指標。

SSE=i=1kxCidist(mi,x)2

SSE越小,說明當前聚類後的樣本點越靠近其所在簇中心。

四、K-Means++演算法

因為K-Means演算法對初次選取的類別中心敏感,不同的隨機種子點得到的聚類結果會有不同。K-Means++演算法便是在K-Means的基礎上解決了這個問題,並不是一開始就把所有初始點找到,而是一個個地找初始點。

K-Means++的演算法思想:

a. 隨機挑選一個點作為第一個聚類中心

b. 對於每個樣本點,計算與其距離最近的簇中心的距離 D(xi) 。將所有樣本點的 D(xi) 進行求和,可得到 D(xi)

c. 再取一個能落在 D(xi) 中的隨機值 R,然後迴圈 R=RD(xi),直到 R0 則跳出迴圈,此時的 xi 就是下一個 “種子點”:下一個初始的聚類中心。

d. 重複b、c兩個步驟,直到 k 個聚類中心找到為止。

e. 使用這 k 個初始的聚類中心進行K-Means演算法。

這種方法可理解為: 以正比與D