參考文章:
聚類屬於無監督學習,回歸、樸素貝葉斯、svm等都是有類別標籤y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特徵x,比如假設宇宙中的星星可以表示成三維空間中的點集(x,y,z)。聚類的目的是找到每個樣本x潛在的類別y,並將同類別y的樣本x放在一起。比如上面的星星,聚類後結果是乙個個星團,星團裡面的點相互距離比較近,星團間的星星距離就比較遠了。
k-means屬於無監督學習方法。
k表示類別數,means表示均值,k一般由人工來指定,或通過層次聚類(hierarchical clustering)的方法獲得資料的類別數量作為選擇k值的參考。
選擇較大的k可以降低資料的誤差,但會增加過擬合的風險。
第一步:
隨機選取k個初始質心
第二步:
分別計算所有樣本到這k個質心的距離
第三步:
如果樣本離質心si最近,那麼這個樣本屬於si點群;如果到多個質心的距離相等,則可劃分到任意組中
第四步:
按距離對所有樣本分完組之後,計算每個組的均值(最簡單的方法就是求樣本每個維度的平均值),作為新的質心
第五步:
重複步驟
二、三、四,直到新的質心和原質心相等,演算法結束。
常用的距離度量方法包括:
歐幾里得距離:歐幾里得度量(euclidean metric)(也稱歐氏距離)是乙個通常採用的距離定義,指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)。在二維和三維空間中的歐氏距離就是兩點之間的實際距離。
余弦相似度:余弦相似度衡量的是2個向量間的夾角大小,通過夾角的余弦值表示結果。
兩者都是評定個體間差異的大小的。歐幾里得距離度量會受指標不同單位刻度的影響,所以一般需要先進行標準化(歸一化),同時距離越大,個體間差異越大;空間向量余弦夾角的相似度度量不會受指標刻度的影響,余弦值落於區間[-1,1],值越大,差異越小。但是針對具體應用,什麼情況下使用歐氏距離,什麼情況下使用余弦相似度?
從幾何意義上來說,n維向量空間的一條線段作為底邊和原點組成的三角形,其頂角大小是不確定的。也就是說對於兩條空間向量,即使兩點距離一定,他們的夾角余弦值也可以隨意變化。感性的認識,當兩使用者評分趨勢一致時,但是評分值差距很大,余弦相似度傾向給出更優解。舉個極端的例子,兩使用者只對兩件商品評分,向量分別為(3,3)和(5,5),這兩位使用者的認知其實是一樣的,但是歐式距離給出的解顯然沒有余弦值合理。
優點:k-means演算法是聚類問題的經典演算法,該演算法簡單快速。對於大資料量的資料,有相對較高的演算法效率,它的伸縮性很高,常常以區域性最優來結束演算法。當簇是密集的,圓形的,團狀的,而且簇與簇之前的區別明顯時,它的聚類效果較好。
缺點:要求使用者必須事先給出要生成的簇的數目k,這就好比世上先有雞還是先有蛋的問題,這也是此演算法無法避免的缺點。此演算法對於初始值很敏感,對於不同的初始值,聚類的結果往往不同。對於雜訊資料和孤立點資料非常敏感,少量的該資料能夠對平均值產生巨大的影響。
K means演算法介紹及C 語言實現
k means演算法是輸入聚類個數k,以及包含 n個資料物件的資料庫,輸出滿足方差最小標準的k個聚類。基本簡介k means 演算法接受輸入量 k 然後將n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值...
k means演算法不足
a.k 不確定 對於初始條件和聚類的個數 k 並沒有乙個標準的方法來給定。初始條件不同會對結果產生比較大的影響,因為有時演算法會跳入區域性最優。所以解決方法之一,就是多次執行演算法,隨機分割,比較結果之間的差異。b.區域性最優 如果要達到全域性最優,需要用到其他一些技術,比如模擬退火或者遺傳演算法等...
Kmeans演算法實現
include opencv2 highgui highgui.hpp include opencv2 core core.hpp include using namespace cv using namespace std static void help int main int argc ch...