「物以類聚,人以羣分」, 所謂聚類就是將類似的元素分到一"類"(有時也被稱爲"簇"或"集合"), 簇內元素類似程度高, 簇間元素類似程度低. 經常使用的聚類方法有劃分聚類, 層次聚類, 密度聚類, 網格聚類, 模型聚類等. 咱們這裏重點介紹劃分聚類.算法
劃分聚類, 就是給定一個樣本量爲N的數據集, 將其劃分爲K個簇(K<N), 每個簇中至少包含一個樣本點.函數
大部分的劃分方法是基於距離的, 即簇內距離最小化, 簇間距離最大化. 經常使用的距離計算方法有: 曼哈頓距離和歐幾里得距離. 座標點(x1, y1)到座標點(x2, y2)的曼哈頓距離和歐幾里得距離分別表示爲:大數據
爲了達到全局最優解, 傳統的劃分法可能須要窮舉全部可能的劃分點, 這計算量是至關大的. 而在實際應用中, 一般會經過計算到均值或中心點的距離進行劃分來逼近局部最優, 把計算到均值和到中心點距離的算法分別稱爲K-MEANS算法和K-MEDOIDS算法, 在這裏只介紹K-MEANS算法.編碼
K-MEANS算法有時也叫快速聚類算法, 其大體流程爲:blog
第一步: 隨機選取K個點, 做爲初始的K個聚類中心, 有時也叫質心.原理
第二步: 計算每一個樣本點到K個聚類中心的距離, 並將其分給距離最短的簇, 若是k個簇中均至少有一個樣本點, 那麼咱們就說將全部樣本點分紅了K個簇.方法
第三步: 計算K個簇中全部樣本點的均值, 將這K個均值做爲K個新的聚類中心.im
第四步: 重複第二步和第三步, 直到聚類中心再也不改變時中止算法, 輸出聚類結果.數據
顯然, 初始聚類中心的選擇對迭代時間和聚類結果產生的影響較大, 選很差的話頗有可能嚴重偏離最優聚類. 在實際應用中, 一般選取多個不一樣的K值以及初始聚類中心, 選取其中表現最好的做爲最終的初始聚類中心. 怎麼算表現最好呢? 能知足業務需求的, 且簇內距離最小的.img
簇內距離能夠簇內離差平方和表示:
其中, K表示K個簇, nj表示第j個簇中的樣本個數, xi表示樣本, uj表示第j個簇的質心, K-means算法中質心能夠表示爲:
優勢:
1. 原理簡單, 計算速度快
2. 聚類效果較理想.
缺點:
1. K值以及初始質心對結果影響較大, 且很差把握.
2. 在大數據集上收斂較慢.
3. 因爲目標函數(簇內離差平方和最小)是非凸函數, 所以經過迭代只能保證局部最優.
4. 對於離羣點較敏感, 這是因爲其是基於均值計算的, 而均值易受離羣點的影響.
5. 因爲其是基於距離進行計算的, 所以一般只能發現"類圓形"的聚類.
注意事項:
1. 因爲其是基於距離進行計算的, 所以一般須要對連續型數據進行標準化處理來縮小數據間的差別.(對於離散型, 則須要進行one-hot編碼)
2. 若是採用歐幾里得距離進行計算的話, 單位的平方和的平方根是沒有意義的, 所以一般須要進行無量綱化處理