聚類分析(Cluster Analysis)

(一)什么是聚類

聚類,將相似的事物聚集在一起,將不相似的事物劃分到不同的類別的過程。是將復(fù)雜數(shù)據(jù)簡(jiǎn)化為少數(shù)類別的一種手段。

(二)聚類的基本思想:

  • 有大量的樣本。
  • 假定研究的樣本之間存在程度不同的相似性,可以分為幾類;相同類別的樣本相似度高,不同類別的樣本相似度差。
  • 用一些數(shù)據(jù)指標(biāo)來描述樣本的若干屬性,構(gòu)成向量。
  • 用某種方法度量樣本之間或者類別 之間的相似性(或稱距離),依據(jù)距離來進(jìn)行分類。
  • 根據(jù)分類來研究各類樣本的共性,找出規(guī)律。

(三)聚類的應(yīng)用

  • 商業(yè)領(lǐng)域-識(shí)別顧客購(gòu)買模式,預(yù)測(cè)下一次購(gòu)買行為,淘寶商品推薦等。
  • 金融領(lǐng)域-股票市場(chǎng)板塊分析
  • 安全和軍事領(lǐng)域
    • 破解GPS偽隨機(jī)干擾碼和北斗系統(tǒng)民用版的展頻編碼密碼
    • 識(shí)別論壇馬甲和僵尸粉
    • 追溯網(wǎng)絡(luò)謠言的源頭
  • 生物領(lǐng)域
    • 進(jìn)化樹構(gòu)建
    • 實(shí)驗(yàn)對(duì)象的分類
    • 大規(guī)模組學(xué)數(shù)據(jù)的挖掘
    • 臨床診斷標(biāo)準(zhǔn)
  • 機(jī)器學(xué)習(xí)
    • 人工智能

(四)聚類的對(duì)象

設(shè)有m個(gè)樣本單位,每個(gè)樣本測(cè)的n項(xiàng)指標(biāo)(變量),原始資料矩陣:


image.png

指標(biāo)的選擇非常重要:
必要性要求:和聚類分析的目的密切相關(guān),并不是越多越好
代表性要求:反映要分類變量的特征
區(qū)分度要求:在不同研究對(duì)象類別上的值有明顯的差異
獨(dú)立性要求:變量之間不能高度相關(guān)(兒童生長(zhǎng)身高和體重非常相關(guān))
散布性要求:最好在值域范圍內(nèi)分布不太集中


(五)數(shù)據(jù)標(biāo)準(zhǔn)化

在各種標(biāo)準(zhǔn)量度值scale差異過大時(shí),或數(shù)據(jù)不符合正態(tài)分布時(shí),可能需要進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化。
(1) 總和標(biāo)準(zhǔn)化。 分別求出各聚類指標(biāo)所對(duì)應(yīng)的數(shù)據(jù)的總和, 以各指標(biāo)的數(shù)據(jù)除以該指標(biāo)的數(shù)據(jù)的總和。

image.png

這種標(biāo)準(zhǔn)化方法所得到的的新數(shù)據(jù)滿足:
image.png

(2)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化,即:
image.png

這種標(biāo)準(zhǔn)化方法得到的新數(shù)據(jù),各指標(biāo)的平均值為0,標(biāo)準(zhǔn)差為1,即有:
image.png

image.png

PS:比如說大家的身高差異
(3)極大值標(biāo)準(zhǔn)差
經(jīng)過這種標(biāo)準(zhǔn)化所得到的新數(shù)據(jù),各指標(biāo)的極大值為1,其余各數(shù)值小于1.
image.png

PS:課程難易,成績(jī)高低。
(4)極差的標(biāo)準(zhǔn)化
image.png

經(jīng)過這種標(biāo)準(zhǔn)化所得到的新數(shù)據(jù),各指標(biāo)的極大值為1,極小值為0,其余的數(shù)值均在0與1之間。
PS:高考算標(biāo)準(zhǔn)分。


(六)聚類的分類:

根據(jù)聚類對(duì)象的不同,分為Q型聚類,R型聚類

  • Q型聚類:樣本之間的聚類即Q型聚類分析,常用距離來測(cè)度樣本之間的親疏程度
    • 閔可夫斯基距離
    • 馬氏距離
    • 文本距離
    • 秩距離
  • R型聚類:變量之間的聚類即R型聚類分析,常用相似性系數(shù)來測(cè)度變量之間的親疏程度
    • 相關(guān)系數(shù)
    • 夾角余弦

(1)常見距離統(tǒng)計(jì)量 - 閔可夫斯基距離系列(線性距離)

image.jpeg

