1. 程式人生 > >less is more

less is more

概要

  1. 聚類分析僅根據在資料中發現的描述物件及其關係的資訊,將資料物件分組。其目標是,組內的物件相互之間是相似的(相關的),而不同組中的物件是不同的(不相關的)。組內的相似性(同質性)越大,組間差別越大,聚類就越好。

應用場景:

聚類。

聚類分析的3種大類和其代表技術:

  1. 劃分聚類法。K均值。是基於原型的、劃分的聚類技術。它試圖發現使用者指定個數K的簇(由質心代表)。
  2. 層次聚類。凝聚的層次聚類。開始,每個點作為一個單點簇;然後,重複地合併兩個最靠近的簇,直到產生單個的、包含所有點的簇。
  3. 基於密度的聚類。DBSCAN。是一種產生劃分聚類的基於密度的聚類演算法,簇的個數由演算法自動地確定。低密度區域中的點被視為噪聲而忽略,因此
    DBSCAN不產生完全聚類。

層次聚類的優缺點

優點

  1. 距離和規則的相似度容易定義限制少
  2. 不需要預先指定聚類數;
  3. 可以發現類的層次關係;
  4. 可以聚類成其他形狀。

缺點:

  1. 計算複雜度太高;
  2. 奇異值也能產生很大影響;
  3. 演算法很可能聚類成鏈狀。

DBSCAN的優缺點

優點:

  1. 不需要事先知道要形成的簇的數量。
  2. 可以發現任意形狀的簇類。
  3. 對噪聲點不敏感。
  4. 對樣本點的順序不敏感。

缺點:

  1. 簇的密度變化太大時,DBSCAN會有麻煩。
  2. 對於高維資料,密度定義困難,DBSCAN也有問題。

Note

  1. K均值對於圓形區域聚類的效果很好,DBSCAN基於密度,對於集中區域效果很好。
  2. 對於不規則形狀,K均值完全無法使用。
    DBSCAN可以起到很好的效果。

K均值的優缺點

優點:

  1. 簡單,易於理解和實現。
  2. 時間複雜度低。

缺點:

  1. 要手工輸入K值,對初始值的設定很敏感。
  2. 對噪聲和離群點很敏感。
  3. 只用於數值型資料,不適用於categorical型別的資料。
  4. 不能解決非凸資料。
  5. 主要發現圓形或者球形簇,不能識別非球形的簇。

K均值

K-Means演算法的基本思想是初始隨機給定K個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心(這個點可以不是樣本點),從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。

K-Means聚類演算法主要分為4個步驟:

(1)選擇K個初始質心,其中

K是使用者指定的引數,即所期望的簇的個數。

(2)每個點指派到最近的質心,而指派到一個質心的點集為一個簇。

(3)根據指派到簇的點,更新每個簇的質心。

(4)重複指派和更新步驟,直到簇不發生變化,或等價地,直到質心不發生變化。

下圖展示了對n個樣本點進行K-means聚類的效果,這裡k取2:

(a)未聚類的初始點集

(b)隨機選取兩個點作為聚類中心

(c)計算每個點到聚類中心的距離,並聚類到離該點最近的聚類中去

(d)計算每個聚類中所有點的座標平均值,並將這個平均值作為新的聚類中心

(e)重複(c),計算每個點到聚類中心的距離,並聚類到離該點最近的聚類中去

(f)重複(d),計算每個聚類中所有點的座標平均值,並將這個平均值作為新的聚類中心

k均值常用的鄰近度,質心和目標函式的選擇:

鄰近度函式:曼哈頓距離。質心:中位數。目標函式:最小化物件到其簇質心的距離和。

鄰近度函式:平方歐幾里德距離。質心:均值。目標函式:最小化物件到其簇質心的距離的平方和。

鄰近度函式:餘弦。質心:均值。最大化物件與其質心的餘弦相似度和。

鄰近度函式:Bregman散度。質心:均值。目標函式:最小化物件到其簇質心的Bregman散度和。

基本K均值演算法:

  1. 選擇K個點作為初始質心。
  2. repeat
  3.        將每個點指派到最近的質心,形成K個簇。
  4.        重新計算每個簇的質心。
  5. until    質心不發生變化。

由於基本K均值演算法採取隨機地選取初始質心的辦法,導致最後形成的簇的質量常常很糟糕。在此基礎上引出了基本K均值演算法的擴充:二分K均值演算法。二分K均值演算法不太受初始化問題的影響。

