論文筆記:Streaming k-Means Clustering with Fast Queries

摘要:在流式傳輸過程中下抑堡,作者提供了一種算法瀑构,這種方法對聚類查詢有更快的響應(yīng)速度普舆,即該方法能更快的查找到聚類中心帐萎。算法提出了一種新穎的思想—“coreset cache”(核心集緩存),它按一定規(guī)則重用了核心集來回答最新的聚類查詢敞曹。
針對的是查詢數(shù)據(jù)集中的聚類中心

一账月、引言
  1. 很多時候,待分析的數(shù)據(jù)不是全都已經(jīng)獲得了澳迫,而是源源不斷地到來局齿,甚至可能沒有盡頭,這叫做流數(shù)據(jù)纲刀,而流式k-means聚類與傳統(tǒng)k-means自然也就有了許多不同,首先担平,它就需要一種算法來保存足夠的狀態(tài)信息示绊,在更多的數(shù)據(jù)到來時,能夠增量地更新各個簇暂论;其次面褐,當(dāng)提出新的查詢時,算法需要返回當(dāng)前所有數(shù)據(jù)的k個聚類中心取胎。

  2. 過去的算法:已獲得的數(shù)據(jù)流S被分為了多個塊S1,S2,......每個塊被壓縮緊了一個核心集展哭,多個核心集又被遞歸地合并成了高層次的coreset tree(核心集樹)。
    這種算法的效率與需要被合并的核心集數(shù)量成比例闻蛀,因而匪傍,在核心集數(shù)量巨大時,查詢時間也會變得很高觉痛。

    當(dāng)查詢到來時役衡,內(nèi)存中所有活動的核心集會被合并到一起,然后在這個合并的數(shù)據(jù)集中應(yīng)用聚類算法比如k-means++薪棒,最后輸出k個聚類中心手蝎。

  3. 論文的貢獻:提出了三種算法CC榕莺、RCC、OnlineCC棵介,這些算法的精髓就是coreset caching钉鸯,它的工作原理是重用在以前的查詢中計算過的coreset,以加速對當(dāng)前查詢的coreset的計算邮辽。即利用一種聚類數(shù)據(jù)結(jié)構(gòu)來更好地存儲流式數(shù)據(jù)唠雕,以使得在需要用到這些數(shù)據(jù)時,能提供低延時的響應(yīng)逆巍。

    當(dāng)查詢到達時及塘,該算法不需要將當(dāng)前內(nèi)存中所有的coreset合并起來,只需要把最近那次查詢的coreset(存儲在coreset cache中)和那次查詢之后到達的點的coresets合并起來锐极。也就是合并coreset cache的核心集和增量窗口的核心集們笙僚。

    (1)最簡單的算法:CC(Cached Coreset Tree)
    (2)遞歸地應(yīng)用CC:RCC(Recursive Cached Coreset Tree)
    (3)結(jié)合CC和順序流的思想:OnlineCC

  4. 現(xiàn)有流聚類算法:Sequential k-means、BIRCH灵再、CluStream肋层、STREAMLS


二、Preliminaries and Notation
  1. k-meas聚類:把每個點x歸到k個簇中去翎迁,w(x)權(quán)值函數(shù)實現(xiàn)的是把d維的點x映射為一個整數(shù)栋猖,以和歐氏距離做計算
  2. k-means++:不是隨機選擇種子點(seeds),而是通過一定的算法來選擇初始種子點汪榔。
    https://www.cnblogs.com/shelocks/archive/2012/12/20/2826787.html
  3. k-means Coreset:coreset的變體蒲拉,適合實現(xiàn)k-means算法。公式意為在容忍一定的錯誤率的情況下痴腌,在核心集上進行k-means計算可替代在原巨大的數(shù)據(jù)集P上的計算雌团。

    符號 coreset(k, ε, P) 表示k-means coreset。

