楠木軒

如何用聚類模型(k-means)做數據分析?

由 端木泰華 發佈於 科技

編輯導語:由於數據對於各行各業的人來説是越來越重要的存在,於是近年來關於數據分析的方法也是越來越多。在本篇文章中,作者為我們介紹了聚類模型,看看應該如何用聚類模型(k-means)來做數據分析吧。

在日常工作中,很多時候都會用到數據分析的方法,聚類模型模型看起來非常簡單,但實際上它的十分重要;本文作者分享了關於如何用聚類模型做數據分析的方法,我們一起來學習一下。

k-means屬於無監督學習算法,無監督算法的內涵是觀察無標籤數據集自動發現隱藏結構和層次,在無標籤數據中尋找隱藏規律。

聚類模型在數據分析當中的應用:既可以作為一個單獨過程,用於尋找數據內在規律,也可以作為分類等其他分析任務的前置探索。

例如:我們想探尋我們產品站內都有哪些社交行為羣體,剛開始拍腦門想可能並不會很容易。

這時候可以根據用户屬性、行為對用户進行聚類,根據結果將每個簇定義為一類社交羣體,基於這些類訓練後續的分類模型,給用户打標籤後進行個性化推薦、運營。

一、k-means算法與距離

K-means聚類的目標,是將n個觀測數據點按照一定標準劃分到k個聚類中,數據點根據相似度劃分。每一個聚類有一個質心,質心是對聚類中所有點的位置求平均值得到的點,每個觀測點屬於距離它最近的質心所代表的聚類。

模型最終會選擇n個觀測點到所屬聚類質心距離平方和(損失函數)最小的聚類方式作為模型輸出,K-means聚類分析中,特徵變量需要是數值變量,以便於計算距離。

我們使用距離來測量兩個樣本的相似性,距離的實質是他將兩個具有多維特徵數據的樣本的比較映射成一個數字,可以通過這個數字的大小來衡量距離。

幾個常見距離計算方法:

  1. 歐幾里得距離-直線距離,不適合高維度數據,對某一維度大數值差異更加敏感;
  2. 曼哈頓距離-也叫出租車距離,用來標明兩個點在標準座標系上的絕對軸距總和,只計算水平或垂直距離,對某一維度大數值差異不敏感;
  3. Hamming距離-可用來測量含有分類值的向量之間的距離;
  4. 餘弦距離-通過計算兩個向量的夾角餘弦值來評估相似度,適用於結果與數據中特徵的取值大小無關,而與不同特徵之間比值有關的案例。

k-means的實質是每次都把質心移動到羣內所有點的‘means’上,不是建立在距離這個基礎上,而是建立在最小化方差和的基礎上,方差恰好是歐幾里得距離平方,如果採用其他距離但依然去最小化方差和,會導致整個算法無法收斂,所以k-means使用歐幾里得方法。

二、k-means算法原理

第一步:數據歸一化、離羣點處理後,隨機選擇k個聚類質心,k的選擇下一節詳細講;第二步:所有數據點關聯劃分到離自己最近的質心,並以此為基礎劃分聚類;第三步:將質點移動到當前劃分聚類包含所有數據點的中心(means);

重複第二步、第三步n次,直到所有點到其所屬聚類質心的距離平方和最小。

多次隨機:選擇聚幾類,則開始隨機選擇幾個聚類質心,基於不同隨機初始質心(第一步的質心)的嘗試:

  • 嘗試1:第一步→第二步→第三步 … (重複二、三步~10次)→聚類方式1
  • 嘗試2:第一步→第二步→第三步 … (重複二、三步~10次)→聚類方式2

在所有嘗試結果中,選擇所有點到其所屬聚類質心的距離平方和(方差和)最小的聚類方式。

三、k值選擇方法

K值的選擇是k-means算法很重要的一步,K值選擇方法有肘部法則、拍腦袋法、gap statistic法、輪廓係數等,本篇主要介紹肘部法則及gap statistic兩種常用方法。

1. 肘部法則

我們可以嘗試不同的K值,並將不同K值所對應的損失函數畫成折線,橫軸為K的取值,縱軸為距離平方和定義的損失函數,距離平方和隨着K的變大而減小。

當K=5時,存在一個拐點,像人的肘部一樣,當k<5時,曲線極速下降,當K>5時,曲線趨於平穩,拐點即為K的最佳取值。

2. 間隔統計量(gap statistic)

手肘法則是強依賴經驗的方法,而gap statistic方法則不強依賴經驗,只需要找到最大gap statistic 所對應的K即可,我們繼續使用上面的損失函數,當分為K組時,對應的損失函數為Dk,則gap statistic定義為:

這裏的E(logDk)是logDk的期望,通過蒙特卡洛模擬產生,我們在樣本所在的區域內按照均勻分佈隨機產生和原始樣本數一樣多的隨機樣本,並對這些隨機樣本做k-means,得到對應的損失函數Dk,重複多次即可得出E(logDk)的近似值,從而最終可以計算gap statistic。

而gap statistic取得最大值所對應的K就是最佳的分組數。如下圖所示,K=3時,Gap(K)的取值最大,所以3為K的最佳取值。

四、k-means數據分析實戰案例

案例背景:O2O平台為了更好地為線下店面服務,增加一個增值服務,即利用自己擁有的地理位置數據為線下店面選址,數據如下:

每一條數據是一個興趣點(POI – Point of Interest)的特徵,具體指的是以這個位置為中心的500米半徑圓裏,各類商家/設施的數量,數據中我們隱藏掉了每個POI的具體名稱、座標、類型。

選址的商家將試圖從這些位置中,選擇一個作為下一個店面的位置。

商家想知道這40個潛在店面位置之間是否有顯著的差異。我們可以將所有POI按照相似程度,劃分成幾個類別?

步驟:

  • 數據準備:數據獲取、數據清洗、數據變換等步驟,重點是針對分析目的,進行特徵選擇以及特徵標準化;
  • 數據建模:使用k-means算法進行數據建模;
  • 後續分析:聚類模型的特徵描述分析,基於業務問題,進一步分析。
1. 讀取數據2. 特徵選取3. 標準化4. k值選擇5. 模型建立6. 聚類分析,對每一聚類進行進一步分析和描述

根據描述分析,生成poi聚類結果畫像,利用聚類,對人羣/商品/行為標籤進行精細劃分,作為進一步商業決策的基礎。

k-means是面試常考算法,其算法原理簡單,且參數很少,也是業界的常用算法。

但是其缺點也很明顯,例如其對離羣點較敏感、容易產生局部最優(多次隨機來解決)、需要提前確定k值、聚類結果依賴初始位置選擇等。

在接下來的文章中,會繼續為大家介紹其他的常用聚類算法,例如層次聚類、密度聚類(dbscan),敬請期待吧~

作者:趙小洛,公眾號:趙小洛洛洛

本文由 @趙小洛 原創發佈於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議