介绍基于划分的聚类方法
给定n个对象的集合,将对象划分成K个簇。每个簇至少包含一个对象。
K-Means伪代码
输入:k:簇的数目
D: 包含n个对象的数据集
输出:k个簇的集合
方法:
(1) 从D中任意选择K个对象作为初始簇的中心。
(2) repeat
a) 根据簇中对象的均值,将每个对象分配到最相似的簇。
b) 更新簇的均值,计算每个簇中对象的均值。
until 每个簇的对象情况不再发生变化
介绍基于层次的聚类方法
有两种基于层次的聚类方法,层次聚类可以是凝聚的或者是分裂的。
凝聚是自底向上的聚类,每个对象形成自己的簇开始,迭代地把簇合成越来越大的簇。直到所有对象合并到统一个簇之中,或者满足相应的条件为止。
分裂的层次聚类方法使用的是自顶向下的策略,从把所有对象置于一个簇之中开始,把根上的簇划分成多个较小的子簇,并且递归的把这些粗划分成更小的簇。知道最低层的簇足够凝聚为止。
基于密度的聚类方法
不同于基于层次的和基于划分的只能生成球状簇,基于密度的方法能识别任意形状的簇。
DBSCAN
邻域的密度可以简单地用邻域类的对象数量度量。
介绍基于网格的聚类方法
这种方法,把输入空间划分成独立于输入对象的分布的单元。
- STING : 基于网络的多分辨率的聚类技术。
- CLIQUE:基于网格和密度的聚类方法。
STING
基于网格的多分辨率的聚类技术,将输入对象的空间区域划分成矩形单元。每个网格单元的属性的统计星系(均值,最大值)等被作为参数预先计算和存储。
优点:
- 基于网格的计算是独立于查询的。
- 网格结构有利于并行处理和增量更新
- 效率高。
CLIQUE
如果数据对象的属性的值差异很大,可鞥很难在整个数据空间之中找出簇。这种情况下,在数据的不同自空间之中搜索簇可能更有意义。
CLIQUE 是一种简单的基于网格的聚类方法,用于发现子空间之中基于密度的簇。它把每个维划分成不重叠的区间,从而把数据对象的整个嵌入空间划分成单元。使用一个密度阈值识别稠密但愿和稀疏单元。
一个k-维单元c至少有l个点,仅当c的每个(k-1)-维投影至少有l个点。
具体工作过程如下:
- COLQUE把d-维数据空间划分成若干个互不重叠的矩形单元,并且从中识别出稠密单元。CLIQUE把每个维度都划分成区间,并识别至少包含l个点的区间。l是密度阈值。
- 迭代的连接子空间的稠密但愿。连接操作产生空间中的k+1为款候选单元。检查c中的点数是否满足密度阈值。
- 使用最大区域来覆盖连接的稠密单元。采用的是一种贪心算法。
聚类评估
- 估计聚类趋势。
- 确定数据集之中的簇数。
- 测定聚类的质量。
10.4K-Means++ 算法
这个算法和K-Means的主要区别在于初始中心的选择问题。
首先随机选择k个中心,随后迭代,对每个维被选中为中心的对象p,选择一个座位新的中心,该对象以正比于dist(p)^2的概率随机选取。dist(p) 是p到已经选定的最近中心的距离。这个方法能够加快k-均值的收敛速度,能保证最终聚类结果的质量。
原因是这种方法能够保证初始聚类的中心尽可能的远。
- 从输入的数据点集合中随机选择一个点作为第一个聚类中心
- 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
- 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
- 重复2和3直到k个聚类中心被选出来
- 利用这k个初始的聚类中心来运行标准的k-means算法