三士聪、 流聚類和核心集樹
  • 作者為了解釋論文中的算法是怎么樣實現(xiàn)的锦援,特地描述了一個適用于各種流聚類算法的驅(qū)動算法,也介紹了過去的CT(Corset Tree)算法剥悟,從而用其來演示驅(qū)動算法是怎么工作的灵寺,即,怎么往驅(qū)動算法中套入各種流聚類算法区岗。
  1. Driver Algorithm(驅(qū)動算法)
    驅(qū)動算法由一個聚類數(shù)據(jù)結(jié)構(gòu)D的特定實現(xiàn)到來的數(shù)據(jù)大小m初始化略板,這兩種數(shù)據(jù)都存儲在對象 H 中。算法把到來的數(shù)據(jù)點分成每組大小為m的batches慈缔,并將之插入聚類數(shù)據(jù)結(jié)構(gòu)中蚯根。H 中存有額外信息,如 H.CH.n ,前者表示當(dāng)前的batch(最大可存m個數(shù)據(jù)點颅拦,超過則需要重新建一個H.C)蒂誉,后者表示目前為止所接受到的點的數(shù)量。
    而論文中所提及的各種算法距帅,如CT右锨、CC、RCC碌秸、OnlineCC等都是對數(shù)據(jù)結(jié)構(gòu)D的實現(xiàn)绍移。
  2. CT(r路合并核心集樹)
    (1)CT是核心集樹,由于沒用到緩存讥电,所以每次合并Coreset的時候蹂窖,需要從內(nèi)存中搜索全部coreset,極其耗時恩敌。
    (2) 桶(bucket):用來存儲數(shù)據(jù)流中的數(shù)據(jù)點(對象)瞬测,有一個參數(shù)m,表示每個桶至多能存儲m個數(shù)據(jù)對象纠炮。coreset是我們定義的數(shù)據(jù)結(jié)構(gòu)月趟,而對應(yīng)到存儲層面,用桶來表示它恢口,也就是說孝宗,每個桶中的數(shù)據(jù)對象,可求得一個核心集耕肩。核心集樹在多層維護桶因妇,所以桶是分級的。
    ① level = 0的桶稱為基桶(base bucket)猿诸,新到達的數(shù)據(jù)都是存儲在基桶中的婚被;
    ② 一旦基桶的數(shù)據(jù)已=m,則新建一個基桶两芳,并比較該層的基桶數(shù)目是否已經(jīng) > r摔寨,若是去枷,則需要將基桶合并怖辆,得到 level = 1的桶;
    ③ level = l的桶由r^l個基桶的信息合并而來删顶。

    當(dāng)level = 3竖螃,r = 2 時,表示該層的bucket由23 = 8個基桶的信息合并而來(合并桶的方法是求coreset)逗余,即統(tǒng)計了8個基桶中的數(shù)據(jù) ==> 即8*m個數(shù)據(jù)點的總結(jié) ==> 即該桶對應(yīng)的coreset總結(jié)了數(shù)據(jù)流中8*m個數(shù)據(jù)點的信息特咆。


