k-means算法概述


算法過程

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

優缺點:

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

思考:

  • k值如何確定?
    • ISODATA算法針對這個問題進行了改進:當屬於某個類別的樣本數過少時把這個類別去除,當屬於某個類別的樣本數過多、分散程度較大時把這個類別分為兩個子類別(類的自動合並和分裂)
    • Elbow Method:通過繪制K-means代價函數與聚類數目K的關系圖,選取直線拐點處的K值作為最佳的聚類中心數目
    • 從實際問題出發,人工指定比較合理的K值,通過多次隨機初始化聚類中心選取比較滿意的結果
    • 根據方差分析理論,應用混合 F 統計量來確定最佳分類數,並應用了模糊划分熵來驗證最佳分類數的正確性
    • 使用了一種結合全協方差矩陣的 RPCL 算法,並逐步刪除那些只包含少量訓練數據的類
    • 使用的是一種稱為次勝者受罰的競爭學習規則,來自動決定類的適當數目。它的思想是:對每個輸入而言,不僅競爭獲勝單元的權值被修正以適應輸入值,而且對次勝單元采用懲罰的方法使之遠離輸入值。
  • 初始隨機種子如何確定
    • K-means++選取K個聚類中心的思想:假設已經選取了n個初始聚類中心(0<n<K),則在選取第n+1個聚類中心時:距離當前n個聚類中心越遠的點會有更高的概率被選為第n+1個聚類中心。在選取第一個聚類中心(n=1)時同樣通過隨機的方法(聚類中心互相離得越遠越好)
    • 采用遺傳算法(GA)進行初始化,以內部聚類准則作為評價指標
  • 度量方式
    • 傳統K-means采用歐式距離進行樣本間的相似度度量,顯然並不是所有的數據集都適用於這種度量方式。kernel k-means參照支持向量機中核函數的思想,將所有樣本映射到另外一個特征空間中再進行聚類,就有可能改善聚類效果
  • 空簇
    • 如果所有的點在指派步驟都未分配到某個簇,某個簇就會變成空簇。如果這種情況發生,則需要某種策略來選擇一個替補聚類中心,否則的話,平方誤差將會偏大(算法的目的就是使各個樣本與所在類均值的誤差平方和達到最小,這也是評價K-means算法最后聚類效果的評價標准)。一種方法是選擇一個距離當前任何質心最遠的點。這將消除當前對總平方誤差影響最大的點
  • 噪聲處理
    • k-means對離群值非常敏感,算法目標是簇內差異最小化,即SSE最小,所以單個噪音點也可以對整個簇造成很大的擾動,常用解決辦法

          

  • 離散型數據處理

          

代碼:

地址: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

https://www.zhihu.com/question/60868444

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM