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