论文笔记:Streaming k-Means Clustering with Fast Queries

摘要:在流式传输过程中下,作者提供了一种算法,这种方法对聚类查询有更快的响应速度,即该方法能更快的查找到聚类中心。算法提出了一种新颖的思想—“coreset cache”(核心集缓存),它按一定规则重用了核心集来回答最新的聚类查询。
针对的是查询数据集中的聚类中心

一、引言
  1. 很多时候,待分析的数据不是全都已经获得了,而是源源不断地到来,甚至可能没有尽头,这叫做流数据,而流式k-means聚类与传统k-means自然也就有了许多不同,首先,它就需要一种算法来保存足够的状态信息,在更多的数据到来时,能够增量地更新各个簇;其次,当提出新的查询时,算法需要返回当前所有数据的k个聚类中心

  2. 过去的算法:已获得的数据流S被分为了多个块S1,S2,......每个块被压缩紧了一个核心集,多个核心集又被递归地合并成了高层次的coreset tree(核心集树)。
    这种算法的效率与需要被合并的核心集数量成比例,因而,在核心集数量巨大时,查询时间也会变得很高。

    当查询到来时,内存中所有活动的核心集会被合并到一起,然后在这个合并的数据集中应用聚类算法比如k-means++,最后输出k个聚类中心。

  3. 论文的贡献:提出了三种算法CC、RCC、OnlineCC,这些算法的精髓就是coreset caching,它的工作原理是重用在以前的查询中计算过的coreset,以加速对当前查询的coreset的计算。即利用一种聚类数据结构来更好地存储流式数据,以使得在需要用到这些数据时,能提供低延时的响应。

    当查询到达时,该算法不需要将当前内存中所有的coreset合并起来,只需要把最近那次查询的coreset(存储在coreset cache中)和那次查询之后到达的点的coresets合并起来。也就是合并coreset cache的核心集和增量窗口的核心集们。

    (1)最简单的算法:CC(Cached Coreset Tree)
    (2)递归地应用CC:RCC(Recursive Cached Coreset Tree)
    (3)结合CC和顺序流的思想:OnlineCC

  4. 现有流聚类算法:Sequential k-means、BIRCH、CluStream、STREAMLS


二、Preliminaries and Notation
  1. k-meas聚类:把每个点x归到k个簇中去,w(x)权值函数实现的是把d维的点x映射为一个整数,以和欧氏距离做计算
  2. k-means++:不是随机选择种子点(seeds),而是通过一定的算法来选择初始种子点。
    https://www.cnblogs.com/shelocks/archive/2012/12/20/2826787.html
  3. k-means Coreset:coreset的变体,适合实现k-means算法。公式意为在容忍一定的错误率的情况下,在核心集上进行k-means计算可替代在原巨大的数据集P上的计算。

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

三、 流聚类和核心集树
  • 作者为了解释论文中的算法是怎么样实现的,特地描述了一个适用于各种流聚类算法的驱动算法,也介绍了过去的CT(Corset Tree)算法,从而用其来演示驱动算法是怎么工作的,即,怎么往驱动算法中套入各种流聚类算法
  1. Driver Algorithm(驱动算法)
    驱动算法由一个聚类数据结构D的特定实现到来的数据大小m初始化,这两种数据都存储在对象 H 中。算法把到来的数据点分成每组大小为m的batches,并将之插入聚类数据结构中。H 中存有额外信息,如 H.CH.n ,前者表示当前的batch(最大可存m个数据点,超过则需要重新建一个H.C),后者表示目前为止所接受到的点的数量。
    而论文中所提及的各种算法,如CT、CC、RCC、OnlineCC等都是对数据结构D的实现。
  2. CT(r路合并核心集树)
    (1)CT是核心集树,由于没用到缓存,所以每次合并Coreset的时候,需要从内存中搜索全部coreset,极其耗时。
    (2) 桶(bucket):用来存储数据流中的数据点(对象),有一个参数m,表示每个桶至多能存储m个数据对象。coreset是我们定义的数据结构,而对应到存储层面,用桶来表示它,也就是说,每个桶中的数据对象,可求得一个核心集。核心集树在多层维护桶,所以桶是分级的。
    ① level = 0的桶称为基桶(base bucket),新到达的数据都是存储在基桶中的;
    ② 一旦基桶的数据已=m,则新建一个基桶,并比较该层的基桶数目是否已经 > r,若是,则需要将基桶合并,得到 level = 1的桶;
    ③ level = l的桶由r^l个基桶的信息合并而来。

    当level = 3,r = 2 时,表示该层的bucket由23 = 8个基桶的信息合并而来(合并桶的方法是求coreset),即统计了8个基桶中的数据 ==> 即8*m个数据点的总结 ==> 即该桶对应的coreset总结了数据流中8*m个数据点的信息。


