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