p=1,時(shí)為曼哈頓距離(出租車距離)


image.png

p=2,時(shí)為歐氏距離(n維空間中的幾何距離)
p=∞,時(shí)為切比雪夫距離(棋盤格距離)


image.jpeg

(2)常見距離統(tǒng)計(jì)量 - 馬氏距離(協(xié)方差距離)
均值為μ,協(xié)方差矩陣為∑的向量x=(1,2,...n)
相比于歐式距離,馬氏距離考慮到各種指標(biāo)之間的聯(lián)系(如身高和體重并不獨(dú)立,)且馬氏距離具有尺度無關(guān)性(scale-invariant),因此可不必做標(biāo)準(zhǔn)化。
如果協(xié)方差矩陣為單位矩陣(各指標(biāo)之間完全相互獨(dú)立),則馬氏距離化為歐幾里得距離。
如果協(xié)方差矩陣為對(duì)角矩陣,則馬氏距離化為正規(guī)化的歐幾里得距離(normalized Euclidean distance)


(3)常見距離統(tǒng)計(jì)量 - 文本距離
文本距離通常用來度量文本之間的相似度,在生物研究中常見于序列比對(duì)分析。

  • Hamming distance: 漢明距離,兩個(gè)等長(zhǎng)字符串之間直接逐位比較,有多少位不同。
    缺點(diǎn):必須要兩個(gè)等長(zhǎng)的字符串
  • Levenshtein distance:編輯距離,兩個(gè)字符串之間,從一個(gè)字符串出發(fā)進(jìn)行多少次的修正(每次一個(gè)字符串的替換,插入或刪除)可以得到第二個(gè)字符串。求解過程類似于Needleman-Wunsch 算法中的搜索和回溯過程。
    (4)常見距離統(tǒng)計(jì)量 - 秩距離
    序列型變量需要用秩(rank)的概念來計(jì)算距離
    例如:選美大賽時(shí)有ABCDE五名參賽選手,評(píng)委需要對(duì)其表現(xiàn)作出排名。這個(gè)排名就稱為“秩”(rank)。
    將每個(gè)變量的值域(上例中為[1,5])映射到[0,1]范圍上
    然后用前述某種距離計(jì)算方法來計(jì)算距離

常見相似系數(shù)統(tǒng)計(jì)量
相似系數(shù)= 1,表明完全相似
相似系數(shù)= -1 表明完全相反
相似系數(shù) = 0 表明完全獨(dú)立
相關(guān)系數(shù):

image.png

回歸的時(shí)候要算相關(guān)系數(shù),
夾角余弦:
image.png


類與類之間 距離的度量方法:
系統(tǒng)聚類法不僅需要度量個(gè)體與個(gè)體之間的距離,還要度量類與類之間的距離。類間距離被度量出來之后,距離最小的兩個(gè)小類將首先被合并成為一類。 由類間距離定義的不同產(chǎn)生了不同的系統(tǒng)聚類法。

  • 最短距離法(Nearest Neighbor)
    • 以兩類中距離最近的兩個(gè)個(gè)體之間的距離作為類間距離
  • 最長(zhǎng)距離法(Further Neighbor)
    • 以兩類中距離最遠(yuǎn)的兩個(gè)個(gè)體之間的距離作為類間距離
  • 組間平均連接法(Between-group linkage,UPGMA)
    • 以兩類個(gè)體兩兩之間的距離的平均數(shù)作為類間距離。
  • 組內(nèi)平均連接法(Within-group linkage)
    • 將兩類個(gè)體合并為一類后,以合并后類中所有個(gè)體之間的平均距離作為類間距離
  • 重心法(Centroid clustering)
    • 以兩類變量均值(重心)之間的距離作為類間距。
  • 中位數(shù)法(Median clustering)
    • 以兩類變量中位數(shù)之間的距離作為類間距離
  • 離差平方和法(Ward’s method)
    • Ward方法并類時(shí)總是使得并類導(dǎo)致的類內(nèi)離差平方和增量最小。僅能用于歐氏距離。


      image.png

聚類算法的分類:

目前有1000多種聚類算法:沒有一種聚類算法可以包打天下,聚類算法中的各種參數(shù)也必須依據(jù)具體問題而調(diào)節(jié)
常見聚類算法的分類:
1,層次聚類(Hierarchical clustering)
2,劃分聚類(Partitioning clustering)
3,密度聚類(Density-based)
4,期望最大化聚類(Expectation Maximization)
5,網(wǎng)格聚類(Grid-based)
6,模型聚類(Model-based)


