kmeans是最簡單的聚類演算法之一,kmeans一般在資料分析前期使用,選取適當的k,將資料分類後,然後分類研究不同聚類下資料的特點。
隨機選取k個中心點;
遍歷所有資料,將每個資料劃分到最近的中心點中;
計算每個聚類的平均值,並作為新的中心點;
重複2-3,直到這k個中線點不再變化(收斂了)。
時間複雜度:o(i*n*k*m)
空間複雜度:o(n*m)
其中m為每個元素字段個數,n為資料量,i為跌打個數。一般i,k,m均可認為是常量,
所以時間和空間複雜度可以簡化為:o(n),即線性的。
從kmeans的演算法可以發現,設目標函式sse如下:
sse(
sse其實是乙個嚴格的座標下降(coordinate decendet)過程,採用歐式距離作為變數之間的聚類函式。每次朝乙個變數 ci 的方向找到最優解;目標函式sse求偏倒數,並令其偏導數等於0,可得:
ci =
其中 m 是 ci 所在的簇的元素的個數.
我們由公式ci發現,當前聚類的均值就是當前方向的最優解(最小值),這與kmeans的每一次迭代過程一樣。所以,這樣保證sse每一次迭代時,都會減小,最終使sse收斂。
由於sse是乙個非凸函式(non-convex function),所以sse並不能保證找到全域性最優解,只能確保區域性最優解。但是可以重複執行幾次kmeans,選取sse最小的一次作為最終的聚類結果。
計算最近的鄰居之間的距離,通常用歐氏距離來,有時也用曼哈頓距離,請對比下這兩種距離的差別?歐氏距離,最常見的兩點之間或多點之間的距離表示法,又稱之為歐幾里得度量,它定義於歐幾里得空間中,如點 x = (x1,...,xn) 和 y = (y1,...,yn) 之間的距離為:
歐氏距離雖然很有用,但也有明顯的缺點。它將樣品的不同屬性(即各指標或各變數量綱)之間的差別等同看待,這一點有時不能滿足實際要求。例如,在教育研究中,經常遇到對人的分析和判別,個體的不同屬性對於區分個體有著不同的重要性。因此,歐氏距離適用於向量各分量的度量標準統一的情況。
如果各資料之間量綱的不相同,該如何比較?
具體計算方法如下:
其中通常使用輪廓係數(silhouette coefficient),用於評估聚類的效果。輪廓係數結合了聚類的凝聚度(cohesion)和分離度(separation)。該值處於-1~1之間,值越大,表示聚類效果越好。具體計算方法如下:
對於第i個元素x_i,計算x_i與其同乙個簇內的所有其他元素距離的平均值,記作a_i,用於量化簇內的凝聚度。
選取x_i外的乙個簇b,計算x_i與b中所有點的平均距離,遍歷所有其他簇,找到最近的這個平均距離,記作b_i,用於量化簇之間分離度。
對於元素x_i,輪廓係數s_i = (b_i – a_i)/max(a_i,b_i)
計算所有x的輪廓係數,求出平均值即為當前聚類的整體輪廓係數
從上面的公式,不難發現若s_i小於0,說明x_i與其簇內元素的平均距離小於最近的其他簇,表示聚類效果不好。如果a_i趨於0,或者b_i足夠大,那麼s_i趨近與1,說明聚類效果比較好。
曼哈頓距離,我們可以定義曼哈頓距離的正式意義為l1-距離或城市區塊距離,也就是在歐幾里得空間的固定直角座標系上兩點所形成的線段對軸產生的投影的距離總和。例如在平面上,座標(x1, y1)的點p1與座標(x2, y2)的點p2的曼哈頓距離為:
要注意的是,曼哈頓距離依賴座標系統的轉度,而非系統在座標軸上的平移或對映。當座標軸變動時,點間的距離就會不同。
通俗來講,想象你在曼哈頓要從乙個十字路口開車到另外乙個十字路口,駕駛距離是兩點間的直線距離嗎?顯然不是,除非你能穿越大樓。而實際駕駛距離就是這個「曼哈頓距離」,這也是曼哈頓距離名稱的**, 同時,曼哈頓距離也稱為城市街區距離(city block distance)。
曼哈頓距離和歐式距離一般用途不同,無相互替代性。
[1]馬氏距離及其幾何解釋
[2]歐氏距離和余弦相似度的區別是什麼?
K Means聚類演算法
k means聚類演算法 intergret kmeans演算法的基本思想是初始隨機給定k個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心,從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。k means聚類演算法主要分為三個步驟 1 第一步是為待聚類...
聚類演算法 K means
演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個 中心物件 引力中心 來進行計算的。k means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演...
k means聚類演算法
說到聚類,得跟分類區別開來,分類是按人為給定的標準將樣本歸到某個類別中去,在機器學習中多是監督學習,也就是訓練樣本要給標籤 正確的類別資訊 而聚類是在某種規則下自動將樣本歸類,在機器學習中是無監督學習,不需要提前給樣本打標籤。k means聚類演算法,就是在某種度量方式下,將樣本自動劃分到k個類別中...