1. 程式人生 > >k-means算法概述

k-means算法概述

需要 均值 描述 com isod 向量 過程 mean 子類

算法過程

  1. 隨機選取K個種子點
  2. 求所有點到種子點的距離,將點納入距離最近的種子點群
  3. 所有點均被納入群內後,將種子點移動到種子群中心
  4. 重復上述2、3過程,直至種子點沒有移動

優缺點:

  • 優點:容易實現
  • 缺點:可能收斂到局部最小值,在大規模數據上收斂較慢

思考:

  • k值如何確定?
    • ISODATA算法針對這個問題進行了改進:當屬於某個類別的樣本數過少時把這個類別去除,當屬於某個類別的樣本數過多、分散程度較大時把這個類別分為兩個子類別(類的自動合並和分裂)
    • Elbow Method:通過繪制K-means代價函數與聚類數目K的關系圖,選取直線拐點處的K值作為最佳的聚類中心數目
    • 從實際問題出發,人工指定比較合理的K值,通過多次隨機初始化聚類中心選取比較滿意的結果
  • 初始隨機種子如何確定
    • K-means++選取K個聚類中心的思想:假設已經選取了n個初始聚類中心(0<n<K),則在選取第n+1個聚類中心時:距離當前n個聚類中心越遠的點會有更高的概率被選為第n+1個聚類中心。在選取第一個聚類中心(n=1)時同樣通過隨機的方法(聚類中心互相離得越遠越好)
  • 度量方式
    • 傳統K-means采用歐式距離進行樣本間的相似度度量,顯然並不是所有的數據集都適用於這種度量方式。kernel k-means參照支持向量機中核函數的思想,將所有樣本映射到另外一個特征空間中再進行聚類,就有可能改善聚類效果
  • 空簇
    • 如果所有的點在指派步驟都未分配到某個簇,就會得到空簇。如果這種情況發生,則需要某種策略來選擇一個替補聚類中心,否則的話,平方誤差將會偏大(算法的目的就是使各個樣本與所在類均值的誤差平方和達到最小,
      這也是評價K-means算法最後聚類效果的評價標準)。一種方法是選擇一個距離當前任何質心最遠的點。這將消除當前對總平方誤差影響最大的點

代碼:

地址:https://github.com/AaronX121/Clustering,使用方式非常簡單,目前支持三種形式的輸入,分別對應著上面的三種算法:

  • [centroid, result] = Clustering(data, ‘kmeans’, k , iteration);
  • [centroid, result] = Clustering(data, ‘kmeans++’, k , iteration);
  • [centroid, result] = Clustering
    (data, ‘isodata’, desired_k , iteration, minimum_n, maximum_variance, minimum_d);

其中的輸入data是一個矩陣,每一行代表數據集中的一個樣本。其他輸入的意義與上面的算法描述中一一對應。輸出的centroid是聚類中心的位置,result是每個樣本所對應的類別索引。

應用:

  k-means不僅局限於坐標點的計算,現實世界裏的物體屬性只要能抽象成向量,都可以用k-means來歸類

上述論述摘自:http://www.cnblogs.com/yixuan-xu/p/6272208.html

k-means算法概述