k-means算法概述
阿新 • • 發佈:2017-08-18
需要 均值 描述 com isod 向量 過程 mean 子類
算法過程:
- 隨機選取K個種子點
- 求所有點到種子點的距離,將點納入距離最近的種子點群
- 所有點均被納入群內後,將種子點移動到種子群中心
- 重復上述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參照支持向量機中核函數的思想,將所有樣本映射到另外一個特征空間中再進行聚類,就有可能改善聚類效果
- 空簇
- 如果所有的點在指派步驟都未分配到某個簇,就會得到空簇。如果這種情況發生,則需要某種策略來選擇一個替補聚類中心,否則的話,平方誤差將會偏大(算法的目的就是使各個樣本與所在類均值的誤差平方和達到最小,
- 如果所有的點在指派步驟都未分配到某個簇,就會得到空簇。如果這種情況發生,則需要某種策略來選擇一個替補聚類中心,否則的話,平方誤差將會偏大(算法的目的就是使各個樣本與所在類均值的誤差平方和達到最小,
代碼:
地址:https://github.com/AaronX121/Clustering,使用方式非常簡單,目前支持三種形式的輸入,分別對應著上面的三種算法:
- [centroid, result] = Clustering(data, ‘kmeans’, k , iteration);
- [centroid, result] = Clustering(data, ‘kmeans++’, k , iteration);
- [centroid, result] = Clustering
其中的輸入data是一個矩陣,每一行代表數據集中的一個樣本。其他輸入的意義與上面的算法描述中一一對應。輸出的centroid是聚類中心的位置,result是每個樣本所對應的類別索引。
應用:
k-means不僅局限於坐標點的計算,現實世界裏的物體屬性只要能抽象成向量,都可以用k-means來歸類
上述論述摘自:http://www.cnblogs.com/yixuan-xu/p/6272208.html
k-means算法概述