现在的位置: 首页 > 综合 > 正文

数据挖掘之聚类

2013年06月04日 ⁄ 综合 ⁄ 共 2180字 ⁄ 字号 评论关闭
文章目录

聚类属于无监督学习。

聚类的算法有很多种,其可分为基于划分、层次、密度、网格及模型的聚类方法。

根据数据集的不同,需要采用不同的聚类算法和策略。

1. 选择聚类算法,所面临的常见问题又哪些?

1) 不同形状的数据集。不同形状的数据集,也需要采取不同的度量策略,或者不同的聚类算法。

2)不同的数据次序。相同数据集,但数据输入次序不同,也会造成聚类的结果的不同。

3)噪声。不同的算法,对噪声的敏感程度不同。

2. 在高维的欧式空间,什么是“维数灾难”?

在高维下,所有点对的距离都差不多(如欧式距离),或者是几乎任意两个向量都是正交(利用夹角进行进行度量),这样聚类就很困难。

3. 常见的聚类算法的策略有哪些?

1)层次或凝聚式聚类。采取合并的方式,将邻近点或簇合并成一个大簇。

2)点分配。每次遍历数据集,将数据分配到一个暂时适合的簇中,然后不断更新。

4. 层次聚类算法的复杂度是多少?

每次合并,都需计算出两个点对之间的距离,复杂度是O(n^2), 后续步骤的开销,分布正比与O((n-1)^2), O((n-2)^2)...,这样求和算下来,算法复杂度是O(n^3).

算法优化:采用优先队列/最小堆来优化计算。优先队列的构建,第一步需要计算出每两个点的距离,这个开销是O(N^2). 一般情况下,N个元素,单纯的优先队列的构建开销为O(N),若是N^2个距离值,则建堆的开销是O(N^2)。

第二步,合并,合并需要一个删除、计算和重新插入的过程。因为合并一个簇对,就需要更新N个元素,开销为O(N*logN)。总的开销为O((N^2) * logN).

所以,总的算法复杂度为O((N^2) * logN).

5. 欧式空间与非欧式空间下,常见的簇之间的距离度量有哪些?

欧式空间:

1)两个簇之间的质心之间的距离最小

2)两个簇中所有点之间的最短距离

3)两个簇之间所有点对的平均距离

4)将具有最小半径的两个簇进行合并, 簇的半径:簇内的点到质心的最大距离

5)将具有最小直径的两个簇进行合并,簇的直径:簇内任意两点间的最大距离

非欧式空间,簇的中心点定义,该点距离其他点的距离最近,如何计算?

1)该点到簇中其他所有点的距离之和(求和),1-范数

2)该点到簇中其他点的最大距离(最大值),无穷-范数

3)该点到簇中其他点的平方和(平方和),2-范数

6. k-means、k均值算法

点分配式的聚类算法。一般用于球形或凸集的数据集。

算法步骤如下:

1)初始化k个选择点作为最初的k个簇的中心

2)计算每个点分别到k个簇的中心,并将点分配到其距离最近的簇中

3)由分配的点集,分别更新每个簇的中心,然后回到2,继续算法,直到簇的中心变化小于某个阈值

7. k-means算法的两个问题?

1)初始化选择点;常用的方式是尽量选择距离比较远的点(方法:依次计算出与已确定的点的距离,并选择距离最大的点),或者首先采取层次聚类的方式找出k个簇

2)如何选取k值;k值选取不当,会导致的问题?当k的数目低于真实的簇的数目时,平均直径或其他分散度指标会快速上升

可以采用多次聚类,然后比较的方式。多次聚类,一般是采用1, 2, 4, 8...数列的方式,然后找到一个指标在v/2, v时,获取较好的效果,然后再使用二分法,在[v/2, v]之间找到最佳的k值。

8. CURE算法

使用场景:

任何形状的簇,如S形、环形等等,不需要满足正态分布,欧式空间,可以用于内存不足的情况

特征:

簇的表示不是采用质心,而是用一些代表点的集合来表示。

算法步骤:

1)初始化。抽取样本数据在内存中进行聚类,方法可以采用层次聚类的方式,形成簇之后,从每个簇中再选取一部分点作为簇的代表点,并且每个簇的代表点之间的距离尽量远。对每个代表点向质心移动一段距离,距离的计算方法:点的位置到簇中心的距离乘以一个固定的比例,如20%。

2)对簇进行合并。当两个簇的代表点之间足够近,那么就合并这两个簇,直到没有更足够接近的簇。

3)点分配。对所有点进行分配,即将点分配给与代表点最近的簇。

9. GRGPF算法

场景:

非欧式空间,可用于内存不足的情况(对数据抽样)

特征:

同时使用了层次聚类和点分配的的思想。

如何表示簇?

数据特征:簇包含点的数目,簇中心点,离中心点最近的一些点集和最远的一些点集,ROWSUM(p)即点p到簇中其他店的距离平方和。靠近中心的点集便于修改中心点的位置,而远离中心的点便于对簇进行合并。

簇的组织:类似B-树结构。首先,抽取样本点,然后做层次聚类,就形成了树T的结构。然后,从树T中选取一系列簇,即是GRGPF算法的初始簇。然后将T中具有相同祖先的簇聚合,表示书中的内部节点。

点的分配:对簇进行初始化之后,将每个点插入到距离最近的那个簇。

具体处理的细节更为复杂,如果对B-树比较了解,应该有帮助。

10. 流聚类,如何对最近m个点进行聚类?

N个点组成的滑动窗口模型,类似DGIM算法中统计1的个数。

1)首先,划分桶,桶的大小是2的次幂,每一级桶的个数最多是b个。

2)其次,对每个桶内的数据进行聚类,如采用层次聚类的方法。

3)当有新数据来临,需要新建桶,或者合并桶,这个类似于GDIM,但除了合并,还需要合并簇,当流内聚类的模型变化不是很快的时候,可以采取直接质心合并的方式。

4)查询应答:对最近的m个点进行聚类,当m不在桶的分界线上时,可以采用近似的方式求解,只需求出 包含m个点的最少桶 的结果

【上篇】
【下篇】

抱歉!评论已关闭.