運用三角不等式加速Kmeans聚類演算法

2022-04-09 13:21:15 字數 2924 閱讀 8964

引言:最近在刷《資料探勘導論》,第九章, 9.5.1小節有提到,可以用三角不等式,減少不必要的距離計算,從而達到加速聚類演算法的目的。這在超大資料量的情況下,尤為重要。但是書中並沒有給出解釋和證明。本文以k-means聚類演算法為代表,講解下怎麼利用三角不等式減少計算過程。

任一三角形,兩邊之和大於第三邊,兩邊之差小於第三邊。可以從歐式距離擴充套件到多維歐幾里得空間:設任意三個向量a,b,c。d(x,y)代表x,y在空間上的距離,則三角不等式滿足:

\[d(a,b)+d(b,c)\ge d(a,c) , d(a,b) - d(b,c) \le d(a,c)

\]

k-mean演算法

隨機選擇k個資料點作為初始質心

repeat

計算每乙個資料點計算到現有k個質心的距離,將它歸屬到距離最近質心的所在簇中

重新計算質心。

until所有質心不再變動

\[假設存在資料點集 x=\ , 質心的集合c=\, 對應的簇集合為s=\。

\]

引理1:

\[設 c_i ,c_j(i\neq j )\in c, x \in x。如果2 d(x,c_i) \le d(c_i,c_j) ,那麼d(c_i,x) \le d(c_j,x) 。

\]

引理2:

\[ 設c_i \in c, \exists c_j \in c,使得d(c_i,c_j) = min \ d(c_i,c)。對於資料點x \in x,若有2 d(x,c_i) \le d(c_i,c_j),\

那麼min \ d(x,c) = d(c_i,x)。(記d(x,c)是x到所有質心的距離)\]

證明引理1:

因為有 $$2 d(c_i,x) \le d(c_i,c_j) \ (1)$$

且由三角不等式:$$ d(c_i,c_j) \le d(x,c_i) + d(x,c_j) \ (2)$$

所以 $$2 d(c_i,x) \le d(x,c_i) + d(x,c_j),即d(c_i,x) \le d(c_j,x)$$

證明引理2:

運用反證法:

假設 $$ \exists c_k \in c,使得d(c_k,x) < d(c_i,x), $$

由題幹有:

\[d(c_k,c_i) \ge d(c_i,c_j) (1) , d(x,c_i) \le d(c_i,c_j) (2)

\]又因為 $$ d(c_k,x) +d (c_i,x) \ge d(c_k,c_i) (3)$$

所以結合(1)(3):

\[d(c_k,x) +d (c_i,x) \ge d(c_i,c_j) (4)

\]又由假設:

\[2d(c_i,x) > d(c_i,c_j) (5)

\]這與條件中$$2 d(x,c_i) \le d(c_i,c_j)$$相矛盾,所以可知假設不成立。

即 $$min \ d(x,c) = d(c_i,x)$$

首先$$對於每乙個c_i,用乙個hash表存放與它最近的距離 d(c_i,c_j)。$$

1.如果資料點x已經被分配:

\[則x與它目前所在簇的質心的距離為d(c_i,x),與d(c_i,c_j)比較。

\]\[如果 2 d(c_i,x) \le d(c_i,c_j),則說明不需要更換x的歸屬。\\(注意反之: 2 d(c_i,x) \gt d(c_i,c_j)),並不能說明x應該資料 c_j所在的簇,所以還需要繼續計算x與每個質心的距離。)

\]2.如果資料點x還未被分配

\[則需要遍歷計算, \forall c_i \in c, 比較 2 d(c_i ,x) \le d(c_i,c_j)是否成立,若成立,說明x應當歸屬 c_i ,無需再計算其他距離。

\]前文介紹了如何運用引理1,2 將它運用在k-means演算法上,改寫的k-means演算法如下:

k-mean演算法

隨機選擇k個資料點作為初始質心

repeat

計算k個質心間的距離,並且用hash表儲存每個質心的到其他質心的最短距離。(用d(ci,cj)表示質心ci和它最近質心是cj的距離)。

4.repeat

對於每個資料點x

if(資料點x已分配在質心ci所在簇)

if2d(ci,x) <=d(ci,cj)

x分配無需變動;

else

繼續計算x到現有k個質心的距離,將它歸屬到距離最近質心的所在簇中

end if

else(資料點x未分配到任何簇)

fori from 0 to kdo

if2d(ci,x) <=d(ci,cj)

將x歸屬到ci所在簇中

退出for迴圈

end if

end for

end if

重新計算質心。

until所有質心不再變動

本文中只舉例了使用歐幾里得距離的k-means演算法。其實本文中的d(x,y)不僅可以指代distance,更廣義的可以指代dissimilarity。任何通過度量相異性的聚類演算法都可以使用三角不等式,避免多餘的計算,例如計算最近鄰的dbscan。感興趣的讀者可以自己推導改進。

三個不等 關於「刑事和解」的三個不等式

故意傷害案的當事人,往往是鄉鄰 親戚或者朋友,原本可以和睦相處 友愛互助,卻因瑣事惡言相向 拳腳相加,一方遭受皮肉之苦,一方落得刑罰懲處,可謂兩敗俱傷。辦案檢察官在唏噓之餘,要充分運用刑事和解制度,消弭矛盾,重建和諧,做有情懷 有溫度的司法人。關於檢察官在主導刑事和解中應注意的幾個問題,梁小檢邀請到...

三個不等 關於「刑事和解」的三個不等式

故意傷害案的當事人,往往是鄉鄰 親戚或者朋友,原本可以和睦相處 友愛互助,卻因瑣事惡言相向 拳腳相加,一方遭受皮肉之苦,一方落得刑罰懲處,可謂兩敗俱傷。辦案檢察官在唏噓之餘,要充分運用刑事和解制度,消弭矛盾,重建和諧,做有情懷 有溫度的司法人。關於檢察官在主導刑事和解中應注意的幾個問題,梁小檢邀請到...

三個不等 數學雜談之伯努利不等式

高老師 小七,見過這個不等式沒有?小七 沒有。高老師 滾回去翻課本,選修4 5,作為一道例題出現在課本上。這是伯努利不等式在課本上的表現形式,我們今天來講課本上的這個不等式的證明方法。今天會講到三個方法。求導 注意此處觀察到的特殊點。這裡簡單分析一下這個導函式 小七 啊,正常思路。2.數學歸納法 這...