MapReduce之K 均值聚類(一)

2021-09-27 07:08:07 字數 3100 閱讀 5147

什麼是聚類?什麼是k-均值演算法?基本來說,給定k

>

0k>0

k>

0,(k

kk為簇數)和乙個集合(其中包括需要聚類的n

nn個d

dd-維物件): k

kk-均值演算法是乙個基於距離的聚類演算法,k

kk-均值聚類有很多應用,可以用來找出有共同行為的一組消費者,或者根據文件內容的相似性對文件完成聚類,如:

在乙個二維環境中,輸入資料可能如下,其中每行表示乙個點(x,y):

p 1=

(1,1

)p_1=(1,1)

p1​=(1

,1)p2=

(2,1

)p_2=(2,1)

p2​=(2

,1)p3=

(1,2

)p_3=(1,2)

p3​=(1

,2)p4=

(5,5

)p_4=(5,5)

p4​=(5

,5)p5=

(6,5

)p_5=(6,5)

p5​=(6

,5)p6=

(5,6

)p_6=(5,6)

p6​=(5

,6)p7=

(7,7

)p_7=(7,7)

p7​=(7

,7)p8=

(9,6

)p_8=(9,6)

p8​=(9

,6)開始時,會選擇k個點作為簇中心,這些點作為簇質心。可以採用很多方法來初始化簇的質心,其中一種方法是從n個點的樣本中隨即選取k個點,一旦選擇的k個初始的簇質心,可以計算輸入集合中各個點到這k個中心點的距離,然後將各個點分配到與它最近的簇中心。所有物件分配結束後,在重新計算k個質心的位置。這兩步反覆迭代,直到簇中心不再改變(或變化範圍小於閾值)。這就是乙個基本的k-均值聚類過程。

k

kk-均值聚類的形式化表述如下:

給定n

nn個d

dd-維點:

x 1=

(x11,

x12,…

,x1d

)x_1=(x_,x_,\dots,x_ )

x1​=(x

11​,

x12​

,…,x

1d​)

x 2=

(x21,

x22,…

,x2d

)x_2=(x_,x_,\dots,x_)

x2​=(x

21​,

x22​

,…,x

2d​)

\dots…xn

=(xn

1,xn

2,…,

xnd)

x_n=(x_,x_,\dots,x_)

xn​=(x

n1​,

xn2​

,…,x

nd​)

將這個x1

​,x2

​,…,

xn​}劃分為k個簇:^k\sum_\parallel x_j-\mu_i\parallel^2

argmin

c​∑i

=1k​

∑xj​

ϵci​

​∥xj

​−μi

​∥2其中μ

i\mu_i

μi​是c

ic_i

ci​中點的平均值,∥xi

j−cj

∥\parallel x_i^j-c_j\parallel

∥xij​−

cj​∥

為實體點與簇質心之間的距離

k

kk-均值聚類方法非形式化描述:分割槽方法

因為k-均值聚類演算法是迭代的,在下面即將介紹的mapreduce實現中,通過不斷執行mapreduce解決方案,直到找到乙個和是的最優解決方案,使k-均值聚類演算法收斂。k-均值演算法需要完成以下幾個步驟:

k

kk-均值聚類演算法的第一步需要把各個資料點分配到最近的簇質心。對於乙個給定的(d

dd維)資料點,可以使用乙個距離函式來確定最近的簇質心,這個函式會計算這個質心生成該資料點的可能性有多大,有很多距離函式可以使用,包括:

很多kk

k-均值演算法中都使用了歐氏距離。要的出兩個資料點例項x

xx和y

yy(表示為d

dd個連續屬性,即d

dd-維)之間的歐氏距離:令:x=(

x1,x

2,…,

xd

)x=(x_1,x_2,\dots,x_d)

x=(x1​

,x2​

,…,x

d​)y=(

y1,y

2,…,

yd

)y=(y_1,y_2,\dots,y_d)

y=(y1​

,y2​

,…,y

d​)則有:

d is

tanc

e(x,

y)=(

x1−y

1)2+

(x2−

y2)2

+⋯+(

xd−y

d)

2distance(x,y)=\sqrt

distan

ce(x

,y)=

(x1​

−y1​

)2+(

x2​−

y2​)

2+⋯+

(xd​

−yd​

)2​歐氏距離有以下性質:

乙個簡單的歐氏距離函式為**如下:

public class euclideandistance{

// center 為簇質心

//令vector[i]表示第i個位置代表的屬性

public static double calculatedistance(vector center,vector data){

double sum=0.0;

int length=data.length;

//計算每個屬性之間的距離

for(int i=0;i

k-均值聚類演算法

聚類演算法之K均值聚類

k means聚類方法 1.介紹 k均值聚類是基於樣本集合劃分的聚類演算法。由於每個樣本在劃分的過程中只能屬於乙個類別,所以k means演算法屬於硬聚類。2.演算法過程 k均值聚類演算法是乙個迭代的過程,每次迭代包括兩個步驟 3.複雜度 k均值聚類演算法的複雜度o mnk 其中k表示類別數,m表示...

K 均值聚類

剛剛寫了篇分級聚類的,趁著餘熱,再寫一下關於k 均值聚類的。為了突出k 均值聚類的特點,先黑一下分級聚類。跟k 均值聚模擬起來,分級聚類演算法有一下缺點 第一,的那個沒有額外投入的時候,樹形試圖是不會真正將資料拆分成不同組的。第二,分級聚類的計算演算法計算量相當大。當兩個節點合併之後,節點之間的距離...

k均值聚類

k均值聚類就是利用歐氏距離的度量將距離相近的樣本分為k類 a.假設有m個樣本,首先隨機選擇k個樣本作為聚類的質心 要分成k類 b.然後對於每個樣本,計算它到每個質心的距離,將它歸類於距離最小的那個質心 c.接著對初步分類的k個類別重新計算該類的質心,也就是對每個類別的樣本座標求平均 d.重複 b 步...