1. 層次聚類的方法
基本思想:
在聚類分析的開始,每個(gè)樣本(或變量)自成一類; 然后,按照某種方法度量所有樣本(或變量)之間的親疏程度,并把最相似的樣本(或變量)首先聚成一小類; 接下來,度量剩余的樣本(或變量)和小類間的親疏程度,并將當(dāng)前最接近的樣本(或變量)與小類聚成一類;如此反復(fù),知道所有樣本聚成一類為止。
舉例:
有一組數(shù)據(jù)D={a,b,c,d,e} 給了它們之間的距離矩陣。
首先,每一個(gè)例子都是一個(gè)類:

image.jpeg

將最近的兩個(gè)類合并為一個(gè)新的類,并重新計(jì)算類之間的距離然后更新距離矩陣:
d(a,b)=0.18距離最近,合并為一類ab,然后計(jì)算ab,c,d,e之間的距離
image.jpeg

選擇距離最近的兩個(gè)類合并為新的類:
[圖片上傳失敗...(image-62f70-1573443086632)] 距離最近,因此d,e合并為一類
image.jpeg

不斷重復(fù)上述兩個(gè)步驟,最終只剩下一個(gè)類的時(shí)候,停止:
image.jpeg

類別的數(shù)量取決于你剪的位置
層次聚類中,通常用組間平均連接法(UPGMA)和離差平方和法(Ward)比較穩(wěn)健。
層次聚類的優(yōu)缺點(diǎn):

  • 適用于大多數(shù)情況,穩(wěn)健性比較好
  • 易于生成系統(tǒng)發(fā)育樹,分類類數(shù)可以隨意選取
  • 計(jì)算量大(兩兩計(jì)算距離)
  • 需要仔細(xì)選擇距離計(jì)算方法和組間距離計(jì)算方法

2. 劃分聚類的方法
劃分聚類算法:
給定一個(gè)包含n個(gè)樣本的數(shù)據(jù)集,基于劃分的方法(Partitioning Method)就是將n個(gè)樣本按照特定的度量劃分為k個(gè)簇(k≤n),使得每個(gè)簇至少包含一個(gè)對(duì)象,并且每個(gè)對(duì)象屬于且僅屬于一個(gè)簇,而且簇之間不存在層次關(guān)系。

基于劃分的方法大多數(shù)是基于距離來劃分的,首先對(duì)樣本進(jìn)行初始化分,然后計(jì)算樣本間的距離,重新對(duì)數(shù)據(jù)集中的樣本進(jìn)行劃分,將樣本劃分到距離更近的簇中,得到一個(gè)新的樣本劃分,迭代計(jì)算直到聚類結(jié)果滿足用戶指定的要求。

要想得到最優(yōu)的聚類結(jié)果,算法需要窮舉數(shù)據(jù)集所有可能的劃分情況,但是在實(shí)際應(yīng)用中數(shù)據(jù)量都比較大,利用窮舉方法聚類顯然是不現(xiàn)實(shí)的,因此大部分基于劃分的聚類方法采用貪心策略,即在每一次劃分過程中尋求最優(yōu)解,然后基于最優(yōu)解進(jìn)行迭代計(jì)算,逐步提高聚類結(jié)果的質(zhì)量。雖然這種方式有可能得到局部最優(yōu)結(jié)果,但是結(jié)合效率方面考慮,也是可以接受的。

算法:

  • 選擇 K 個(gè)初始質(zhì)心,初始質(zhì)心隨機(jī)選擇即可,每一個(gè)質(zhì)心為一個(gè)類
  • 把每個(gè)觀測(cè)指派到離它最近的質(zhì)心,與質(zhì)心形成新的類
  • 重新計(jì)算每個(gè)類的質(zhì)心,所謂質(zhì)心就是一個(gè)類中的所有觀測(cè)的平均向量(這里稱為向量,是因?yàn)槊恳粋€(gè)觀測(cè)都包含很多變量,所以我們把一個(gè)觀測(cè)視為一個(gè)多維向量,維數(shù)由變量數(shù)決定)。
  • 重復(fù)2. 和 3.
  • 直到質(zhì)心不在發(fā)生變化時(shí)或者到達(dá)最大迭代次數(shù)時(shí)

舉例:
有一個(gè)二維空間的一些點(diǎn),我們要將它們分成3個(gè)類,即K=3。

我們首先隨機(jī)選擇3個(gè)初始質(zhì)心,每一個(gè)質(zhì)心為一類:

image.jpeg

然后我們計(jì)算每一個(gè)不是質(zhì)心的點(diǎn)到這三個(gè)質(zhì)心的距離:

image.jpeg

將這些點(diǎn)歸類于距離最近的那個(gè)質(zhì)心的一類:

