一种增量式流式数据聚类方法及系统与流程

文档序号:11864837阅读:257来源:国知局

本发明涉及数据聚类技术领域,具体涉及一种增量式流式数据聚类方法及系统。



背景技术:

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

在商务上,聚类能帮助市场分析人员从客户基本库中发现不同的客户群,并且用购买模式来刻画不同的客户群的特征。在生物学上,聚类能用于推导植物和动物的分类,对基因进行分类,获得对种群中固有结构的认识。聚类在地球观测数据库中相似地区的确定,汽车保险单持有者的分组,及根据房子的类型、价值和地理位置对一个城市中房屋的分组上也可以发挥作用。聚类也能用于对Web上的文档进行分类,以发现信息。

国际权威的学术组织The IEEE International Conference on Data Mining(ICDM)2006年12月评选出了数据挖掘领域的十大经典算法,其中,聚类算法以K-MEANS为代表,在处理流式数据时,有以下缺点:

1.需要用户合理估计簇的数目,经典的K-Means算法,在计算聚类之前,需要估计K的值,也就是簇的数目,因此整个算法的有效性依赖于基于具体问题的经验对于K值的合理预估;

2.不具备增量挖掘功能,K-Means算法必须一次性将所有数据读入内存才能开始计算,因此当数据量大于内存容量时将不能有效计算;

3.只能将数据点严格划分到一个簇中,K-Means算法只能将一个数据点严格地划分到一个簇中,对于有模糊聚类要求的应用场景而言效果不好。



技术实现要素:

为解决现有技术存在的不足,本发明公开了一种增量式流式数据聚类方法及系统,本发明可以有效避免传统聚类算法K-MEANS的缺点。不需要估计簇的数目,且不需要一次性将所有数据存入内存,不属于内存类算法。因此可以逐步读入巨大的、计算机无法一次性计算完成的数据集,并保存成精简的数据结构。本发明可以较好地适应实时的、大量的流式数据的聚类应用。

为实现上述目的,本发明的具体方案如下:

一种增量式流式数据聚类方法,包括:

步骤一:初始化点击流向量、簇,其中,簇为已聚类好的点击流向量的集合,并且包含了该集合的共同特征;

步骤二:判断数据库是否存在元组,如果存在,则转向步骤三,否则转向步骤六;

步骤三:初始化点击流向量,元组值赋值给点击流向量;

步骤四:计算点击流向量与簇的相似度;

步骤五:判断点击流向量与簇的相似度是否大于阈值,如是,则将点击流向量数据插入簇内,更新特征向量序列即簇的特征序列,置位status为1,然后再判断是否存在下一个簇,否则,直接判断是否存在下一个簇,若存在下一个簇,则转向步骤四,否则转向步骤六;

步骤六:判断点击流向量位status是否为零,若是,则创建新簇并更新簇的特征序列,并转向步骤二,否则,结束。

进一步的,在步骤一中,在初始化点击流向量、簇之前需要初始化数据库连接,确保与数据库的连接正常,创建点击流类对象、簇类对象及数据更新类对象。

在步骤二中,元组即数据库一条数据,通过数据库接口连接的返回值可判断。

进一步的,点击流向量:将用户的点击流访问序列按照点击流维度A的分类规则映射得到的向量,即为在点击流维度A下的点击流向量。

进一步的,点击流维度:将用户访问的点击流页面按照一定的规则分为m个类,则称这m个分类为点击流维度M。

进一步的,余弦相似度,用于计算点击流向量与簇的特征序列之间的相似程度:设α,β为点击流维度M下的两个点击流向量,设阈值为λ,用公式cosθ=αβ/(|α||β|)来计算点击流向量α,β的夹角大小,如果两个向量的夹角小于某一阈值θ,即cosθ大于λ(cosθ在0~180度内单调递减),则称α,β是相似的点击流向量。

进一步的,簇特征向量序列:用于标识簇特征的向量序列,通过簇特征向量序列,可以计算点击流与簇的相似度,进而判定点击流向量是否应归入该簇内。

进一步的,由于阈值λ的域为(0,1),且随着角度的增加,余弦值单调减少,因此可以采用折半查找的方法,先令λ取一个值,计算是否满足条件,如果满足条件,则继续缩小角度,如果不满足条件则扩大角度,如此反复,直到查找到满足条件的临界值为止。

进一步的,在步骤三中,元组值赋值给点击流向量时,取第一个元组值赋值给点击流对象a,将点击流对象a的向量序列赋值给第一个簇,然后顺序地取出数据库的其他元组,赋值给点击流对象a(所有点击流对象按时间顺序的排列称为点击流序列),然后计算点击流对象a与每一个簇的相似度。相似度小于阈值则将点击流对象a加入到该簇中并重新计算簇的特征序列。

进一步的,在步骤五中,相似度计算时,如果两个向量的夹角小于一定的数值,即余弦相似度公式所算出的值大于λ,则将其划归到该簇内,如果与所有的簇计算过后,该点击流数据仍没有加入到一个簇中,则新建一个簇,将该点击流的序列赋值给新建的簇,如此循环往复,直到所有的点击流数据都被划分为止。