四、三个快速的流聚类算法
  1. CC(Coreset Tree with Caching)
  • 使用了coreset caching来加速查询过程,方法是重用之前的查询中已经构建好的核心集

  • coreset cache 中存有旧核心集的子集。

  • 当需要回答新的查询时,CC避免了从CT多层次合并核心集的开销,而是只需要检索核心集树中的一小部分额外的核心集即可。

    细节:
    (1)每个缓存的核心集都是基桶1~基桶u的summary,u表示核心集的右端点,区间[1,u]则称作桶的“span”
    (2)哪些核心集会被缓存呢?
    ①. 整数分解。将n个batches到来后,将n进行如图所示的整数分解,其中,αi是递增的,即将n表示为以r为底的递增次幂的项之和


    ② 将公式的第一项,即i=0时的值赋给变量minor(n,r),剩下的值赋给变量major(n,r) , 即 major(n,r) = n - minor(n,r)
    ③ 又有n_k_如下图,相当于是把分解后的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) !!!!!!

    例如, 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)当查询来临,此时已收到N个batch,则CC的任务就是计算一个coreset,其 span=[1,N]
    ①. CC会首先令 N1 = major(N,r) ,然后将 [1, N] 划分为 [1, N1]∪[N1+1, N] , 因为 major(N,r) ∈ prefixsum(N,r),所以[1, N1]一定已经在cache中了,因而此后只需要去核心集树中检索[N1+1, N]即可。
    ② . CC的工作算法如图,表示的是当Batch N到达之后,CT 和 CC 各自是什么样子,以及若是此时有新查询到来,CT算法和CC算法各会合并哪些coreset。

    CC示意图

    以N=4和N=7为例。
    (1). 当 N = 4 时,有4 = 0·20 + 0·21 + 1·22 ==> premixsum = {n_2} = {4} ==> 只有[ 1,4 ]在cache中(以前旧的coreset需要被清除掉)==> 回应查询时直接回[1,4]即可
    (2). 当 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]不用被清除掉) ==> 回应查询时,需要合并 [1, 6] 和 [7, 7]


  1. RCC: Recursive Coreset Cache
  • CC存在问题,层次太多,时间开销仍会增加。
  • 递归的方式来实现核心集缓存的思想,使得coreset的层次少一点,同时运行时间小。
  • 在CT的单层中也使用CC的思想,则在查询的时候,甚至不用再合并r个coreset。
  • 提高合并coreset的合并度,从而减少层数;而每层都有许多个未合并的coreset,因此为他们又单独递归地建立了CT和CC。
    实现:
    (1) 数据结构RCC的定义:每个RCC(i)由以下几部分组成
    ① cache(i),
    ② RCC(i)的每一层又由两个数据结构组成,其一是一个列表List_l,表示 l 这一层的桶集;其二就是RCC_l, 存储的是RCC(i-1)第 l 层信息。

  1. Online Coreset Cache: a Hybrid of CC and Sequential k-means
  • 流聚类由两个组件构成,其一是构建的coreset以减小数据量,其二是聚类算法。CC和RCC都在讨论怎样通过减少查询时需要合并的coreset数量来减少第一个组件的运行时间。
  • 就流聚类问题而言,CC和RCC都还需要支付聚类的时间开销,因而需要减少这部分的运行时间。
  • OnlineCC 大多数情况下运行一个更简单的算法(计算开销仅O(1))来实现聚类以回答查询,只偶尔运行 k-means++。
  • OnlineCC 结合了CC和在线k-means算法,在保证聚类质量的前提下更快地找出聚类中心。前者由CC保证,后者由在线k-means算法保证。
  • 维护了一个评估系统,以适时地回到k-means++算法。
    实现
    (1) 当数据到来时,算法会将数据点存入coreset,并直接利用在线k-means更新聚类中心,因而在查询的时候可以在O(1)的时间内回答出聚类中心;
    (2) cost0表示CC+普通k-means++的聚类花销,EstCost表示对当前聚类中心集C进行更新所需聚类花销的评估,alpha > 1表示其评估系数。
    (3) 当查询来临,若此时的EstCost比alpha·cost0还高,则算法回退至CC+普通k-means++,需要重新计算coreset,然后实现组件一和组件二。否则直接回答当前的聚类中心集C即可。
    OnlineCC示意图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 775评论 0 3
  • 我的日子,每每都在倒计时。从前,那一年倒计时什么时候回来。现在,这一年倒计时就是巴望着快些卸任。所谓的什么组长,无...
    飘雨桐V阅读 251评论 0 0
  • 今天是一个快乐的日子,我学完辅导班就去了一家豪华的饭店,那里千奇百怪,各种各样什么东西都有,我和我的同学...
    隋光昊妈阅读 200评论 0 2
  • 谢谢你!我想,好的爱情就是这样,遇到了你的另一半,其实就是遇到了另一个更好的自己,TA会指引着你看到你内心更好的自...
    西门吹雪一一匠心做灯人阅读 288评论 0 0