聚类算法简介
聚類
文章目錄
- 聚類
- 一.什么是聚類
- 1.聚類定義
- 2. 相似度的衡量
- 3. 聚類與降維的關(guān)系
- 4.聚類的思想
- 二.K-means算法
- 1. 算法步驟
- 2. k-means公式化解讀
- 3. k-means ++
- 4.Mini-Batch K-Means
- 5. k-means總結(jié):
- 三.Canopy算法
- 四.聚類算法的評(píng)價(jià)指標(biāo)
- 1. 一些基本的
- 2. ARI,AMI
- 3. 輪廓系數(shù)(Silhouette)
- 五.層次聚類
- 1. Agnes算法
- 2.Diana算法
- 3.簇間距離
- 六.密度聚類方法
- 1.簡介
- 2.密度的相關(guān)概念
- 3.DBSCAN算法
- 4.密度最大值算法
- 七.譜聚類
- 1.什么是譜
- 2.算法簡介
- 八.標(biāo)簽傳遞算法
一.什么是聚類
1.聚類定義
聚類就是對(duì)大量未知標(biāo)注的數(shù)據(jù)集,按數(shù)據(jù)的內(nèi)在相似性將數(shù)據(jù)集劃分為多個(gè)類別,使類別內(nèi)的數(shù)據(jù)相似度較大而類別間的數(shù)據(jù)相似度較小。由這個(gè)定義,我們便可以知道,數(shù)據(jù)集并沒有目標(biāo)值。因此聚類算法屬于無監(jiān)督算法。
2. 相似度的衡量
之前在k-means算法的簡介當(dāng)中,提及過一個(gè)歐式距離。但實(shí)際上,相似度的衡量方式有很多種。比如說:
- 歐式距離(這里列出的是歐式距離的拓展,閔可夫斯基距離):
- 杰卡德相似系數(shù)(Jaccard)
- 余弦相似度:
cos?(θ)=xTy∣x∣?∣y∣\cos(\theta) = \frac{x^Ty}{|x|\cdot |y|} cos(θ)=∣x∣?∣y∣xTy?
這個(gè)是x向量與y向量之間的夾角為theta。如果x,y都是多維呢?如下:
- Pearson相似系數(shù):
- 相對(duì)熵(K-L距離):
- Hellinger距離:
在Hellinger距離當(dāng)中,特殊的,我們?nèi)=0的時(shí)候:
對(duì)于這幾種距離到底適用于哪種場(chǎng)景,優(yōu)缺點(diǎn)是什么,其實(shí)很難說,查了一些資料,一句話引起了我的注意:
其實(shí)你會(huì)發(fā)現(xiàn),選擇不同的相似性度量方法,對(duì)結(jié)果的影響是微乎其微的。 ——《集體智慧編程》
3. 聚類與降維的關(guān)系
我們看下面這個(gè)示例,我們假設(shè)有x1,x2, ……, xn堆樣本,每堆樣本有m個(gè)數(shù)據(jù),那么這m個(gè)堆樣本就組成了n*m的矩陣。
(x1x2x3....xn)?(x1(1)x1(2)……x1(m)x2(1)x2(2)……x2(m)x3(1)x3(2)……x3(m)………………………………………………………………xn(1)xn(2)……xn(m))\begin{pmatrix} x_{1}\\ x_{2}\\ x_{3}\\ .\\ .\\ .\\ .\\ x_{n} \end{pmatrix} \Rightarrow \begin{pmatrix} x_{1}^{(1)} && x_{1}^{(2)} && …… && x_{1}^{(m)} \\ x_{2}^{(1)} && x_{2}^{(2)} && …… && x_{2}^{(m)} \\ x_{3}^{(1)} && x_{3}^{(2)} && …… && x_{3}^{(m)} \\ ……&&……&&……&&……\\ ……&&……&&……&&……\\ ……&&……&&……&&……\\ x_{n}^{(1)} && x_{n}^{(2)} && …… && x_{n}^{(m)} \\ \end{pmatrix} ?????????????x1?x2?x3?....xn????????????????????????????x1(1)?x2(1)?x3(1)?………………xn(1)???x1(2)?x2(2)?x3(2)?………………xn(2)???……………………………………??x1(m)?x2(m)?x3(m)?………………xn(m)??????????????
聚類,就是要把這些樣本進(jìn)行分類,是一種無監(jiān)督的分類。那么,經(jīng)過分類之后,發(fā)現(xiàn)整體有k=6個(gè)簇。依據(jù)不同的簇,又可以組成一個(gè)m*6的one-hot矩陣如下:
(x1(1)x1(2)……x1(m)x2(1)x2(2)……x2(m)x3(1)x3(2)……x3(m)………………………………………………………………xn(1)xn(2)……xn(m))?(one_hot矩陣)?n?6矩陣\begin{pmatrix}x_{1}^{(1)} && x_{1}^{(2)} && …… && x_{1}^{(m)} \\x_{2}^{(1)} && x_{2}^{(2)} && …… && x_{2}^{(m)} \\x_{3}^{(1)} && x_{3}^{(2)} && …… && x_{3}^{(m)} \\……&&……&&……&&……\\……&&……&&……&&……\\……&&……&&……&&……\\x_{n}^{(1)} && x_{n}^{(2)} && …… && x_{n}^{(m)}\end{pmatrix} \Rightarrow (one\_hot矩陣) \Rightarrow n*6矩陣 ????????????x1(1)?x2(1)?x3(1)?………………xn(1)???x1(2)?x2(2)?x3(2)?………………xn(2)???……………………………………??x1(m)?x2(m)?x3(m)?………………xn(m)???????????????(one_hot矩陣)?n?6矩陣
這就是一種降維。所以在某些情景里面,降維和聚類具有一定的相通的地方。
4.聚類的思想
基本思想:對(duì)于給定的類別數(shù)目k,首先給出初始劃分,通過迭代改變樣本和簇的隸屬關(guān)系,使得每一次改進(jìn)之后的劃分方案都較前一次好
二.K-means算法
這個(gè),先看一看簡介:k-means算法簡介
這個(gè)之前有介紹過基本原理,但是需要做一些補(bǔ)充
1. 算法步驟
假定輸入樣本為S=x 1 ,x 2 ,…,x m ,則 算法步驟為:
-
選擇初始的k個(gè)類別中心μ1, μ2 … μk
-
對(duì)于每個(gè)樣本xi ,將其標(biāo)記為距離類別中心最近的類別,即:
labeli=argmin1<=j<=k∣∣xi?uj∣∣label_{i} = argmin_{1<=j<=k}||x_{i}-u_{j}|| labeli?=argmin1<=j<=k?∣∣xi??uj?∣∣ -
將每個(gè)類別中心更新為隸屬該類別的所有樣本的均值
μj=1∣cj∣∑i∈cjxi\mu_{j} = \frac{1}{|c_{j}|}\sum_{i\in c_j}x_{i} μj?=∣cj?∣1?i∈cj?∑?xi? -
重復(fù)最后兩步,直到類別中心的變化小于某閾值。
中止條件:迭代次數(shù)/簇中心變化率/最小平方誤差MSE(Minimum Squared Error),這個(gè)需要你自己指定
2. k-means公式化解讀
其實(shí),對(duì)于k-means算法,和之前的機(jī)器學(xué)習(xí)算法一樣,也有一個(gè)目標(biāo)函數(shù),我們假設(shè)有K個(gè)簇中心為 u1 , u2 , …… , uk ,每個(gè)簇的樣本數(shù)目為 N1 , N2 , …… , Nk,我們使用平方誤差做目標(biāo)函數(shù),就會(huì)得到如下公式:
如何理解這個(gè)損失函數(shù)呢?
我們假定有三個(gè)類別,分別服從三個(gè)不同的正態(tài)分布N(u1, a1^2), N(u2, a2^2), N(u3, a3^2)。分別求這三個(gè)類別里面,所有樣本的最大似然估計(jì)。以第一個(gè)類別為例:
x(i)~N(u1,σ12)~12πσ1e?(x(i)?u1)22σ12x^{(i)}\thicksim N(u1,\sigma_{1}^2)\thicksim \frac{1}{\sqrt{2\pi}\sigma_{1}} e^{-\frac{(x^{(i)}-u1)^2}{2\sigma1^2}} x(i)~N(u1,σ12?)~2π?σ1?1?e?2σ12(x(i)?u1)2?
第一個(gè)類別里面的所有樣本都是服從這樣一個(gè)分布,我們按照求最大似然估計(jì)的套路,先累乘,就是:
∏i=1n12πσ1e?(x(i)?u1)22σ12\prod_{i=1}^{n}\frac{1}{\sqrt{2\pi}\sigma_{1}} e^{-\frac{(x^{(i)}-u1)^2}{2\sigma1^2}} i=1∏n?2π?σ1?1?e?2σ12(x(i)?u1)2?
那么,三個(gè)類別我們都進(jìn)行累乘,然后取對(duì)數(shù)。前面帶有pi的系數(shù)是常量,可以不管,最后剩下的就是xi-uj。
通過上述這個(gè)推導(dǎo),有沒有想過這樣一個(gè)事情,為什么正態(tài)分布的情況竟然能夠和損失函數(shù)完美對(duì)接呢?由此,也可以大體猜出一件事情:k-means對(duì)樣本分布是有一定的要求的,即:整體符合正態(tài)分布。即使單個(gè)樣本不一定是服從于正態(tài)分布,但如果樣本足夠大,那么通過大數(shù)定律,使得整體大概符合正態(tài)分布也是可以的。
如果針對(duì)這個(gè)損失函數(shù),我們對(duì)不同的中心點(diǎn),即:u1, u2, u3, ……, uk求偏導(dǎo),然后求駐點(diǎn),會(huì)如何呢?
由此可見:有好多個(gè)極值點(diǎn),從這個(gè)角度來說,k-means可以當(dāng)作是那個(gè)所示函數(shù)在梯度下降上的一個(gè)應(yīng)用。而依據(jù)上面這個(gè)數(shù)學(xué)推導(dǎo),我們大致就可以畫出目標(biāo)函數(shù)的一個(gè)大致的圖像:
那么很顯然,你到底初值選哪里,才更容易迭代到更好的結(jié)果,還真是不太容易搞,就像上圖當(dāng)中的,你選3點(diǎn),肯定比1點(diǎn)能迭代到更小的損失值。說白了:初值選的好不好,直接影響到你能否迭代到一個(gè)好的結(jié)果。這就引申出了一個(gè)很重要的問題:k-means是初值敏感的。就像下面這個(gè)圖:
如果我像左圖那樣選定初始點(diǎn),那么久可能分成右側(cè)那個(gè)圖的樣子。但是實(shí)際上,那個(gè)最大的圈,還可以至少分成兩部分。
那么如何解決這個(gè)事情?
3. k-means ++
解決上述問題的一種思路是:初始選擇的樣本點(diǎn),距離要盡可能的大。k-means算法一開始都會(huì)選初值。假定我選定了一個(gè)點(diǎn),那么我把各個(gè)樣本到這個(gè)點(diǎn)的距離全部計(jì)算一次,這樣就得到了一組距離:d1, d2, d3 ……, dn。我們令D = d1 + d2 + …… + dn。然后得到若干個(gè)概率p1= d1/D, p2= d2/D, ……pn = dn/D。我們按照概率來選擇哪個(gè)點(diǎn)是優(yōu)先選擇的點(diǎn)。
什么叫依概率選擇呢?其實(shí)就是說,以上這若干的概率,哪個(gè)值最大,就越有可能會(huì)被選中,是不是一定選中呢?不一定!!不過,這個(gè)可能意味著運(yùn)算量會(huì)很大。 有一段代碼很好的說明了這個(gè)思路:
cluster_center = np.zeros((k,n)) #聚類中心 j= np.random.randint(m) #m個(gè)樣本,在這m個(gè)樣本當(dāng)中隨機(jī)選一個(gè) cluster_center[0] = data[j][:] #隨機(jī)選了一個(gè)中心j,那么給這個(gè)中心創(chuàng)建一個(gè)空列表,里面存儲(chǔ)離這個(gè)中心合適的點(diǎn) dis = np.zeros(m) - 1 i=0 while i<k-1:for j in ramge(m):d = (cluster_center[i]-data[j]) ** 2 #計(jì)算距離,這里這個(gè)距離是自己創(chuàng)造的一個(gè)標(biāo)準(zhǔn)d = np.sum(d)if (dis[j]<0) or (dis[j] > d): #離中心點(diǎn)距離要盡可能的大dis[j] = dj = random_select(dis) # 按照dis的加權(quán)來依概率選擇樣本i += 1cluster_center[i] = data[j][:]如此一來,我們就得到了另一個(gè)算法:k-means++,相比純粹的k-means,他就是多了一個(gè)這樣的初始選擇方式。這個(gè)方式頗有點(diǎn)這種味道:跳遠(yuǎn)比賽,不能每個(gè)人只跳一次,而是每個(gè)人跳好多次,綜合考慮。
4.Mini-Batch K-Means
如果我們?cè)趉-means的基礎(chǔ)上考慮SGD, BGD。如果我們所有點(diǎn)都考慮,那么就是SGD,但是如果我們從各個(gè)樣本之間隨機(jī)選若干個(gè)樣本,然后做這些事情呢,那不就是BGD的思想。實(shí)際上,還真就有這種方式的k-means。這個(gè)方式有另外一個(gè)名字:Mini-Batch K-Means
5. k-means總結(jié):
首先,我們看看它的優(yōu)點(diǎn):
- k-means是解決聚類問題的一種經(jīng)典算法,簡單、快速
- 對(duì)處理大數(shù)據(jù)集,該算法保持可伸縮性和高效率
- 當(dāng)簇近似為高斯分布時(shí),它的效果較好
但是,k-means的缺點(diǎn)也很明顯,上面已經(jīng)分析過了:
- 在簇的平均值可被定義的情況下才能使用,可能不適用于所有的應(yīng)用場(chǎng)景
- 必須事先給出k(要生成的簇的數(shù)目,這個(gè)是個(gè)超參數(shù),自己調(diào)整不是很好拿捏),而且對(duì)初值敏感,對(duì)于不同的初始值可能會(huì)導(dǎo)致不同結(jié)果。
- 不適合于發(fā)現(xiàn)非凸形狀的簇或者大小差別很大的簇
- 對(duì)躁聲和孤立點(diǎn)數(shù)據(jù)敏感
與此同時(shí),k-means可作為其他聚類方法的基礎(chǔ)算法,如譜聚類
三.Canopy算法
這個(gè)算法,最開始其實(shí)是用來做空間索引的,但是它也可以應(yīng)用于聚類問題。
這個(gè)算法的大體思路如下:
我們假定,有給定樣本 x1 , x2 …… xm ,首先,我們給定先驗(yàn)值 r1 , r2 , 假設(shè)r1 <r2:
- 我們讓x1 , x2 ……xm 構(gòu)成一個(gè)列表L; 然后,對(duì)每一個(gè)樣本,都分別構(gòu)造一個(gè)空列表,記為:c1, c2, ……, cm,如下圖所示(畫的不好,請(qǐng)見諒):
-
我們隨機(jī)選擇L中的樣本c,要求c的列表 Cc 為空:
-
計(jì)算L中樣本 xj 與c的距離 dj
- 若 dj < r1 ,則在L中刪除 xj ,將 Cj 賦值為{c}
- 否則,若 dj > r2 ,則將 Cj 增加{c}
- 若L中沒有不滿足條件的樣本c,算法結(jié)束。
怎么解釋上面這個(gè)算法呢?
如果把Canopy當(dāng)成聚類算法,那么r1,r2其實(shí)是兩個(gè)半徑。一個(gè)大一個(gè)小,假如:r1<r2。針對(duì)這兩個(gè)一大一小的圓,小圓內(nèi)部的樣本點(diǎn),大概率是一個(gè)類型的。大圓內(nèi)部呢?有可能就包含其他類別的了。那么選定一個(gè),計(jì)算該樣本和其他樣本的距離,如果這個(gè)距離小于小圓半徑,那么這兩個(gè)就可以當(dāng)做是一個(gè)類的,否則就是其他類的。
因此,Canopy的一個(gè)關(guān)鍵就是:如何調(diào)整這兩個(gè)圓的大小。這兩個(gè)也是超參數(shù),需要手動(dòng)調(diào),需要一定的經(jīng)驗(yàn)積累。
四.聚類算法的評(píng)價(jià)指標(biāo)
評(píng)價(jià)指標(biāo)非常多。
1. 一些基本的
首先,先列出幾個(gè)基本的:
-
均一性評(píng)價(jià)(Homogeneity):一個(gè)簇只包含一個(gè)類別的樣本,則滿足均一性
-
完整性評(píng)價(jià)(Completeness):同類別樣本被歸類到相同簇中,則滿足完整性
-
V-measure:均一性和完整性的加權(quán)平均
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-3rj4hZDc-1620803235347)(/home/johnny/桌面/我的筆記/機(jī)器學(xué)習(xí)強(qiáng)化/聚類/15.png)]
2. ARI,AMI
ARI: Adjust Run Index。這個(gè)評(píng)價(jià)的思路,說直白點(diǎn)就是:隨便挑兩個(gè)樣本,看他們是同一個(gè)類別的概率是多少。這個(gè)概率的值越大,說明分的并不成功(兩個(gè)聚類,本應(yīng)該屬于兩個(gè)類,結(jié)果卻是一個(gè),當(dāng)然不成功了)
ARI本質(zhì)上講,就是評(píng)判兩種聚類的相關(guān)性到底是多少,它的的思路是:
數(shù)據(jù)集S共有N個(gè)元素,其中,兩個(gè)聚類結(jié)果分別是:X = {X1 , X2 , …… Xr }, Y = { Y1 , Y2 …… Ys}
X, Y這兩個(gè)聚類各自所包含的元素是:a={ a1 , a2 , …… ar}, b = {b1 , b2 , …… bs}
我們記:
nij=∣Xi∩Yi∣n_{ij}=|X_{i}\cap Y_{i}| nij?=∣Xi?∩Yi?∣
那么:
我們?nèi)绻Y(jié)合概率論當(dāng)中的聯(lián)合分部函數(shù),其實(shí)就比較好理解了:
關(guān)于ARI公式:說明一下:
- 這些符號(hào)的含義是:index - (index的期望), 最大的index,最小的index。
- 后面的C是概率里面的組合。后面那個(gè)是指:nij里面任意選兩個(gè)(注意:不是平方)
對(duì)于AMI,它和ARI的區(qū)別很簡單:ARI是算概率,AMI算的是互信息:
其中,MI代表的事互信息,相應(yīng)的還有一個(gè)正則化互信息NMI:
而互信息期望E(MI)呢?
3. 輪廓系數(shù)(Silhouette)
計(jì)算樣本i到同簇其他樣本的平均距離di 。di越小,說明樣本i越應(yīng)該被聚類到該簇。將ai 稱為樣本i的簇內(nèi)不相似度。簇C中所有樣本的di均值稱為簇C的簇不相似度。
當(dāng)然,我們不能只計(jì)算一個(gè)樣本的,得計(jì)算樣本i到其他某簇Cj 的所有樣本的平均距離bij ,這個(gè)bij稱為樣本i與簇C j 的不相似度。于是,我們得到了樣本i與其他簇的不相似度列表,我們從中挑選最小值:
bi=min(bi1,bi2,……bik)b_{i} = min({b_{i1},b_{i2},……b_{ik}}) bi?=min(bi1?,bi2?,……bik?)
b i 越大,說明樣本i越不屬于其他簇。
得到了簇內(nèi)不相似度ai, 以及簇間不相似度bi之后,我們便得到了樣本i的輪廓系數(shù):
s(i)=b(i)?a(i)max{a(i)?b(i)}={1?a(i)b(i),a(i)<b(i)0,a(i)=b(i)b(i)a(i)?1,a(i)>b(i)s(i) = \frac{b(i)-a(i)}{max{\{a(i)-b(i)\}}}=\begin{cases}1-\frac{a(i)}{b(i)},a(i)<b(i)\\0,a(i)=b(i)\\\frac{b(i)}{a(i)}-1,a(i)>b(i)\end{cases} s(i)=max{a(i)?b(i)}b(i)?a(i)?=??????1?b(i)a(i)?,a(i)<b(i)0,a(i)=b(i)a(i)b(i)??1,a(i)>b(i)?
Note:
-
若s(i) 接近1,則說明樣本i聚類合理;
若s(i) 接近-1,則說明樣本i更應(yīng)該分類到另外的簇;
若s(i) 近似為0,則說明樣本i在兩個(gè)簇的邊界上。
-
所有樣本的s(i)的均值稱為聚類結(jié)果的輪廓系數(shù)。這個(gè)才是衡量聚類整體是否合理、有效的度量。
五.層次聚類
層次聚類方法對(duì)給定的數(shù)據(jù)集進(jìn)行層次的分解,直到某種條件滿足為止。
上面這么說可能有些抽象,但實(shí)際上層次聚類其實(shí)有很多場(chǎng)景。比如說學(xué)科,大的學(xué)科有文科,醫(yī)學(xué),哲學(xué),理學(xué),工學(xué)。但這些學(xué)科等等還可以往下劃分,比如工學(xué)有建筑學(xué),機(jī)械工程,計(jì)算機(jī)等等,以此類推,按照這個(gè)方式進(jìn)行分裂的,就是Diana算法。也可以反著過來,即:把建筑,機(jī)械,計(jì)算機(jī)等凝聚成為工學(xué),比如Agnes算法。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-ZXqtaIMn-1620911358214)(/home/johnny/桌面/我的筆記/機(jī)器學(xué)習(xí)強(qiáng)化/聚類/21.png)]
1. Agnes算法
Agnes算法是一種自底向上的策略,首先將每個(gè)對(duì)象作為一個(gè)簇,然后合并這些原子簇為越來越大的簇,直到某個(gè)終結(jié)條件被滿足
該算法的思路是:
算法最初將每個(gè)對(duì)象作為一個(gè)簇,然后這些簇根據(jù)某些準(zhǔn)則被一步步地合并。兩個(gè)簇間的距離由這兩個(gè)不同簇中距離最近的數(shù)據(jù)點(diǎn)對(duì)的相似度來確定。最終達(dá)到用戶指定的簇?cái)?shù),或者達(dá)到某個(gè)閾值為止。
2.Diana算法
而Diana算法采用自頂向下的策略,它首先將所有對(duì)象臵于一個(gè)簇中,然后逐漸細(xì)分為越來越小的簇,直到達(dá)到了某個(gè)終結(jié)條件。是Agnes算法的反過程。
它的思路是:
首先將所有的對(duì)象初始化到一個(gè)簇中,然后根據(jù)某些準(zhǔn)則將該簇分類。直到到達(dá)用戶指定的簇?cái)?shù)目或者兩個(gè)簇之間的距離超過了某個(gè)閾值為止
3.簇間距離
我們注意到,在上面兩個(gè)算法當(dāng)中都提及了“某些準(zhǔn)則”這個(gè)詞,這個(gè)所謂的準(zhǔn)則,就是你如何定義簇間距。關(guān)于粗間距,有這么幾種方式:這當(dāng)中的距離是什么,看“相似度衡量”這部分。
-
最小距離
- 兩個(gè)集合中最近的兩個(gè)樣本的距離
- 容易形成鏈狀結(jié)構(gòu)(距離過小的化,就連在一塊了)
-
最大距離
- 兩個(gè)集合中最遠(yuǎn)的兩個(gè)樣本的距離
- 若存在異常值則不穩(wěn)定
-
平均距離
- 兩個(gè)集合中樣本間兩兩距離的平均值
- 兩個(gè)集合中樣本間兩兩距離的平方和
這三種距離算法各有利弊,得根據(jù)現(xiàn)實(shí)情況來搞
六.密度聚類方法
1.簡介
密度聚類算法的思路并不難:如果樣本點(diǎn)的密度大于某閾值(用戶指定),則將該樣本添加到最近的簇中。
和之前介紹的聚類算法不同,這種算法受初值影響較小,因此,容錯(cuò)率較高,對(duì)噪聲數(shù)據(jù)不敏感。但是,密度的計(jì)算往往運(yùn)算量很大。因此在密度聚類算法當(dāng)中,降維、建立空間索引的手段經(jīng)常能用到。
常見的密度聚類算法有:DBSCAN,密度最大值算法等
2.密度的相關(guān)概念
這個(gè)密度,其實(shí)就是我們傳統(tǒng)意義上理解的密度,但是在數(shù)學(xué)當(dāng)中需要有一個(gè)量化的概念。這個(gè)概念首先是從鄰域這個(gè)概念入手
ε-鄰域:給定對(duì)象在半徑ε內(nèi)的區(qū)域(說白了,就是半徑為ε的小圓)
有了鄰域的概念,那么其他概念就容易理解了:
核心對(duì)象:對(duì)于給定的數(shù)目m,如果一個(gè)對(duì)象的ε-鄰域至少包含m個(gè)對(duì)象,則稱該對(duì)象為核心對(duì)象
直接密度可達(dá):給定一個(gè)對(duì)象集合D,如果p是在q的ε-鄰域內(nèi);而q是一個(gè)核心對(duì)象,我們說對(duì)象p從對(duì)象q出發(fā)是直接密度可達(dá)的。
密度可達(dá):直觀含義就是,如果直接密度可達(dá)具有傳遞性,p1->p2,密度可達(dá),p2->p3密度可達(dá),……p(n-1)->pn密度可達(dá),最后,p1->pn也是密度可達(dá)的。如下圖所示:
密度相連:如果對(duì)象集合D中存在一個(gè)對(duì)象o,使得對(duì)象p和q是從o關(guān)于ε和m密度可達(dá)的,那么對(duì)象p和q是關(guān)于ε和m密度相連的。這個(gè)概念和密度可達(dá)有很強(qiáng)的關(guān)聯(lián)性,說直白點(diǎn)o是傳遞鏈中的某一環(huán)。如下圖所示:
簇:關(guān)于簇的定義并不唯一,但是在密度聚類算法當(dāng)中,它是這么定義的:最大的密度相連對(duì)象的集合。
噪聲:不包含在任何簇中的對(duì)象稱為噪聲。
我們通過這些概念的定義,大體也能猜出來密度聚類算法的一些特點(diǎn):
- 每個(gè)簇至少包含一個(gè)核心對(duì)象;
- 非核心對(duì)象可以是簇的一部分,構(gòu)成了簇的邊緣;
- 包含過少對(duì)象的簇被認(rèn)為是噪聲
3.DBSCAN算法
該算法的英文名:Density-Based Spatial(空間的) Clustering of Applications with Noise。從這個(gè)英文名當(dāng)中,我們大致就可以猜出來它的特點(diǎn),該算法能夠把具有足夠高密度的區(qū)域劃分為簇,并且受噪聲的影響較小。我們通過
DBSCAN算法的流程如下:
- 首先,選定一個(gè)點(diǎn)p,這個(gè)點(diǎn)的ε-鄰域包含多于m個(gè)對(duì)象,則創(chuàng)建一個(gè)p作為核心對(duì)象的新簇;
- 尋找并合并核心對(duì)象直接密度可達(dá)的對(duì)象;
- 重復(fù)上述過程,當(dāng) 沒有新點(diǎn)可以更新簇時(shí),算法結(jié)束。
通過第二點(diǎn),似乎DBSCAN算法有點(diǎn)并查集的味道哈!!
4.密度最大值算法
在密度最大值算法當(dāng)中,引入了另外一個(gè)概念:局部密度。這個(gè)局部密度的定義方式不止一種,大概有以下幾種:
- 截?cái)嘀?#xff1a;
這個(gè)式子本質(zhì)上是數(shù)量的統(tǒng)計(jì),在這個(gè)式子當(dāng)中,dc 代表一個(gè)截?cái)嗑嚯x, ρi 即到對(duì)象i的距離小于dc 的對(duì)象的個(gè)數(shù)。由于該算法只對(duì)ρi 的相對(duì)值敏感, 所以對(duì)dc 的選擇是穩(wěn)健的,一種推薦做法是選擇dc ,使得平均每個(gè)點(diǎn)的鄰居數(shù)為所有點(diǎn)的1%-2%
-
高斯核函數(shù)相似度:
-
K-近鄰均值
與此同時(shí),密度最大算法還引入了另外一個(gè)概念:高局部密度點(diǎn)距離
直白點(diǎn)解釋:
-
高局部密度點(diǎn):比我密度大的,卻離我最近的那個(gè)點(diǎn)
-
高局部密度距離:比我密度大的,卻離我最近的那個(gè)點(diǎn)的距離
不過,如果你遇到了一個(gè)密度最大的呢?顯然,你就找不到比它密度更大的了,因此這個(gè)時(shí)候,高局部密度距離就做了一個(gè)修正:
在密度最大值方法中,關(guān)于簇,也有一個(gè)全新的定義,這當(dāng)中出現(xiàn)了一個(gè)新的概念:簇中心
-
那些有著比較大的局部密度ρ i 和很大的高密距離 δ i 的點(diǎn)被認(rèn)為是簇的中心;
直白點(diǎn)解釋:我所在的地方局部密度很大(說明我周圍很擁擠),同時(shí),密度比我還高的,離我很遠(yuǎn),說明我所處的地方是一個(gè)簇,我就是這個(gè)簇的中心
-
高密距離 δi 較大但局部密度ρi較小的點(diǎn)是異常點(diǎn);
直白點(diǎn)解釋:比我所在群落密度高的(為啥密度比我高?因?yàn)槲抑苓吘蜎]有幾個(gè)人),離我卻很遠(yuǎn),說明我太不合群了。所以我是異常點(diǎn)
在明確了什么是簇中心之后,根據(jù)簇中心之間的距離進(jìn)行k-means,或者按照密度可達(dá)的方法,都可以進(jìn)行分類
七.譜聚類
1.什么是譜
在譜聚類里面,大量運(yùn)用了線性代數(shù)當(dāng)中的特征值與特征向量的知識(shí)點(diǎn)。在了解譜之前,務(wù)必要了解這方面的內(nèi)容,在了解了這方面內(nèi)容之后,我們就可以引出譜的概念:方陣作為線性算子,它的所有特征值的全體統(tǒng)稱方陣的譜。
這當(dāng)中什么是線性算子呢?y = Ax, A是個(gè)矩陣。這樣就相當(dāng)于對(duì)x進(jìn)行了一個(gè)線性變換。我們可以理解為y是通過某種映射得到的,即:y = map(x),這個(gè)map其實(shí)就是這個(gè)A,就是線性算子。我們對(duì)A求特征值,把特征值拿出來所形成的東西就叫做譜
在知道了譜之后,我們就可以引申出譜半徑的概念:其實(shí)就是最大的那個(gè)特征值。
2.算法簡介
首先要說的是:譜聚類是一種基于圖論的聚類方法,因此,我們必須對(duì)數(shù)據(jù)結(jié)構(gòu)當(dāng)中的圖有所了解
我們先定義一個(gè)鄰接矩陣:
w=(wij),i,j=1,2,……,nw = (w_{ij}),i,j = 1,2,……,n w=(wij?),i,j=1,2,……,n
鄰接矩陣,學(xué)過數(shù)據(jù)結(jié)構(gòu)的都知道這個(gè)其實(shí)表示的是結(jié)點(diǎn)之間的距離,在圖中,每個(gè)結(jié)點(diǎn)和其他結(jié)點(diǎn)之間都有個(gè)距離,那么這個(gè)距離的和就是結(jié)點(diǎn)的度:
di=∑j=1nwijd_{i} = \sum_{j=1}^{n}w_{ij} di?=j=1∑n?wij?
我們把這幾個(gè)度組合在一起,形成一個(gè)對(duì)角矩陣D,就形成了度矩陣:
有了鄰接矩陣,還有對(duì)角矩陣,我們就會(huì)得到拉普拉斯矩陣:L = W-D
我們可以求L的特征值(λ1,λ2,λ3,……λn)和特征向量(u1,u2,……,un)。所有特征向量都不止一個(gè)元素,可以組成一個(gè)特征向量矩陣,也是n*n的,如果我們想做k個(gè)類別的聚類(k<n)。那么我們就把特征向量矩陣當(dāng)中(u1,u2,……uk)對(duì)應(yīng)的這幾列給拿出來,剩余的舍棄掉(這其實(shí)不就是降維嘛!這也是聚類和PCA相關(guān)性的體現(xiàn))。
為什么這么做呢,為什么能夠把特征向量當(dāng)成特征選擇的依據(jù)?我們舉一個(gè)簡單的例子解釋一下:我們記一個(gè)元素全為1的列向量,假設(shè)為 Y則有D*Y - W*Y = 0 = 0*Y=>(D-W)*Y = 0*Y,因此Y一定是特征向量
我們假設(shè)n個(gè)樣本當(dāng)中,前r個(gè)是一個(gè)類,后n-r也是一個(gè)類,那么這兩個(gè)類也有各自的拉普拉斯矩陣,因此也一定符合上面這個(gè)特征,即:全為1的列向量一定是特征向量,且對(duì)應(yīng)特征值是1。(如圖4.png那樣子,注意后面那個(gè)矩陣是Yr, Yn-r (原本用的是1表示,但是寫的像L,別誤解了),但是等號(hào)后面那個(gè)是L,不是1)。這個(gè)式子表明一個(gè)事情:(Yr, Yn-r) 那個(gè)陣,起到了分類的作用。但是現(xiàn)實(shí)當(dāng)中,(Yr, Yn-r)這個(gè)陣大概率沒這么漂亮,即當(dāng)中的1可能是0.9,0.95,0.8這種接近1的,而原本是0的,可能是0.1,0.05這種接近0的。畢竟機(jī)器學(xué)習(xí)分類總會(huì)出現(xiàn)誤差
然后,我們看看這個(gè)特征向量矩陣,每一行都有k個(gè)數(shù),那么第一行k個(gè)數(shù)就是第一個(gè)樣本的特征,第二行的k個(gè)數(shù)就是第二個(gè)樣本的特征。如此一來,我們就得到了n個(gè)樣本的各自k個(gè)特征。萬事俱備,我們運(yùn)行一個(gè)k-means就可以了。
通過對(duì)樣本數(shù)據(jù)的拉普拉斯矩陣的特征向量進(jìn)行聚類,從而達(dá)到對(duì)樣本數(shù)據(jù)聚類的目的
八.標(biāo)簽傳遞算法
這個(gè)基本了解一下就可以了。
在現(xiàn)實(shí)當(dāng)中,我們得到一組樣本。有的有標(biāo)簽,有的沒有標(biāo)簽。于是,我們針對(duì)那些有標(biāo)簽的。他們都是給定的,我們就是針對(duì)這個(gè)標(biāo)簽來進(jìn)行操作
標(biāo)簽傳遞算法(Label Propagation Algorithm, LPA),將標(biāo)記樣本的標(biāo)記通過一定的概率傳遞給未標(biāo)記樣本,直到最終收斂。
具體怎么傳遞呢?這個(gè)可以由用戶定義
總結(jié)
- 上一篇: 解决关于mbp132018 parall
- 下一篇: Focusky教程 | 如何自动播放Fo