聚类算法一览
聚类算法一览
聚类算法是数据挖掘领域三类基本算法之一,另外两种算法是分类算法和协同过滤算法。按照机器学习领域的分类标准,聚类算法属于一种无监督的学习算法,分类算法是一种有监督的学习算法。因为分类算法的输入数据对象是有标签的,标签表示了数据对象的所属的类别,而聚类算法的输入数据没有标签,聚类算法的目的就是将相似的数据对象划分为一类或者簇,使得在同一个簇内的数据对象尽可能相似,不同簇中的数据对象尽可能不相似。
聚类算法分类
聚类算法多种多样,很难对所有的聚类算法进行一个简单的分类,因为这些类别可能重叠,从而使得一个算法可以具有几类算法的特征。但是仍然给出了一个相对有组织的描述,来对各种聚类算法给出一个大致的描述。聚类算法大致可分为以下四类:
(1) 划分方法
- 划分方法一般会给定一个要分类的数目,同时给出每种分类的一个初始数据对象,然后计算其他所有的数据对象与已有的分类的距离(利用一个相异度函数计算,也可以称为一个距离度量),将剩余的数据对象分配到与其距离最近的簇中。经过第一次初始迭代后划分出了许多簇,然后重新计算簇的一个表示数值(在k-means算法中是所有数据对象的平均值),然后重新计算所有数据对象对每个簇的表示数值的距离,再将数据对象分到不同的簇中。然后继续迭代,直到聚类结果比较稳定,则聚类结束
- 利用均值来计算与其他数据对象的距离的算法称为k-means方法(k均值法),但是这种算法对离群点敏感,因为离群点会极大的影响均值的数值。一种改进的算法是使用簇中的真实数据对象来代表簇,这样离群点对聚类的影响会小很多。一种典型的k-中心点算法是PAM算法,PAM算法通过计算替换一系列中心点中的某一个中心点的方法来与未替换前的中心点方案作对比,选择合适的中心点,一直迭代,直到稳定。这是一种贪婪算法。但是k-中心点算法每次迭代的时间复杂度为O(K(N-K))太大。因此衍生出了CLARA算法,这是一种利用随机样本的抽样方法。
(2) 层次方法
有时我们想把数据划分成不同层上的群组,如层次。层次聚类方法可以将数据对象组成层次结构或簇的“树”。层次聚类可以凝聚或者分裂的聚类两种。
- 凝聚聚类
凝聚聚类采用自底向上的聚类策略,它从每个对象形成自己的簇开始,并且迭代的把簇合并成越来越大的簇,直到所有的对象都在一个簇中,或者满足某个终止条件。
2. 分裂聚类
分裂聚类使用自顶向下的策略,它从把所有对象置于一个簇中开始,该簇是层次结构的根,然后把根上的簇划分成多个较小的簇。
3. 两个簇之间的距离
无论是凝聚聚类还是分裂聚类,核心的问题是度量两个簇之间的距离,常用的有四种度量簇之间的距离的算法,最小,最大,均值,平均距离。
4. 典型的层次聚类算法
BIRCH,使用聚类特征树的多阶段聚类。Chameleon(变色龙):使用动态建模的多阶段层次聚类。概率层次聚类。
(3) 基于密度的方法
使用划分和层次聚类只能发现球状簇,很难发现任意形状的簇。为了发现任意形状的簇,把簇看做数据空间中被稀疏区域分开的稠密区域,这是基于密度的聚类方法的主要策略。
1. DBSCAN-一种基于高密度连通区域的基于密度的聚类
DBSCAN算法读入所有的数据对象,任意选择一个数据对象作为起始对象,然后基于给定的两个参数e和领域密度阈值MinPts来计算此数据对象附近是否密集(在以起始对象为中心e为半径的区域内是否有MinPts个数据对象来判定是否密集)。如果此对象附近密集,则将在范围内的数据对象放到一个队列N中。然后计算N中的每个对象,对每个对象执行相同的操作。如果对象对象附近不密集,则将其标记为离群点,不再处理。
2. OPTICS:通过点排序识别聚类结构
3. DENCLUE;基于密度分布函数的聚类
(4) 基于网格的方法
基于网格的方法把对象空间量化为有限个单元,形成一个网络结构。所有的聚类操作都在这个网络结构上进行。这种方法的主要优点是处理速度很快,其处理时间通常独立于数据对象的个数,而仅依赖于量化空间中每一维度的单元数。