image.jpeg

重新計(jì)算這三個(gè)分類的質(zhì)心:

image.jpeg

不斷重復(fù)上述兩步,更新三個(gè)類:

image.jpeg

當(dāng)穩(wěn)定以后,迭代停止,這時(shí)候的三個(gè)類就是我們得到的最后的三個(gè):

image.jpeg

最著名的是k-means聚類算法和K-medoids算法(中心點(diǎn)聚類)

  • 要求事先確定分類數(shù)
  • 運(yùn)算速度快(特別是對(duì)于大樣本)
  • 初始值敏感
  • 對(duì)噪聲和孤立數(shù)據(jù)點(diǎn)敏感
  • 傾向于每一類別的樣本數(shù)量相等,因此常出現(xiàn)錯(cuò)誤
image.png

image.png

image.png

3. 基于密度的方法

處理“大海中的若干孤島”,以密度來區(qū)分島

大部分基于密度的方法(Density-based Method)采用距離度量來對(duì)數(shù)據(jù)集進(jìn)行劃分,在球狀的數(shù)據(jù)集中能夠正確劃分,但是在非球狀的數(shù)據(jù)集中則無法對(duì)樣本進(jìn)行正確聚類,并且受到數(shù)據(jù)集中的噪聲數(shù)據(jù)影響較大?;诿芏鹊姆椒梢钥朔@兩個(gè)弱點(diǎn)。

基于密度的方法提出“密度”的思想,即給定鄰域中樣本點(diǎn)的數(shù)量,當(dāng)鄰域中密度達(dá)到或超過密度閾值時(shí),將鄰域內(nèi)的樣本包含到當(dāng)前的簇中。若鄰域的密度不滿足閾值要求,則當(dāng)前的簇劃分完成,對(duì)下一個(gè)簇進(jìn)行劃分。基于密度的方法可以對(duì)數(shù)據(jù)集中的離群點(diǎn)進(jìn)行檢測(cè)和過濾。

算法

  • 從數(shù)據(jù)集中隨機(jī)選擇核心點(diǎn)
  • 以一個(gè)核心點(diǎn)為圓心,做半徑為V的圓,選擇圓內(nèi)圈入點(diǎn)的個(gè)數(shù)滿足密度閾值的核心點(diǎn),因此稱這些點(diǎn)為核心對(duì)象,且將圈內(nèi)的點(diǎn)形成一個(gè)簇,其中核心點(diǎn)直接密度可達(dá)周圍的其他實(shí)心原點(diǎn);
  • 合并這些相互重合的簇

4. 基于網(wǎng)格的方法

基于網(wǎng)格的方法(Grid-based Method)將數(shù)據(jù)集空間劃分為有限個(gè)網(wǎng)格單元,形成一個(gè)網(wǎng)絡(luò)結(jié)構(gòu),在后續(xù)的聚類過程中,以網(wǎng)格單元為基本單位進(jìn)行聚類,而不是以樣本為單位。由于算法處理時(shí)間與樣本數(shù)量無關(guān),只與網(wǎng)格單元數(shù)量有關(guān),因此這種方法在處理大數(shù)據(jù)集時(shí)效率很高?;诰W(wǎng)格的方法可以在網(wǎng)格單元?jiǎng)澐值幕A(chǔ)上,與基于密度的方法、基于層次的方法等結(jié)合使用。

5. 基于模型的方法

基于模型的方法(Model-based Method)假定數(shù)據(jù)集滿足一定的分布模型,找到這樣的分布模型,就可以對(duì)數(shù)據(jù)集進(jìn)行聚類?;谀P偷姆椒ㄖ饕ɑ诮y(tǒng)計(jì)和基于神經(jīng)網(wǎng)絡(luò)兩大類,前者以高斯混合模型(Gaussian Mixture Models,GMM)為代表,后者以自組織映射網(wǎng)絡(luò)(Self Organizing Map,SOM)為代表。目前以基于統(tǒng)計(jì)模型的方法為主。

聚類結(jié)果的解釋和驗(yàn)證:

  • 對(duì)每個(gè)類別進(jìn)行命名
  • 提取這一類別的共同特征,確定邊界
  • 進(jìn)行驗(yàn)證
    • 先對(duì)“訓(xùn)練集”進(jìn)行聚類
    • 然后用已知對(duì)象特性的“測(cè)試集”根據(jù)特征邊界來將樣本進(jìn)行歸類,檢驗(yàn)特征邊界的合理性
    • 經(jīng)過驗(yàn)證的聚類結(jié)果才可用于對(duì)未知樣品的可靠分類(例如臨床診斷)
  • 解釋分類形成的原因,提出可能的機(jī)制假說,進(jìn)行更深入的研究

