算法與實戰 - (1)聚類

最近在閱讀阿里數據分析專家盧輝的《數據挖掘與數據化運營實戰》。書中結合了實際業務案例,介紹了在實戰項目中數據分析和數據挖掘的許多知識點,乾貨滿滿。

因此,打算結合書中內容,對一些重要的主題加以總結,在過程中加深對各個知識點的理解。

1. 聚類應用場景

聚類是非監督學習中的一類算法,通常是通過多次迭代來找到數據的最優分割,將數據劃分爲多個類。

聚類在數據分析中十分常用,一般有兩個典型的應用場景——

  1. 數據分析前期的數據探索
  • 在數據分析前期,可以通過聚類和可視化了解數據分佈
  • 聚類可以定位孤立點、異常值,用於數據清洗、轉化等數據處理過程
  • 聚類產生的類別可以作爲一個新的字段加入到其他模型的搭建中
  1. 聚類算法建模
  • 解決一些實際場景,聚類的結果可以指導落地應用,常用於樣本分羣
  • 用戶分羣中,可以根據衆多指標進行聚類,將用戶劃分爲具有明顯特徵區別的羣體
  • 作品分羣中同樣通過聚類可以劃分爲低熱度、中熱度、KOL作品等

總的來說,聚類對目標羣體進行多指標的劃分,爲個性化、精細化的運營提供基礎。

2. 常用聚類方法

聚類算法根據不同的思路可分爲原型聚類、密度聚類、層次聚類三種,本節依次簡單介紹。

2.1 原型聚類

原型聚類假設聚類結構能通過一組原型刻畫,通常是先初始化原型,然後對原型進行迭代更新求解。

比如Kmeans聚類、GMM聚類都屬於原型聚類。

Kmeans聚類算法

Kmeans聚類使用K箇中心點,將數據劃分爲K個類,使得每個樣本距離所屬類的中心點最近。

Kmeans聚類算法本質上是尋找K箇中心點,使得所有樣本點到所屬類的中心點的距離之和,即
iNxiμci2xiicixiμcici \sum_i^N||x_i-\mu_{c_i}||^2\\ 其中x_i表示第i個樣本點,c_i表示x_i所屬的類,\mu_{c_i}表示c_i類的中心點

算法的運行流程如下:

  1. 隨機選擇 KK 個點作爲 KK 個類的中心

  2. 對每個樣本點,將其分配到最近的類,即

    ciargminkxiμk2 c_i \larr arg\min_k||x_i-\mu_k||^2

  3. 對每個簇,重新計算該類的中心(使中心變爲當前類的均值點),即
    μkargminμi:ci=kxiμ2 \mu_k\larr arg\min_\mu \sum_{i:c_i=k}||x_i-\mu||^2

  4. 重複第2、3步迭代過程直到收斂

高斯混合模型GMM

其核心思想是假設K個類別均服從各自的高斯分佈,模型使用EM算法求解,關於EM算法可以參考從最大似然到EM算法淺解

算法的運行流程如下:

  1. 隨機初始化K個類別的高斯分佈參數

  2. E步驟,根據當前參數計算每個樣本屬於每個類別的概率

  3. M步驟,根據E步驟估計出的概率,找到更優的參數

高斯混合模型可以給出一個樣本屬於某類的概率是多少,因此可以用於聚類,也可以用於概率密度的估計和生成新的樣本點。

2.2 密度聚類

密度聚類假設聚類結構能通過樣本分佈的緊密程度確定,基於可連接樣本不斷擴展聚類以得到最終的聚類結果。

DBSCAN

DBSCAN是基於密度的聚類方法的一種,其核心思想是,同一類別中任意樣本週圍不遠處一定有同類別的樣本存在。

假設1是類C的樣本,1和2距離很近,那2很可能也屬於類C。而2和3距離很近,則儘管1和3距離有點遠,但3仍然很有可能屬於類C。基於密度的聚類可以理解成一種擴散/感染的過程。

DBSCAN中有幾個概念:最小鄰域點數MinPts,鄰域半徑Eps,核心對象。

  • 對數據集中的所有點,以Eps爲半徑的鄰域,若包含點數超過MinPts,則該點是核心對象
  • xix_i 在覈心對象 xjx_j 的鄰域中,則稱 xix_ixjx_j 密度直達
  • 若存在序列 xi,xi+1,...,xnx_i, x_{i+1},...,x_n,使得對 k[i+1,n]k \in [i+1,n]xkx_kxk1x_{k-1} 密度直達,則稱 xnx_nxix_i 密度可達

在上述定義下,DBSCAN的思想就是,密度可達的所有點屬於同一個類別