进一步的,在步骤六中,簇的更新方法:将新的点击流向量与簇的特征序列每个维度计算平均值,设a为点击流向量,该向量有m个维度,ai为a向量在i维度的值,设A为簇,Ai为簇A在维度i的值,设当前簇A共包含有n个向量,当向量a并入簇A时,簇A每个维度的值更新都通过如下公式计算:

一种增量式流式数据聚类系统,包括:

初始化单元:初始化点击流向量、簇;

元组判断单元:判断数据库是否存在元组,如果存在,则转向赋值单元,否则转向点击流向量判断单元;

赋值单元:初始化点击流向量,元组值赋值给点击流向量;

相似度计算单元:计算点击流向量与簇的相似度;

点击流向量与簇的相似度判断单元:判断点击流向量与簇的相似度是否大于阈值,如是,则插入簇内,更新特征向量序列,置status为1,然后再判断是否存在下一个簇,否则,直接判断是否存在下一个簇,若存在下一个簇,则转向相似度计算单元,否则转向点击流向量判断单元;

点击流向量判断单元:判断点击流向量status是否为零,若是,则创建新簇并更新簇的点击流特征向量,并转向元组判断单元。

赋值单元中,元组值赋值给点击流向量时,取第一个元组值赋值给点击流对象a,将点击流对象a的向量序列赋值给第一个簇,然后顺序地取出数据库的其他元组,赋值给点击流对象a(所有点击流对象按时间顺序的排列称为点击流序列),然后计算点击流对象a与每一个簇的相似度。相似度小于阈值则将点击流对象a加入到该簇中并重新计算簇的特征序列。

相似度计算单元中,相似度计算时,如果两个向量的夹角小于一定的数值,即余弦相似度公式所算出的值大于λ,则将其划归到该簇内,如果与所有的簇计算过后,该点击流数据仍没有加入到一个簇中,则新建一个簇,将该点击流的序列赋值给新建的簇,如此循环往复,直到所有的点击流数据都被划分为止。

点击流向量判断单元中包括簇的更新:将新的点击流向量与簇的特征序列每个维度计算平均值,设a为点击流向量,该向量有m个维度,ai为a向量在i维度的值,设A为簇,Ai为簇A在维度i的值,设当前簇A共包含有n个向量,当向量a并入簇A时,簇A每个维度的值更新都通过如下公式计算:

本发明的有益效果:

1.方案采用的算法将数据看作向量,通过计算向量间夹角的大小来判定是否属于同一个类别。

2.由于采用了簇标号作为簇的特征,且数据可以逐个与簇标号匹配计算,因此可以批量载入数据,无需一次性加载所有的数据。

3.由于数据点与所有的簇标号都进行计算,避免了数据点只落入一个簇中的限制,因此能够适应模糊聚类的要求。

附图说明

图1本发明的数据处理流程图。

具体实施方式:

下面结合附图对本发明进行详细说明:

本发明是一种流式数据的聚类算法,具体包括聚类簇的计算、数据距离的计算,簇的更新方法等。

聚类簇的计算具体包括:阈值的有效设定,点击流向量与簇特征序列相似度计算。

数据距离的计算:余弦相似度计算点击流向量与簇之间的相似程度,cosθ=αβ/(|α||β|)

簇的更新方法:将新的点击流向量与簇的特征序列每个维度计算平均值。设a为点击流向量,该向量有m个维度,ai(1≤i≤m)为a向量在i维度的值。设A为簇,Ai为簇A在维度i的值。设当前簇A共包含有n个向量。当向量a并入簇A时,簇A每个维度的值更新都通过如下公式计算:

本发明的概念定义如下:

定义1点击流序列:用户访问Web站点时的一组连续的访问序列,称作点击流序列,记作<P1,P2,P3,……,Pn>,设I为点击流访问全集,Pi∈I,0≤i≤n。

定义2点击流维度:将用户访问的点击流页面按照一定的规则分为m个类,则称这m个分类为点击流维度M。例如,可以将访问/sports/目录下的所有页面划归为sports类,将访问/music/目录下的所有页面划归为music类。

定义3点击流向量:将用户的点击流访问序列按照点击流维度A的分类规则映射得到的向量,即为在点击流维度A下的点击流向量。例如,我们共划分了三个点击流类甲,乙,丙,用户1的点击流访问了甲类2次,乙类1次,丙类0次,则用户1的点击流向量为(2,1,0)。

定义4余弦相似度:设α,β为点击流维度M下的两个点击流向量,设阈值为λ。用公式

cosθ=αβ/(|α||β|)

来计算点击流向量α,β的夹角大小。如果两个向量的夹角小于某一阈值θ,即>λ,则称α,β是相似的点击流向量。

定义5簇特征向量序列:用于标识簇特征的向量序列。通过簇特征向量序列,可以计算点击流与簇的相似度,进而判定点击流是否应归入该簇内。

具体实现描述如下:

