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