less is more
概要:
- 聚類分析僅根據在資料中發現的描述物件及其關係的資訊,將資料物件分組。其目標是,組內的物件相互之間是相似的(相關的),而不同組中的物件是不同的(不相關的)。組內的相似性(同質性)越大,組間差別越大,聚類就越好。
應用場景:
聚類。
聚類分析的3種大類和其代表技術:
- 劃分聚類法。K均值。是基於原型的、劃分的聚類技術。它試圖發現使用者指定個數K的簇(由質心代表)。
- 層次聚類。凝聚的層次聚類。開始,每個點作為一個單點簇;然後,重複地合併兩個最靠近的簇,直到產生單個的、包含所有點的簇。
- 基於密度的聚類。DBSCAN。是一種產生劃分聚類的基於密度的聚類演算法,簇的個數由演算法自動地確定。低密度區域中的點被視為噪聲而忽略,因此
層次聚類的優缺點:
優點:
- 距離和規則的相似度容易定義,限制少;
- 不需要預先指定聚類數;
- 可以發現類的層次關係;
- 可以聚類成其他形狀。
缺點:
- 計算複雜度太高;
- 奇異值也能產生很大影響;
- 演算法很可能聚類成鏈狀。
DBSCAN的優缺點:
優點:
- 不需要事先知道要形成的簇的數量。
- 可以發現任意形狀的簇類。
- 對噪聲點不敏感。
- 對樣本點的順序不敏感。
缺點:
- 簇的密度變化太大時,DBSCAN會有麻煩。
- 對於高維資料,密度定義困難,DBSCAN也有問題。
Note:
- K均值對於圓形區域聚類的效果很好,DBSCAN基於密度,對於集中區域效果很好。
- 對於不規則形狀,K均值完全無法使用。
K均值的優缺點:
優點:
- 簡單,易於理解和實現。
- 時間複雜度低。
缺點:
- 要手工輸入K值,對初始值的設定很敏感。
- 對噪聲和離群點很敏感。
- 只用於數值型資料,不適用於categorical型別的資料。
- 不能解決非凸資料。
- 主要發現圓形或者球形簇,不能識別非球形的簇。
K均值
K-Means演算法的基本思想是初始隨機給定K個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心(這個點可以不是樣本點),從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。
K-Means聚類演算法主要分為4個步驟:
(1)選擇K個初始質心,其中
(2)每個點指派到最近的質心,而指派到一個質心的點集為一個簇。
(3)根據指派到簇的點,更新每個簇的質心。
(4)重複指派和更新步驟,直到簇不發生變化,或等價地,直到質心不發生變化。
下圖展示了對n個樣本點進行K-means聚類的效果,這裡k取2:
(a)未聚類的初始點集
(b)隨機選取兩個點作為聚類中心
(c)計算每個點到聚類中心的距離,並聚類到離該點最近的聚類中去
(d)計算每個聚類中所有點的座標平均值,並將這個平均值作為新的聚類中心
(e)重複(c),計算每個點到聚類中心的距離,並聚類到離該點最近的聚類中去
(f)重複(d),計算每個聚類中所有點的座標平均值,並將這個平均值作為新的聚類中心
k均值常用的鄰近度,質心和目標函式的選擇:
鄰近度函式:曼哈頓距離。質心:中位數。目標函式:最小化物件到其簇質心的距離和。
鄰近度函式:平方歐幾里德距離。質心:均值。目標函式:最小化物件到其簇質心的距離的平方和。
鄰近度函式:餘弦。質心:均值。最大化物件與其質心的餘弦相似度和。
鄰近度函式:Bregman散度。質心:均值。目標函式:最小化物件到其簇質心的Bregman散度和。
基本K均值演算法:
- 選擇K個點作為初始質心。
- repeat
- 將每個點指派到最近的質心,形成K個簇。
- 重新計算每個簇的質心。
- until 質心不發生變化。
由於基本K均值演算法採取隨機地選取初始質心的辦法,導致最後形成的簇的質量常常很糟糕。在此基礎上引出了基本K均值演算法的擴充:二分K均值演算法。二分K均值演算法不太受初始化問題的影響。
演算法主要分為以下步驟,一開始是把所有資料初始化為一個cluster,第二步從所有cluster中選其中一個出來用基本k-means演算法(k設為2)再劃分成兩個cluster(初始時只有一個cluster),然後是一直重複第二步的劃分(選一個cluster劃成兩個)直到得到k個cluster演算法停止。
每次劃分都是用基本K均值演算法,可問題是從已有的cluster種應該選哪個cluster出來進行劃分呢?選取cluster有兩種策略:
- 每次選的時候,都對已有的cluster計算誤差和SSE,然後選一個SSE最大的一個cluster來進行劃分。
- 每次都挑資料最多的那個cluster來進行劃分。
一般都採取第一種策略。
二分K均值演算法:
- 把所有資料作為一個cluster加入cluster list
- repeat
- 從cluster list中挑選出一個SSE最大的cluster來進行劃分
- for i=1 to預設的迴圈次數
- 用基本K均值演算法把挑選出來的cluster劃分成兩個子cluster
- 計算兩個子cluster的SSE和。
- end for
- 把for迴圈中SSE和最小的那兩個子cluster加入cluster list
- until cluster list擁有K個cluster
除此以外,每次劃分不止執行一次基本K均值演算法,而是預先設定一個ITER值,然後對這個cluster進行ITER次執行基本K均值運算。因為基本K均值每次一開始都是隨機選K個質心來執行,所以i一般來說ITER次執行基本K均值,每次都會得到不同的兩個cluster。那麼應該選哪對cluster來作為劃分以後的cluster呢?答案就是在每次迴圈中,每次都計算當次基本K均值劃分出來的兩個cluster的SSE和,最後就選SSE和最小的那對cluster作為劃分以後的cluster。
層次聚類:
有兩種產生層次聚類的基本方法:
- 凝聚的。從點作為個體簇開始,每一步合併兩個最接近的簇。這需要定義簇的臨近性概念。凝聚層次聚類技術最常見。
- 分裂的。從包含所有點的某個簇開始,每一步分裂一個簇,直到僅剩下單點簇。在這種情況下,我們需要確定每一步分裂哪個簇,以及如何分裂。
基本凝聚層次聚類演算法:
- 如果需要,計算臨近度矩陣
- repeat
- 合併最接近的兩個簇
- 更新臨近度矩陣,以反映新的簇與原來的簇之間的臨近性。
- until 僅剩下一個簇
簇之間的臨近性有3種定義方式:
- MIN(單鏈)。不同簇中的兩個最近的點之間的距離作為臨近度。
- MAX(全鏈)。不同簇中的兩個最遠的點之間的距離作為臨近度。
- GROUP(組平均)。取自不同簇的所有點對距離的平均值作為臨近度。
Note:
- 簇與簇合並的原則永遠是dist最小。
- 但在計算dist值的時候,可以採用MIN, MAX, GROUP AVG 3中方式得出dist的值。
DBSCAN
基於密度的聚類尋找被低密度區域分離的高密度區域。DBSCAN是一種簡單、有效的基於密度的聚類演算法。
DBSCAN演算法:
- 將所有點標記為核心點、邊界點或噪聲點。
- 刪除噪聲點。
- 為距離在Eps之內的所有核心點之間連線。
- 每組連通的核心點形成一個簇。
- 將每個邊界點指派到一個與之關聯的核心點的簇中。
DBSCAN演算法闡釋:
- 演算法需要使用者輸入2個引數: 半徑Eps; 最小(少)點值MinPts。
- 確定Eps和MinPts需要用到K-距離的概念。K-距離就是“到第K近的點的距離”,按經驗一般取值為4。並且,一般取K的值為MinPts引數的值。
- 首先計算每個點到所有其餘點的歐式距離,升序排序後,選出每個點的“K距離”。
- 所有點的K距離形成一個集合D。對D進行升序排序,依此可以形成一個樣本資料的K距離圖。
- 圖中急劇變化處的值,即為Eps。
- 根據Eps和MinPts,計算出所有的核心點。
- 給核心點到小於Eps的另一個核心點賦予一個連線,到核心點的距離等於Eps的點被識別為邊界點。最後,核心點、邊界點之外的點都是噪聲點。
- 將能夠連線的點和與之關聯的邊界點都放到一起,形成了一個簇。