以下內(nèi)容后續(xù)補(bǔ)充:

K-means算法的R實(shí)現(xiàn):

數(shù)據(jù)示例:

x = rbind(matrix(rnorm(100,sd=0.3),ncol=2),matrix(rnorm(100,mean=1,sd=0.3),ncol=2))
cl = kmeans(x,2,20)
plot(x,col = cl$cluster,pch=3,lwd=1)
image.png
points(cl$centers,col=1:2,pch=7,lwd=3) # 畫出中心點(diǎn)
segments(x[cl$cluster==1,][,1],x[cl$cluster==1,][,2],cl$centers[1,1],cl$centers[1,2]) # 畫出每個(gè)點(diǎn)到中心點(diǎn)的連線。
segments(x[cl$cluster==2,][,1],x[cl$cluster==2,][,2],cl$centers[2,1],cl$centers[2,2],col=2)
image.png

層次聚類算法的R實(shí)現(xiàn):

數(shù)據(jù)示例:

data("USArrests")
hc = hclust(dist(USArrests),"ave")
plot(hc,hang = -1)
image.png

解釋說明

為了有效利用聚類算法, 首先需要度量觀測(cè)值見的距離,在R中常通過stats包里的dist函數(shù)來實(shí)現(xiàn):
dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
dist 函數(shù)計(jì)算對(duì)象(矩陣或數(shù)據(jù)框)中兩兩間的距離,返回的是距離矩陣(dist類對(duì)象)。dist函數(shù)的參數(shù)描述如下。

dist參數(shù) 描述 默認(rèn)值
x 用于計(jì)算矩陣的對(duì)象,可以使矩陣,數(shù)據(jù)框,dist對(duì)象
method 設(shè)置計(jì)算距離的方法:method="euclidean",計(jì)算歐氏距離(2-norm);method="maximum"計(jì)算最大距離(supremum-norm)method="manhattan"計(jì)算絕對(duì)距離(1-norm)method="canberra" 計(jì)算蘭氏距離 method="binary"將非0元素看作1,零看作0; method="minkowski" 計(jì)算閔式距離(p-norm) euclidean
diag 邏輯值,控制是否打印距離矩陣的對(duì)角元素 FALSE
upper 邏輯值, 控制是否打印上對(duì)角元素 FALSE
p 閔可夫斯基距離的范數(shù) 2

另一個(gè)計(jì)算點(diǎn)之間的距離的方法是cluster包里面的daisy函數(shù):

daisy(x, metric = c("euclidean", "manhattan", "gower"),
      stand = FALSE, type = list(), weights = rep.int(1, p),
      warnBin = warnType, warnAsym = warnType, warnConst = warnType,
      warnType = TRUE)

daisy函數(shù)計(jì)算數(shù)據(jù)集中每對(duì)觀測(cè)值的不相似度。daisy函數(shù)的參數(shù)描述如下:

daisy參數(shù) 描述 默認(rèn)值
x 用于計(jì)算距離的數(shù)值型矩陣或數(shù)據(jù)框
metric 指定計(jì)算距離的方法:metric="duclidean",計(jì)算歐氏距離;metric="manhattan"計(jì)算曼哈頓距離;metric="gower", 計(jì)算高氏距離; euclidean
stand 邏輯值,計(jì)算距離前是否標(biāo)準(zhǔn)化化樣本 FALSE
type 控制x中變量的類型。值為“ordratio”時(shí),表示原始數(shù)據(jù),“l(fā)ogratio”為對(duì)數(shù)變換,“assym”為非對(duì)稱二元,“symm”為對(duì)稱二元

k-means聚類是最簡(jiǎn)單的聚類算法之一。R中可以通過stats包里面的kmeans函數(shù)實(shí)現(xiàn)k-means聚類:
kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"), trace=FALSE)
kmeans函數(shù)的參數(shù)描述如下:

參數(shù) 描述 默認(rèn)值
x 用于聚類的數(shù)值型矩陣(或者可以 轉(zhuǎn)換成矩陣的對(duì)象)
centers 若是數(shù)值,則為簇的個(gè)數(shù);若是數(shù)值向量,則為初始簇的中心
iter.max 最大迭代的次數(shù)(數(shù)值型) 10
nstart 如centers是數(shù)值,則為隨機(jī)抽取的數(shù)據(jù)集的個(gè)數(shù) 1
algorithm 用于聚類的算法,可選項(xiàng)包括algorithm="Hartigan-Wong",algorithm="Lloyd", algorithm="Forgy",algorithm="MacQueen"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容