四、三個快速的流聚類算法
  1. CC(Coreset Tree with Caching)
  • 使用了coreset caching來加速查詢過程,方法是重用之前的查詢中已經(jīng)構(gòu)建好的核心集腻格。

  • coreset cache 中存有舊核心集的子集画拾。

  • 當(dāng)需要回答新的查詢時,CC避免了從CT多層次合并核心集的開銷菜职,而是只需要檢索核心集樹中的一小部分額外的核心集即可青抛。

    細節(jié):
    (1)每個緩存的核心集都是基桶1~基桶u的summary,u表示核心集的右端點酬核,區(qū)間[1,u]則稱作桶的“span”蜜另。
    (2)哪些核心集會被緩存呢?
    ①. 整數(shù)分解嫡意。將n個batches到來后举瑰,將n進行如圖所示的整數(shù)分解,其中蔬螟,αi是遞增的此迅,即將n表示為以r為底的遞增次冪的項之和


    ② 將公式的第一項,即i=0時的值賦給變量minor(n,r)促煮,剩下的值賦給變量major(n,r) 邮屁, 即 major(n,r) = n - minor(n,r)
    ③ 又有n_k_如下圖,相當(dāng)于是把分解后的n的最小的k項刪除后得到 n_k_菠齿,即n分解后的后面 j-k 項

    變量 prefixsum(n,r)表示所有 n_k_ 的集合佑吝,如圖,則prefixsum(n,r)由 n_1,n_2,......,n_j 組成

    • 可知一定有 major(n,r) ∈ prefixsum(n,r) I取S蠓蕖!<部谩8旮帧!

    例如是尔, n = 47 殉了,r = 3. 則47 =1·33+2·32+2·30,于是有 minor(47, 3) = 2, major(47, 3) = 45拟枚,而 prefixsum(47, 3) = {27, 45}.

    ⑤ 若某個 coreset 的右端點 u ∈ prefixsum(n,r) 中薪铜,則CC緩存這個coreset。

    (3)當(dāng)查詢來臨恩溅,此時已收到N個batch隔箍,則CC的任務(wù)就是計算一個coreset,其 span=[1,N]脚乡。
    ①. CC會首先令 N1 = major(N,r) 蜒滩,然后將 [1, N] 劃分為 [1, N1]∪[N1+1, N] , 因為 major(N,r) ∈ prefixsum(N,r),所以[1, N1]一定已經(jīng)在cache中了,因而此后只需要去核心集樹中檢索[N1+1, N]即可俯艰。
    ② . CC的工作算法如圖捡遍,表示的是當(dāng)Batch N到達之后,CT 和 CC 各自是什么樣子竹握,以及若是此時有新查詢到來稽莉,CT算法和CC算法各會合并哪些coreset。

    CC示意圖

    以N=4和N=7為例涩搓。
    (1). 當(dāng) N = 4 時污秆,有4 = 0·20 + 0·21 + 1·22 ==> premixsum = {n_2} = {4} ==> 只有[ 1,4 ]在cache中(以前舊的coreset需要被清除掉)==> 回應(yīng)查詢時直接回[1,4]即可
    (2). 當(dāng) N = 7 時, 有7 = 1·20 + 1·21 + 1·2^2 ==> premixsum = {n_1, n_2} = {6, 4} ==> [1,4] 和 [1, 6]在cache中(舊的coreset [1,4]不用被清除掉) ==> 回應(yīng)查詢時昧甘,需要合并 [1, 6] 和 [7, 7]


  1. RCC: Recursive Coreset Cache
  • CC存在問題良拼,層次太多,時間開銷仍會增加充边。
  • 遞歸的方式來實現(xiàn)核心集緩存的思想庸推,使得coreset的層次少一點,同時運行時間小浇冰。
  • 在CT的單層中也使用CC的思想贬媒,則在查詢的時候,甚至不用再合并r個coreset肘习。
  • 提高合并coreset的合并度际乘,從而減少層數(shù);而每層都有許多個未合并的coreset漂佩,因此為他們又單獨遞歸地建立了CT和CC脖含。
    實現(xiàn):
    (1) 數(shù)據(jù)結(jié)構(gòu)RCC的定義:每個RCC(i)由以下幾部分組成
    ① cache(i),
    ② RCC(i)的每一層又由兩個數(shù)據(jù)結(jié)構(gòu)組成投蝉,其一是一個列表List_l养葵,表示 l 這一層的桶集;其二就是RCC_l, 存儲的是RCC(i-1)第 l 層信息瘩缆。

  1. Online Coreset Cache: a Hybrid of CC and Sequential k-means
  • 流聚類由兩個組件構(gòu)成关拒,其一是構(gòu)建的coreset以減小數(shù)據(jù)量,其二是聚類算法庸娱。CC和RCC都在討論怎樣通過減少查詢時需要合并的coreset數(shù)量來減少第一個組件的運行時間着绊。
  • 就流聚類問題而言,CC和RCC都還需要支付聚類的時間開銷涌韩,因而需要減少這部分的運行時間畔柔。
  • OnlineCC 大多數(shù)情況下運行一個更簡單的算法(計算開銷僅O(1))來實現(xiàn)聚類以回答查詢氯夷,只偶爾運行 k-means++臣樱。
  • OnlineCC 結(jié)合了CC和在線k-means算法,在保證聚類質(zhì)量的前提下更快地找出聚類中心。前者由CC保證雇毫,后者由在線k-means算法保證玄捕。
  • 維護了一個評估系統(tǒng),以適時地回到k-means++算法棚放。
    實現(xiàn)
    (1) 當(dāng)數(shù)據(jù)到來時枚粘,算法會將數(shù)據(jù)點存入coreset,并直接利用在線k-means更新聚類中心飘蚯,因而在查詢的時候可以在O(1)的時間內(nèi)回答出聚類中心馍迄;
    (2) cost0表示CC+普通k-means++的聚類花銷,EstCost表示對當(dāng)前聚類中心集C進行更新所需聚類花銷的評估局骤,alpha > 1表示其評估系數(shù)攀圈。
    (3) 當(dāng)查詢來臨,若此時的EstCost比alpha·cost0還高峦甩,則算法回退至CC+普通k-means++赘来,需要重新計算coreset,然后實現(xiàn)組件一和組件二凯傲。否則直接回答當(dāng)前的聚類中心集C即可犬辰。
    OnlineCC示意圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冰单,隨后出現(xiàn)的幾起案子幌缝,更是在濱河造成了極大的恐慌,老刑警劉巖诫欠,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狮腿,死亡現(xiàn)場離奇詭異,居然都是意外死亡呕诉,警方通過查閱死者的電腦和手機缘厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甩挫,“玉大人贴硫,你說我怎么就攤上這事∫琳撸” “怎么了英遭?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亦渗。 經(jīng)常有香客問我挖诸,道長,這世上最難降的妖魔是什么法精? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任多律,我火速辦了婚禮痴突,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狼荞。我一直安慰自己辽装,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布相味。 她就那樣靜靜地躺著拾积,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丰涉。 梳的紋絲不亂的頭發(fā)上拓巧,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音一死,去河邊找鬼玲销。 笑死,一個胖子當(dāng)著我的面吹牛摘符,可吹牛的內(nèi)容都是我干的贤斜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逛裤,長吁一口氣:“原來是場噩夢啊……” “哼瘩绒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起带族,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锁荔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝙砌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳堕,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年择克,在試婚紗的時候發(fā)現(xiàn)自己被綠了恬总。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肚邢,死狀恐怖壹堰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骡湖,我是刑警寧澤贱纠,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站响蕴,受9級特大地震影響谆焊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浦夷,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一辖试、第九天 我趴在偏房一處隱蔽的房頂上張望辜王。 院中可真熱鬧,春花似錦剃执、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辫继,卻和暖如春怒见,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姑宽。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工遣耍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炮车,地道東北人纪隙。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像悲伶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淮椰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • --- layout: post title: "如果有人問你關(guān)系型數(shù)據(jù)庫的原理,叫他看這篇文章(轉(zhuǎn))" date...
    藍墜星閱讀 790評論 0 3
  • 我的日子绑雄,每每都在倒計時万牺。從前脚粟,那一年倒計時什么時候回來『宋蓿現(xiàn)在,這一年倒計時就是巴望著快些卸任已慢。所謂的什么組長,無...
    飄雨桐V閱讀 261評論 0 0
  • 今天是一個快樂的日子轿塔,我學(xué)完輔導(dǎo)班就去了一家豪華的飯店揍障,那里千奇百怪毒嫡,各種各樣什么東西都有幻梯,我和我的同學(xué)...
    隋光昊媽閱讀 206評論 0 2
  • 謝謝你伐蒂!我想逸邦,好的愛情就是這樣昭雌,遇到了你的另一半,其實就是遇到了另一個更好的自己,TA會指引著你看到你內(nèi)心更好的自...
    西門吹雪一一匠心做燈人閱讀 296評論 0 0