演算法主要分為以下步驟,一開始是把所有資料初始化為一個cluster,第二步從所有cluster中選其中一個出來用基本k-means演算法(k設為2)再劃分成兩個cluster(初始時只有一個cluster),然後是一直重複第二步的劃分(選一個cluster劃成兩個)直到得到k個cluster演算法停止。

每次劃分都是用基本K均值演算法,可問題是從已有的cluster種應該選哪個cluster出來進行劃分呢?選取cluster有兩種策略:

  1. 每次選的時候,都對已有的cluster計算誤差和SSE,然後選一個SSE最大的一個cluster來進行劃分。
  2. 每次都挑資料最多的那個cluster來進行劃分。

一般都採取第一種策略。

二分K均值演算法:

  1. 把所有資料作為一個cluster加入cluster list
  1. repeat
  1. cluster list中挑選出一個SSE最大的cluster來進行劃分
  2.        for i=1 to預設的迴圈次數
  3. 用基本K均值演算法把挑選出來的cluster劃分成兩個子cluster
  4. 計算兩個子clusterSSE和。
  5.        end for
  6. for迴圈中SSE和最小的那兩個子cluster加入cluster list
  7. until  cluster list擁有Kcluster

除此以外,每次劃分不止執行一次基本K均值演算法,而是預先設定一個ITER值,然後對這個cluster進行ITER次執行基本K均值運算。因為基本K均值每次一開始都是隨機選K個質心來執行,所以i一般來說ITER次執行基本K均值,每次都會得到不同的兩個cluster。那麼應該選哪對cluster來作為劃分以後的cluster呢?答案就是在每次迴圈中,每次都計算當次基本K均值劃分出來的兩個clusterSSE和,最後就選SSE和最小的那對cluster作為劃分以後的cluster

層次聚類:

有兩種產生層次聚類的基本方法:

  1. 凝聚的。從點作為個體簇開始,每一步合併兩個最接近的簇。這需要定義簇的臨近性概念。凝聚層次聚類技術最常見。
  2. 分裂的。從包含所有點的某個簇開始,每一步分裂一個簇,直到僅剩下單點簇。在這種情況下,我們需要確定每一步分裂哪個簇,以及如何分裂。

基本凝聚層次聚類演算法:

  1. 如果需要計算臨近度矩陣
  2. repeat
  3. 合併最接近的兩個簇
  4. 更新臨近度矩陣,以反映新的簇與原來的簇之間的臨近性。
  5. until 僅剩下一個簇

簇之間的臨近性有3種定義方式:

  1. MIN(單鏈)。不同簇中的兩個最近的點之間的距離作為臨近度。
  2. MAX(全鏈)。不同簇中的兩個最遠的點之間的距離作為臨近度。
  3. GROUP組平均)。取自不同簇的所有點對距離的平均值作為臨近度。

Note

  1. 簇與簇合並的原則永遠是dist最小。
  2. 但在計算dist值的時候,可以採用MIN, MAX, GROUP AVG 3中方式得出dist的值。

DBSCAN

基於密度的聚類尋找被低密度區域分離的高密度區域。DBSCAN是一種簡單、有效的基於密度的聚類演算法。

DBSCAN演算法:

  1. 將所有點標記為核心點、邊界點或噪聲點。
  2. 刪除噪聲點。
  3. 為距離在Eps之內的所有核心點之間連線。
  4. 每組連通的核心點形成一個簇。
  5. 將每個邊界點指派到一個與之關聯的核心點的簇中。

DBSCAN演算法闡釋:

  1. 演算法需要使用者輸入2個引數: 半徑Eps; 最小(少)點值MinPts
  2. 確定EpsMinPts需要用到K-距離的概念。K-距離就是“到第K近的點的距離”,按經驗一般取值為4。並且,一般取K的值為MinPts引數的值。
  3. 首先計算每個點到所有其餘點的歐式距離,升序排序後,選出每個點的“K距離”。
  4. 所有點的K距離形成一個集合D。對D進行升序排序,依此可以形成一個樣本資料的K距離圖。
  5. 圖中急劇變化處的值,即為Eps
  6. 根據Eps和MinPts,計算出所有的核心點。
  7. 給核心點到小於Eps的另一個核心點賦予一個連線,到核心點的距離等於Eps的點被識別為邊界點。最後,核心點、邊界點之外的點都是噪聲點。
  8. 將能夠連線的點和與之關聯的邊界點都放到一起,形成了一個簇。