这是提交给研讨会论文的一部分:国内外研究现状,希望读者在写文章时不要照抄,这都是我自己看了文章后写的
国内外研究现状:处理海量数据难处在于数据量过大,不可能一次性将所有的数据都放入内存,所以将会导致多次读取磁盘,这样严重影响聚类算法的性能。目前有三种比较流行的方法来解决这个问题。一是从数据集中选取合适的子集来进行聚类,从子集中找到每个簇的中心,然后将剩下的样本归入到离其最近的簇。但是很难确定选定的子集是否最能代表原数据集。二是采用其他占用内存较小的变量来代替原数据集中的多个样本,这样就有可能把所有数据样本的替代变量放入内存中,如文献【7】、【8】采用向量或者矩阵来替代原始数据,但是因为仅通过替代变量不能区分其所替代的样本,因而在某些情况将影响到聚类的效果。第三种就是采用分布式处理的方法,采用Map_Reduce的方案,将大数据集分解成小数据集,然后分别对每个小数据集进行聚类,然后将所有的聚类结果合并,如文献【9】、【10】、【11】。
CURE【1】算法即使用代表点的聚类方法,收缩因子的使用减小了噪音对聚类的影响。CURE算法采用随机抽样与分割相结合的办法来提高算法的空间和时间效率,并且在算法中用了堆和K-d树结构来提高算法效率.1996年由JHang T.提出的BIRCH【2】算法,即平衡迭代削减聚类法,其核心是用一个聚类特征3元组表示一个簇的有关信息,从而使一簇点的表示可用对应的聚类特征,而不必用具体的一组点来表示。BIRCH算法只适用于类的分布呈凸形及球形的情况,并且由于BIRCH算法需提供正确的聚类个数和簇直径限制,对不可视的高维数据不可行。CLARANS算法即随机搜索聚类算法,是一种分割聚类方法。该算法要求聚类的对象必须都预先调入内存,并且需多次扫描数据集,这对大数据量而言,无论时间复杂度还是空间复杂度都相当大。虽通过引入R*-树结构对其性能进行改善,使之能够处理基于磁盘的大型数据库,但R*-树的构造和维护代价太大。该算法对脏数据和异常数据不敏感,但对数据输入顺序异常敏感,且只能处理凸形或球形边界聚类。CLIQUE算法即自动子空间聚类算法。该算法利用自顶向上方法求出各个子空间的聚类单元。CLIQUE算法主要用于找出在高维数据空间中存在的低维聚类。为了求出d维空间聚类,必须组合给出所有d-1维子空间的聚类,导致其算法的空间和时间效率都较低,而且要求用户输入两个参数:数据取值空间等间隔距离和密度阈值。这2个参数与样本数据紧密相关,用户一般难以确定。CLIQUE算法对数据输入顺序不敏感。DBSCAN【5】算法即基于密度的聚类算法。DBSCAN算法不进行任何的预处理而直接对整个数据集进行聚类操作。当数据量非常大时,就必须有大内存量支持,I/O消耗也非常大。其时间复杂度为O(NlogN )(N为数据量),聚类过程的大部分时间用在区域查询操作上。DBSCAN算法对参数Eps及Minpts非常敏感,且这两个参数很难确定。【17】提出了一种基于重叠划分的快速分层聚类模型,主要包括两个阶段,每一个阶段是将数据集划分成一系列的元组。然后计算出两两之间的距离,如果其中最小的成对的距离小于某一个给定的阈值,则将这两个元组进行合并。接着重复上面的过程,直到年有的成对距离都大于给定的阈值&。在每二个阶段,在当前的结果上采用传统的分层聚类算法,得出最终的聚类结果。然而此种算法第一需要用户输入阈值&,并且需要将数据集全部载入内存。Nanni【18】提出了利用三角不等式来加快分层聚类算法。此将数据划分成子集,并减少了计算簇间距离的复杂度,但依然需要将整个数据集放入内存,不适合大规模数据集的处理。Vijaya et al.【19】提出一种混合聚类技术来加快序列分类。先在数据集里初始化类心,然后使用传统的HAC算法来进行最终聚类。最近 Koga et al.[20]提出一种快速近似算法叫做LSH-link,是一种实现single-link的快速算法。使用一种基于概率的方法在线性时间里快速找出邻近的簇。他提出他们的方法在确定的假设下,只要运行线性的时间。然而这种算法依然需要将整个数据集存入内存,这阻止了其应用到海量数据处理的情况中。并且聚类结果很依赖于给定的参数。在【21-23】中将数据集划分成一组子集,然后在子集中使用k均值算法,最后将聚类的结果进行合并。这些算法主要的不同在计算子集的相似度的指标上。混合模型【21】能够在一维数据集中区分高密度的簇,然而却没有对多维数据集进行分析。这些方法都使用密度信息来计算簇之间相似度。Bidyut 等【26】讨论了两种聚类的方法。一是通过一次扫描数据集生成一系列的小簇,然后采用传统的HAC进行后续聚合,采用簇心之间距离作为计算簇之间距离的度量,只需要用户提供一个最小簇距离参数,然而其聚类结果却不理想,文章提出了一种改进的方式,采用sigle-link来计算簇之间的距离,经过一次扫描后确定哪些簇之间才需要计算,并且还缩小了需要计算距离的样本数,在一定程度上加快了聚类速度,但改进的算法仍需要再次扫描数据集,因而不适合处理海量数据集。【27】提出一种先基于数据集迭代移除不合条件的样本,直到找出整个数据集的核心框架来区分簇。此种算法不受孤立点的影响还可以生成任意形状的簇,但其依然需要整个数据集放入内存。能够较好应用于海量数据处理的只需要扫描一次数据集并且不需要将整个数据集放入内存的算法目前还有待改进。