算法運行流程如下:

  1. 初始化當前類別 k=0k=0,未訪問節點集合 S=DS=D,即整個數據集
  2. 遍歷所有節點,判斷是否是核心對象,所有核心對象構成集合 OO
  3. 從集合 OO 中選出一個核心對象 oo,標記爲類別 kk,並更新 kk+1k\larr k+1,加入隊列 QQ 中,重複下列過程直到 QQ 爲空
    (1) 從隊列 QQ 中取出隊頭 oo'N(o)N(o') 爲其鄰域包含的點,令 =N(o)S\triangle =N(o')\cap S,即鄰域中未確定類別的點,標記爲類 kk
    (2) 更新 S=SS=S-\triangleQ=Q(O)oQ=Q\cup (\triangle \cap O)-o'O=OoO=O-o'
  4. 重複第3步直到 OO 爲空

這個運行流程可能有點繞,說人話就是找到一個核心對象,標記爲類C,其鄰域中包含的點也都屬於類C。

同時,若這些點中存在覈心對象,則這些核心對象包含的點也屬於類C。

如果一個點不在任何類中,即不由任何核心對象密度可達,則爲孤立點。因此DBSCAN可以用來定位孤立點。

2.3 層次聚類

層次聚類在不同層次上對數據集進行劃分,形成樹狀的聚類結構,其中又根據構建過程分爲兩類:

  • 自底向上的聚合,初始化每個樣本爲一個類,每次對兩個類進行合併(如AGNES聚類每次合併距離最近的類),重複這一過程直到類的數目與設定值的相同
  • 自頂向下的分拆,初始化所有樣本爲一個類,每次將類進行拆分,重複這一過程直到類的數目與設定值的相同

3. 聚類效果的評估

在聚類完成後,不同於監督學習算法可以劃分驗證集進行評估,聚類的效果評估通常有如下方法:

  • 業務專家評估,聚類結果評估應該與實際場景結合,由業務專家根據對業務的熟悉和敏感來評估聚類效果是最重要的評估方式
  • RMSSTD,羣體內對象的相似程度,越小表示同一類的樣本相似度越高,聚類效果越好,公式如下:
    • 將分子的求和順序按變量順序排列,也可理解爲所有變量的綜合標準差,參考書[1]中就是這種理解。

r=[ixcixci2Np]12ciiNp() r=[\frac{\sum_i \sum_{x\in c_i} ||x-c_i||^2}{Np}]^{\frac{1}{2}}\\ 其中,c_i表示第i類,N表示樣本數,p表示變量數(排除維度差異)

  • R-Square,羣體間差異的大小,可理解爲聚類結果多大比例解釋了原數據的方差,越大說明聚類效果越好,公式如下:(分子相當於爲總體方差減去組內標準差,得到組間標準差,即羣體間的差異性,越大效果越好)

r=xDxc2ixcixci2xDxc2 r=\frac{\sum_{x\in D}||x-c||^2-\sum_i \sum_{x\in c_i} ||x-c_i||^2}{\sum_{x\in D}||x-c||^2}\\

此外,還有很多評估方式,此處不再介紹,可以參考聚類算法的評估

4. 聚類的注意事項

前面介紹了聚類分析的應用場景、常見的聚類算法和效果評估方式,本節介紹聚類使用時的一些注意點,也是在面試中可能考察的知識點。

  1. Kmeans聚類是應用最爲廣泛的聚類算法,需要了解其優缺點——
  • 優點:簡潔,易於理解,效率高,計算複雜度是 O(NKt)O(NKt)
  • 缺點:受初值和離羣點的影響較大,可能得到局部最優解,無法很好處理數據不平衡的情況,要初始化K值
  1. 處理噪聲點、異常點,對Kmeans等聚類算法,受異常點的影響較大,處理異常點的思路有兩種——
  • 直接刪除噪聲點,可以通過可視化、計算距離等方式發現噪聲點,並刪除
  • 隨機抽樣,使得出現噪聲點的概率較低
  1. 數據歸一化/標準化,通常不同變量的度量尺度不同,導致取值範圍差異很大,取值範圍越大的變量對聚類結果影響也越大,因此聚類前需要先對數據進行標準化或歸一化——
  • 數據標準化,如使用 Xμσ\frac{X-\mu}{\sigma} 轉化爲標準正態分佈
  • 數據歸一化,如使用 XXminXmaxXmin\frac{X-X_{min}}{X_{max}-X_{min}} 將數據縮放至[0, 1]區間
  1. 共線性檢驗,若存在成共線性的變量,則聚類結果會傾向於受這些變量影響,因此需要先進行共線性檢驗,只保留一個作爲聚類模型的輸入
  2. Kmeans需要給定K值、初值隨機(導致可能局部最優解),對應兩種改進算法——
  • ISODATA,迭代自組織數據分析法。對高維度的大數據集,難以估計出K的大小。ISODATA是針對這個問題進行改進,當屬於某個類別的樣本數過少時把這個類別去除,當屬於某個類別的樣本數過多、分散程度較大時把這個類別分爲兩個子類別
  • K-means++按照如下的思想選取K個聚類中心:假設已經選取了n個初始聚類中心(0<n<K),則在選取第n+1個聚類中心時,距離當前n個聚類中心越遠的點會有更高的概率被選爲第n+1個聚類中心
  1. 聚類時要選擇與項目需求關係最密切的核心變量,遵循"少而精"的原則——
  • 如從產品使用習慣區分用戶,則選擇用戶行爲、使用頻率、時間等變量;從購買習慣,則選擇付費方式、付費產品等變量考慮
  • 可以先根據核心變量進行聚類,根據聚類結果對每一類羣體進一步分析其餘變量

Reference

  1. 《數據挖掘與數據化運營實戰 思路、方法、技巧與應用》,盧輝

  2. 《統計學習方法》

  3. 《百面機器學習》

  4. 從最大似然到EM算法淺解

  5. 聚類算法的評估

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章