數據和算法的相愛相殺(二):常見的聚類算法
以下是數據與算法相愛相殺的第二篇,常見的聚類算法。如果按正常的數據和算法知識體系,這時候應該講一下常用的數據查詢或算法的數學基礎,但是觀眾老爺多是PM,恐不感興趣或沒有基礎。所以我就從應用和實戰的角度給大家直接上干貨,在過程中介紹其用到的數學或計算機知識。
聚類算法應該是大數據分析中最常見一類算法,在一般互聯網公司中,哪怕不借助算法,我們也經常需要對用戶、客戶進行分類,進行人群畫像,以支持差異化服務或營銷。所以說聚類這件事情我們一直在做,而借助數據規模和算法優勢則可以讓我們分類更加精準、多元、客觀。
常見的聚類算法包括:層次化聚類算法、劃分式聚類算法、基于密度的聚類算法、基于網格的聚類算法、基于模型的聚類算法等,以及現在比較火的基于粒度的聚類等。
我沒有打算做聚類算法的科普,也不做其發展來龍去脈的論文,就從一般互聯網公司能用到,各位看官可以拿來就用的角度分享一下常見的算法。
1、基于空間測距的k-means算法系列
k-means算法是一種經典的分類算法,它的基本原理是,視所有的數據為多維空間的點,如一名普通用戶(擁有:月消費頻次、消費金額、最近一次消費時間等眾多的消費數據),他每一個我們用于分析的數據都看作是一個維度。
這樣我們就得出了該用戶的位置,通過定義數個(即k個)中心點(中心點由機器隨機尋找),測算用戶與各中心點的距離并進行比較,將該用戶加入距離最近的中心點,這樣就形成了不同的圈層。
明眼的觀眾可能已經看到,如果某點對所有中心點距離的最小值存在相同的,那這個點應該加入哪個圈層呢?
這時候就原來的中心點變成圈層的幾何中心,從新測算距離,直到所有的點全包包含在某一個圈層中。
k-means算法的優點是簡單高效、時間復雜度、空間復雜度都比較低,而且對于數據規模也不感冒,這對追求效率和消費者體驗的互聯網公司至關重要。
但是其需要預設k值,k值的選擇會很大程度上影響聚類,用戶數據缺失的情況對結果也有很大影響,同時對臟數據和離群值也很敏感。所以人們又改良了k-means算法,具體如下,大家選擇學習。
為了解決預設k值不準確問題,延伸出了k-means++等眾多算法。其基本原理是:在選擇初始中心之前,對所有數據進行一次計算,使得選擇的初始聚類中心之間的距離盡可能的遠,同時也減少了計算量。
2、基于空間測距的CURE算法
層次聚類的核心原理是:先將每個對象作為一個組(簇),然后根據兩兩之間的距離合并這些原子組為越來越大的組,直到所有對象都在一個組中,或者條件滿足(達到了你想要的組個數)。
它的計算流程是:每個對象作為一類,計算兩者這件最小距離>將兩個 合并成一個新類,形成新的中心>計算所有類之間的距離,然后兩兩合并>直到合并完成或達到要求。
常見的層次聚類算法有:CURE算法、ROCK算法等,其基本原理都一樣,不過是各有所長。
3、基于密度劃分的DBSCAN算法
上文中我們講到了基于空間距離的聚類算法,這類算法最終形成的多是“圓形”的元素類,而基于度劃分的DBSCAN算法核心是:預先定義兩個變量,一個表示球形的半徑,一個表示球形內的點。
只要一個區域中的點的密度(即:球內的點/球的體積)大過某個閾值,就把球形相近的點加到與之相近的聚類中去。
- 在DBSCAN中的點分為核心點:在球形范圍核心(稠密)的點;
- 邊界點:處于球形邊界之內,但離核心較遠的點,處于球形范圍之外的點。
DBSCAN也存在一定的缺陷,一方面是對于高維數據不能很好的反映,另一方面是在聚類密度不斷變化的數據集中,不能很好地反映整體聚類情況。
以上幾種算法,基本夠PM們在日常使用,啟迪思維,方便交流。
除了以上幾種常用的聚類分析算法之外,還有一些聚類算法(均值漂移算法、網格算法、模型算法),如果大家有時間可以查找資繼續學習。
相關閱讀
本文由 @沒空兒 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自 Unsplash ,基于 CC0 協議
還有應該是先采集數據再用算法計算,是不是在采集前就已經明確了自己要用哪種算法計算哪種業務?可以減輕采集到的數據元的粒度
文章經常用到測距離這個詞,沒聽懂,為什么能測距離?又不是位置,是不是專業術語啊
同問蜂窩煤的那句話,我也沒搞懂
“明眼的觀眾可能已經看到,如果某點對所有中心點距離的最小值存在相同的,那這個點應該加入哪個圈層呢?
這時候就原來的中心點變成圈層的幾何中心,從新測算距離,直到所有的點全包包含在某一個圈層中?!?br /> 您好,這句話“這時候就原來的中心點變成圈層的幾何中心”我沒有搞懂
額,明白了