聚類是機器學習和數據挖掘領域的主要研究方向之一,它是一種無監督學習算法,小編研究生時期的主要研究方向是「數據流自適應聚類算法」,因此對聚類算法有比較深入的理解,因而決定開一個專題來寫聚類算法,但願能夠爲入門及研究聚類相關算法的讀者帶來幫助。聚類能夠做爲一個單獨的任務,用於尋找數據內在分佈結構,也常常做爲其餘學習任務的前驅過程,應用十分普遍。今天,小編就帶你探索聚類算法的奧祕,並介紹第一個聚類算法Kmeans。算法
A:聚類是按照某一種特定的標準(類似性度量,如歐式距離等),把一個數據集分割成不一樣的類,使得同一個類中的數據對象的類似性儘量大,不一樣類之間的差別性也儘量大,以下圖是一個聚類結果的可視化:機器學習
聚類有很是普遍的應用,好比根據消費記錄發現不一樣的客戶羣,對基因表達進行聚類能夠研究不一樣種羣中的基因特徵,對文本進行聚類能夠快速找出相關主題的文章等。函數
A:經常使用的類似性度量方式主要有如下幾種:學習
歐式距離:優化
Minkowoski距離:spa
曼哈頓距離:3d
餘弦距離:code
Jaccard類似係數:對象
相關係數:blog
A:
基於劃分的聚類:k-means,mean shift
層次聚類:BIRCH
密度聚類:DBSCAN
基於模型的聚類:GMM
Affinity propagation
譜聚類
上面的這些算法只是簡單的引入聚類的概念,在接下來的專題中,咱們將具體探討經典的聚類算法,研究它們的原理,分析優缺點,應用場景等。今天,咱們就來學習最經典的一個聚類算法Kmeans
Kmeans算法的思想很簡單,根據給定樣本集中樣本間距離的大小將樣本集劃分爲k個簇(類),使得每一個點都屬於距離它最近的那個聚類中心(即均值means)對應的類。之因此叫kmenas是由於它能夠發現k(用戶指定)個簇且簇中心用屬於該簇的數據的均值來表示。
數據集合X={x1,...xn}中每一個樣本都是d維無標籤數據,kmeans聚類的目標是將這n個點分到k個簇使得簇內點到簇中心點(均值)的距離平方和最小,即求下列目標函數的最優解
其中μi就是簇Si中點的均值。
然而解上式並非一個簡單的問題,由於它是一個NP難問題,因此kmeans算法採用一種啓發式的迭代求解方法:
首先隨機選擇k個對象做爲初始的聚類中心,而後計算每一個樣本到各個聚類中心的距離,並分配給距離它最近的聚類中心。一旦對象全都被分配了,從新計算每一個簇的中心(均值)做爲下一次迭代的新的中心點。這一過程將重複進行直到知足下列任一條件:
沒有對象被從新分配給新的類;
聚類中心再也不發生變化;
偏差平方和局部最小。
Tips:
k值的選擇:通常來講咱們能夠根據數據的先驗選擇一個合適的k,若是不行,則能夠經過交叉驗證選擇合適的k;
初始化k箇中心點:能夠隨機選擇,也能夠每次選擇距離其餘中心點儘量遠的點做爲中心;
前面咱們也提到了K個初始化中心的選擇對聚類算法的運行結果和時間有很大影響,Kmeans++算法提出了對隨機化初始化聚類中心的優化:
從輸入的數據點集合中隨機選擇一個點做爲第一個聚類中心μ1;
對於數據集中的每個點xi,計算它與已選擇的聚類中心最近的一個的距離D(xi);
選擇D(xi)較大的點做爲新的聚類中心;
重複b,c直到找出k個聚類中心;
優勢:
原理簡單,實現簡單,收斂速度快;
聚類效果比較好;
可解釋性強,直觀;
只有一個參數k;
缺點:
k的選擇對聚類效果影響較大;
對於不是凸的數據集比較難收斂;
類別不均衡數據集聚類效果很差;
結果局部最優;
對噪聲點敏感;
聚類結果是球形。
今天是聚類算法學習的第一部分,內容雖然簡單可是很重要,kmeans算法經常做爲其餘算法的基礎,如以前的半監督學習以及以後會講的譜聚類算法都會用到。相信今天的學習你必定也有了收穫,聚類專題的下一篇內容是譜聚類,敬請期待!
掃碼關注
獲取有趣的算法知識