1.原理
聚類是一種無監督學習的方法,其實質是依據某種距離度量,使得同一聚簇之間的相似性最大化,不同聚簇之間的相似性最小化,即把相似的對象放入同一聚簇中,把不相似的對象放到不同的聚簇中。聚類與分類不同,聚類的輸入對象不需要帶有類別標簽,最后組成的分類是由使用的算法決定的。
在聚類中,k-means由於其簡單、易實現的優點,被廣泛使用。
假設集合是d維向量空間中的集合,其中
表示集合
中的第i個對象(或稱為"數據點"),設矩陣
表示k個聚簇中心的集合,其中,
表示第j個聚簇標識,向量
用於表示每個數據點所屬的聚簇。
k-means算法是一種迭代的貪婪下降求解算法,其目標函數是非凸的,這也是造成只能得到局部最優解的原因,目標函數表達式如下:
算法的流程主要包括,首先我們隨機選擇集合中的k個點作為初始的聚簇中心,接着根據將集合
中的每個點分配到距離它最近的聚簇中,最后根據每個聚簇中的數據點更新聚簇中心,如此反復地執行后兩個步驟直到算法收斂。k-means算法就是通過迭代的方式,將集合
中的數據點聚成k個類,其核心步驟主要有:
1)將數據點分配到距離它最近的聚簇中心
2)更新聚簇中心(取聚簇中每個數據點坐標的均值)
算法的詳細步驟如表1所示,
表1 k-means算法的具體步驟
2.缺陷
k-means算法存在不少的缺陷,表2列出了k-means算法常見的缺陷以及解決的方法。
表2 k-means算法缺陷
3.擴展
3.1核方法
為了能處理形狀復雜的聚簇,我們可以通過核方法提高k-means算法對於復雜數據的處理能力。我們知道聚簇邊界在原空間中是非線性的,但是,如果是在核函數所隱含的高維空間中卻可以線性的。
3.2加速的k-means
k-means算法在處理超大數據時,存在時間過長的缺陷,所以針對這個缺點,提出了不少的改進算法。例如可以通過使用kd-樹或者利用三角不等式,減少在重新划分聚簇這個步驟的計算量。
3.3柔性k-means
柔性k-means是與剛性k-means相對的,剛性的k-means即基本的k-means算法,將每個數據點划分到唯一一個聚簇中。而在柔性的k-means算法中,將每個數據點依據概率賦給每個聚簇,即柔性k-means中,每個數據點都有一個權重(概率)向量,用來描述每個數據點屬於每個聚簇的可能性。
4.小結
k-means算法使用簡單的迭代將數據集聚成k個類,迭代的核心步驟有:(1)更新聚簇中心;(2)更新聚簇標識。盡管它有不少缺陷,但是其實現簡單、移動、伸縮性良好等優點使得它成為聚類中最常用的算法之一。
參考文獻
[1]Xindong Wu,Vipin Kumar.數據挖掘十大算法[M].北京:清華大學出版社.2014:19-30.