1. 程式人生 > >校招演算法工程師常見面試題及答案總結03——KMeans

校招演算法工程師常見面試題及答案總結03——KMeans

演算法步驟:

選擇K個點作為初始質心 

repeat 

    將每個點指派到最近的質心,形成K個簇 

    重新計算每個簇的質心 

until 簇不發生變化或達到最大迭代次數

時間複雜度:O(tKmn),其中,t為迭代次數,K為簇的數目,m為樣本數,n為維數

空間複雜度:O((m+K)n),其中,K為簇的數目,m為樣本數,n為維數

1)      K的選取以及不知道K時怎麼辦

a.      穩定性方法

        對一個數據集進行2次重取樣產生2個數據子集,再用相同的聚類演算法對2個數據子集進行聚類,產生2個具有k個聚類的聚類結果,計算2個聚類結果的相似度的分佈情況。2個聚類結果具有高的相似度說明k個聚類反映了穩定的聚類結構,其相似度可以用來估計聚類個數。採用次方法試探多個k,找到合適的k值。

b.     與層次聚類結合

        首先採用層次凝聚演算法決定結果粗的數目,並找到一個初始聚類,然後用迭代重定位來改進該聚類。

c.      Canopy Method

Stage1:聚類最耗費計算的地方是計算物件相似性的時候,Canopy Method在第一階段選擇簡單、計算代價較低的方法計算物件相似性,將相似的物件放在一個子集中,這個子集被叫做Canopy ,通過一系列計算得到若干Canopy,Canopy之間可以是重疊的,但不會存在某個物件不屬於任何Canopy的情況,可以把這一階段看做資料預處理;

Stage2:在各個Canopy 內使用傳統的聚類方法(如K-means),不屬於同一Canopy 的物件之間不進行相似性計算。

從這個方法起碼可以看出兩點好處:首先,Canopy 不要太大且Canopy 之間重疊的不要太多的話會大大減少後續需要計算相似性的物件的個數;其次,類似於K-means這樣的聚類方法是需要人為指出K的值的,通過Stage1得到的Canopy 個數完全可以作為這個K值,一定程度上減少了選擇K的盲目性。

2)      初始質心的選取

a.       層次聚類或者Canopy預處理,選擇質心。

b.       隨機地選擇第一個點,或取所有點的質心作為第一個點。然後,對於每個後

繼初始質心,選擇離已經選取過的初始質心最遠的點。

3)    優缺點
        KMenas演算法試圖找到使平凡誤差準則函式最小的簇。當潛在的簇形狀是凸面

(即球形)的,簇與簇之間區別較明顯,且簇大小相近時,其聚類結果較理想。對於處理大資料集合,該演算法非常高效,且伸縮性較好。
        但該演算法除了要事先確定簇數K和對初始聚類中心敏感外,經常以區域性最優結束,同時對“噪聲”和孤立點敏感,並且該方法不適於發現非凸面形狀的簇或大小差別很大的簇

4)      適用範圍

        潛在的簇是凸面(即球形),且簇之間區別明顯、大小相近時,效果最好,適用於大資料。

5)      距離度量

        常用的距離度量方法包括:歐幾里得距離餘弦相似度。兩者都是評定個體間差異的大小的。歐幾里得距離度量會受指標不同單位刻度的影響,所以一般需要先進行標準化,同時距離越大,個體間差異越大;空間向量餘弦夾角的相似度度量不會受指標刻度的影響,餘弦值落於區間[-1,1],值越大,差異越小。但是針對具體應用,什麼情況下使用歐氏距離,什麼情況下使用餘弦相似度?

        從幾何意義上來說,n維向量空間的一條線段作為底邊和原點組成的三角形,其頂角大小是不確定的。也就是說對於兩條空間向量,即使兩點距離一定,他們的夾角餘弦值也可以隨意變化。感性的認識,當兩使用者評分趨勢一致時,但是評分值差距很大,餘弦相似度傾向給出更優解。舉個極端的例子,兩使用者只對兩件商品評分,向量分別為(3,3)和(5,5),這兩位使用者的認知其實是一樣的,但是歐式距離給出的解顯然沒有餘弦值合理。

6)      演算法停止條件

        一般是目標函式達到最優或者達到最大的迭代次數即可終止。對於不同的距離度量,目標函式往往不同。當採用歐式距離時,目標函式一般為最小化物件到其簇質心的距離的平方和。當採用餘弦相似度時,目標函式一般為最大化物件到其簇質心的餘弦相似度和。