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