如图1所示,首先初始化数据库连接,创建点击流类对象,簇类对象,数据更新类对象。取第一个元组值赋值给点击流对象a,将点击流对象a的向量序列赋值给第一个簇。然后顺序地取出数据库的其他元组,赋值给点击流对象a,计算a与每一个簇的相似度。相似度的计算根据定义4,如果两个向量的夹角小于一定的数值,即余弦相似度公式所算出的值大于λ,则将其划归到该簇内。如果与所有的簇计算过后,该点击流数据仍没有加入到一个簇中,则新建一个簇,将该点击流的序列赋值给新建的簇。如此循环往复,直到所有的点击流数据都被划分为止。

对于点击流维度的划分,要注意结果精度与可分析性之间的平衡。如果维度很多,则有可能造成每个点击流数据独占一个簇,失去了分析的意义。如果维度太少,则大量的点击流被分到了几个簇内,没有太高的分析价值。考虑到一个大型的站点其页面成千上万,如果将每一个页面都作为一个维度,则有可能导致这样一种结果:算法划分了大量的簇,而且每个簇只有一个点击流数据。那么这里就可以采用分类的方法,将网站中的页面按类别划分,如军事、体育、音乐等,划分的程度可视具体情况而确定。

对于λ的取值,同样也会关系到聚类的精度。对于大部分的应用来说,我们希望每个簇的边界划分能够使得每个数据点都只属于一个簇,即全部的点击流数据数目正好等于每个簇内的点击流数据之和。由于λ的域为(0,1),且随着角度的增加,余弦值单调减少。因此可以采用折半查找的方法,先令λ=cos45°,计算是否满足条件。如果满足条件,则继续缩小角度,令λ=cos67.5°;如果不满足条件则扩大角度令λ=cos22.5°。如此反复,直到查找到满足条件的临界值为止。当然,采用这种方法计算的λ为一个临界值,由该值而得到的聚类也不免缺乏弹性。可以用此值作为参考,适当调低λ的取值。

页面日志格式为(host,timestamp,request,HTTP reply code,bytes in the reply),格式含义为,host代表请求主机,timestamp代表请求时间,request代表请求页面,HTTP reply code代表返回代码,bytes in the reply代表字节返回数。

实验中将页面分为了5个类别:software,htbin等目录下的页面访问被划为a;shuttle页面被划为b;images被划为c;history被划为d;其余访问被划为e。为简化起见,本次实验抽取了数据源中的200条数据进行计算。

根据上文的算法,利用折半查找,找到了当λ=0.95时,全部的点击流数据数目正好等于每个簇内的点击流数据之和。

在计算过程中,可以得到有关于向量夹角大小,也即λ的取值和聚类数目的关系,如表1:

表1λ的取值和聚类数目的关系

通过上表1可见,随着对于阈值夹角的扩大,聚类的数量越来越少,点击流数据被聚类到若干个大的簇中;而当夹角减小时,聚类的数量开始变多。不同的阈值对应了不同的聚类结果。

根据实验所得结果,全部数据共分成了16个簇。簇1的特征向量序列为(0,0,1,1,0),簇内共有4个对象。那么这四个对象在访问c,d类页面上具有共同的倾向性,即他们都比较喜欢访问images目录和history目录下的文件,且没有其他的页面访问爱好。簇2中的对象个数为32个,特征向量序列为(0,1.125,0,0,0),该结果说明这32个对象只喜欢浏览shuttle页面下的文件,而不喜欢浏览其他页面。其余结果的分析可参考上述分析。

核心伪代码如下:

public class点击流聚类项目{

public static void main(String[]args){

ClickStream clickstream=new ClickStream();

UpdateData updatedata=new UpdateData();

Cluster cluster[]=new Cluster[X];

con=DriverManager.getConnection();

sql=con.createStatement();

rs=sql.executeQuery(SQL语句);

rs.next();

while(数据库中存在元组){

for(所有的簇){

if(updatedata.similar>=λ){

updatedata.updatecluster();

clickstream.点击流状态=1;}

if(clickstream.点击流状态==0){

i=i+1;

updatedata.updatecluster();}}}

class ClickStream{

点击流名称;

点击流向量维值;

点击流状态;}

class Cluster{

簇特征向量序列;

簇内点击流名称;

簇内点击流数目;}

class UpdateData{

double similar(ClickStream,Cluster){

double value;

value=余弦公式计算所得数值;

return value;}//计算点击流数据于簇的相似度

updatecluster(ClickStream,Cluster){

cluster.number=cluster.number+1;}}

本发明还公开了一种增量式流式数据聚类系统,包括:

初始化单元:初始化点击流向量、簇;

元组判断单元:判断数据库是否存在元组,如果存在,则转向赋值单元,否则转向点击流向量判断单元;

赋值单元:初始化点击流向量,元组值赋值给点击流向量;

相似度计算单元:计算点击流向量与簇的相似度;

判断点击流向量与簇的相似度是否大于阈值,如是,则插入簇内,更新特征向量序列,置status为1,然后再判断是否存在下一个簇,否则,直接判断是否存在下一个簇,若存在下一个簇,则转向相似度计算单元,否则转向点击流向量判断单元;

点击流向量判断单元:判断点击流向量status是否为零,若是,则创建新簇并更新簇的点击流特征向量,并转向元组判断单元。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1