淘先锋技术网

首页 1 2 3 4 5 6 7

KMean聚类算法是一种比较简单而且常用的聚类算法,该算法有以下特点:

a) 聚类数目的一定的

b)选择一个样本的最近聚类时,需要将所有聚类的距离都计算一遍,然后选择最近的聚类作为该样本所属的类别

考虑到以上特点,会存在以下问题:首先,如果对数据样本集合不了解,K的选择会有一定的随机性,K的选择关乎聚类质量和计算效率,其次,与所有聚类集合都进行计算,这个效率会非常低下。综合以上两点,常见的改进的方法是层次聚类或者基于Tree的方法来减少计算量等方法,在项目的过程中,调研了Fast Streaming kmeans的方法,该算法有以下特点:

a)是基于streaming的,所以样本可以无限大,而且对数据样本只计算一次

b)最终聚类产生的结果集合的大小k是在一定范围变化的

c)在聚类过程中,只有当满足一定概率的时候才会产生新的聚类;当聚类数据大于上限,对聚类进行合并操作

Fast Streaming kmeans算法适合处理较大规模的数据,但是还是有一定的局限性,比如计算效率会随着聚类数据增大而下降,聚类的精度较低,在60W集合的聚类时间1个多小时,不符合我们的需求,在考虑了kmean的计算特点和实际应用场景之后,我们对kmeans算法做了以下改进:

a)将样本数据进行稀疏存储,构建节点的索引

b)计算样本的所属聚类的时候,只与该样本拥有共同索引的聚类计算距离

c)在计算距离的时候,随机从聚类集合中选取一个作为基准进行计算

以上改进使得聚类在60W集合的时间在20分钟左右,考虑到c)中随机选择基准的不确定性,在计算距离的时候,利用索引,找出与样本共现次数最多的一个样本进行计算。最后再针对代码进行了调整和改进,使得在原有数据集合的聚类时间在6分钟左右,基本能达到我们在线系统的运行需求。