概况:
数据挖掘对聚类算法的要求:可伸缩性(在小数据集上算法优,同样要求在大数据集上算法优)、处理不同类型数据的能力、发现任意形状簇的能力、输入参数的领域知识最小化、处理噪声数据的能力、对输入数据顺序的敏感、可解释性和可用性、基于约束的聚类、处理高维数据的能力。
聚类方法的分类:
基于划分的方法:构建数据集的k个划分,每个划分表示一个聚类(每个划分至少包含一个对象、每个对象只属于一个划分(可相应变动))。基于划分的方法为了达到全局的最优,可能要穷举所有的可能化分,这种算法时间复杂度太大。因此采用两种比较流行的启发式算法kmeans(每个簇用该簇中的平均值代替)kmedoids(每个簇用最接近中心的一个对象来表示)这些算法在小规模数据的应用上达到了一个很好的效果
层次方法:将数据对象组成一棵聚类树(凝聚层次和分裂层次)凝聚层次聚类和分裂层次聚类一个是自底向上合并相近的对象或者组,直到所有的组合合并为1个或者达到一个终止条件。分裂层次聚类就是一个相反的过程。层次聚类算法的缺陷在于:一旦一个步骤执行完毕,就不可以被撤销。话外之意就是不能改正错误的决定。目前对于层次聚类算法提出了些改进的算法。层次聚类代表算法:BIRCH、CURE、ROCK算法
基于密度的算法:绝大部分划分的方法都是基于对象之间的距离大小进行划分。这些方法能够发现球状的簇,而在检测任意形状的簇上遇到了困难。就出现了基于密度的算法。主要思想:只要邻近区域的密度超过某个阀值就继续聚类,DBSCAN是一种具有代表性的基于密度的聚类算法
基于图的聚类算法:基于图的聚类算法,利用了图的许多重要的性质和特性。代表算法chameleon和SNN
基于模型的方法:试图将给定数据与某个数学模型达成最佳的拟合。代表算法EM算法
基于划分的聚类算法:
基本k-means聚类算法:
算法流程:首先选择k个对象,每个对象代表一个簇的初始均值或者中心;对剩余的每一个对象,根据其与各个簇中心的距离,将它指派到最近的簇,然后计算每个簇的新的均值,得到更新后的簇的中心;不断的重复,知道准则函数收敛。(准则函数一般采用平方误差)
算法k-means
输入:数据集D,划分簇的个数K
输出:k个簇的集合
*从数据集D中任意选择k个对象作为初始簇的中心
*repeat
for 数据集D中每个对象P do
计算对象P到K个簇中心的距离,将P指派到与其距离最近的簇
end for
计算每个簇中的对象的均值,更新簇的中心
until 簇的中心不再发生变化
k-means算法通常采用误差平方和作为衡量聚类质量的目标函数
k-means的优点:描述容易、实现简单、快速
k-means的缺点:算法中的k需要预先给定、算法对初始值的依赖很大(选择不同的k值,会产生不同的结果)、当数据集很大的时候,算法的开销很大、算法对噪声点和离群点十分敏感,k-means算法只能发现球形的簇,算法只能用来处理数值型属性
二分k-means算法:
思想:为了得到k个簇,将所有点的集合分裂成两个簇,从中选择一个继续分裂,如此重复直到产生k个簇为止
算法:二分k-means
输入:数据集D、划分簇的个数k,每一次二分实验的次数m
*初始化簇表,最初的簇表只包含一个包含所有样本组成的簇
repeat
按照某种方法从中选择一个簇
进行m次二分实验
使用基本的k-means对其进行聚类,划分成为两个子簇
从这m次二分实验中选择两个SSE总和最小的簇,将这两个簇加入到簇表中
until 簇表中包含K个簇为止
k-means算法的扩展:
k-means中距离的计算时基于数值型的数据,没有明确分类型的数据进行如何的操作。在k-means算法中对分类属性的处理一般有3种:将分类型的属性转化为数值型的属性。例如变量x有类别a,b,c,那么就采用三个数值共同表示,当x为a类别表示为100。采用适用于纯分类型变量的k-modes或者适用于混合属性的k-prototypes算法。其中k-modes采用众数来代替基本k-means中的均值。两者结合在一起就形成了k-prototypes算法。第三种是采用k-summary算法
k-medoids算法:
思想:不和基本k-means算法类似采用均值当中簇的中心,它采用距离中心最近的一个对象作为簇的中心
算法的基本过程:首先为每个簇随机选择一个代表对象,其余数据对象根据与代表对象的距离大小划分到最近的一个簇中,然后反复的用非代表对象代替代表对象,以改进聚类的质量。聚类的质量用一个代价函数来估算,如果替换后的平方误差减去替换前的平方误差,为负值的时候则进行替换,否则就不进行替换
算法:k-medoids
输入:数据集D,划分簇的个数k
输出:k的任意的集合
选择k个不同的对象作为初始质心
repeat
把剩余对象按照距离划分到最近的簇中
计算选择一个非中心对象s代替一个中心对象的代价s,如果s<0则进行替换,形成新的k个中心
until k个中心不再发生变化
层次聚类算法:凝聚层次和分裂层次(思想比较简单)
改进的层次聚类算法:BIRCH算法(层次聚类算法和其他聚类算法的结合,层次聚类算法用于初始微聚类,其他方法用于后续的宏聚类)克服了凝聚聚类算法的不可伸缩和不可撤销的缺点。另外BIRCH算法采用CF和CF-Tree来节省I\O和内存开销、其核心是聚类特征CF和聚类特征树
一个聚类特征CF为一个三元组(N,LS,SS)N为结点的个数,LS为结点的线性和,SS为数据的平方和。CF满足可加性
CF-tree是一个高度平衡树,具有两个参数分支因子和阀值T(分支因子包含非叶子结点的最大条目数和叶子结点的最大条目数)树的结构类似与B+树
CF-tree的构造过程:
从根结点开始递归往下,计算当前条目与要插入的数据点的距离,寻找最小距离的那个路径,直到找到与该结点最接近的叶子结点
比较计算出的距离是否小于阀值T,如果小于则直接吸收,否则执行下面步骤
判断当前条目所在的叶子结点个数是否小于L,如果是,则插入,否则分裂该叶子结点。
BIRCH算法分为四个阶段:扫描数据集,根据给定的初始阀值T建立一个聚类特征树,通过提升阀值T重建CF树,第三四阶段利用全局聚类函数,对已有的CF树进行聚类,来获取更好的结果。
CURE算法:通过多个代表点来表示一个簇,提高算法对任意簇的能力。
CURE算法思想:采用凝聚聚类,在最开始的时候,每个对象属于独立的簇。然后从最相似的对象进行合并,为了能够处理大数据,CURE采用随机抽样和分割的技术来降低数据的量。CURE采用多个对象代表一个簇,并通过收缩因子来调整簇的形状。消除异常值的影响(分两个阶段完成,刚开始进行最相似对象合并,由于异常值的距离很大,所以其所在的类的结点数量增长很慢,接下来在聚类快要结束的时候,将增长慢的簇 当中异常值去掉)。CURE聚类完成后只包含样本的数据,之后还得采取某种策略将非样本的数据加入到聚类中
算法:CURE
输入:数据集D
输出:簇的集合
从源数据集D中抽取随机样本S
将样本S划分成大小相等的分组
对每个划分进行局部聚类
去除孤立点
对局部的簇进行聚类,落在新形成的簇中的代表点根据用户定义的一个收缩因子,向簇中心移动
用相应的簇标记来标记数据
ROCK算法:很多算法都是应用于数值型的数据,聚类依据为数据之间的距离。不能很好的应用于分类型数据。ROCK算法针对具有分类属性的数据使用链接(两个对象之间的共同的近邻数目)这一个概念
算法:ROCK
输入:数据集D
输出:簇的集合
随机选择一个样本
在样本上用凝聚算法进行聚类,簇的合并是基于簇间的相似度进行(即来自不同簇而有相同邻居的样本数目)
将剩余的每个数据根据它与每个簇之间的连接,判断它应该归属的簇
基于密度的聚类算法(DBSCAN算法):
DBSCAN算法涉及的一些概念:EPs领域:给定对象半径内的领域称为该对象的Eps领域。MinPts:给定领域内包含点的最小数目;核心对象:如果对象的领域内至少包含了minPts个点,那么就称这个对象为核心对象。边界点:不是核心对象,但是落在某个核心对象的领域内,噪声点;密度可达还有密度相连
算法:DBSCAN
输入:数据集D,参数MinPts和Eps
输出:簇的集合
首先将数据集D中所有的对象标志为未处理状态
for 数据集中的每个对象p do
if 对象p已经归纳到某个簇或者已经标记为噪声点 continue;
else 检查对象p的领域;如果领域中包含的对象的个数小于minpts 标记对象p为边界点或者噪声点
else 建立新的簇,将对象p标记为核心点,将领域内的结点归入C类
for 领域中的未处理对象,求其领域,若领域中的结点未归类,将其归为C类
end
基于图的聚类算法:
chameleon聚类算法:
关键:确定合并哪两个簇(用相对互连度和相对紧密度度量)
chameleon算法的三个关键步骤:稀疏化、图划分、子图合并
步骤:
构建稀疏图:由数据集构造成k-最邻近图集合G
多层图划分:通过一个多层图划分算法,将图G划分成大量的子图,每个子图代表一个簇
合并子图:合并关于相对互联度和相对紧密度而言
重复上一步直到没有子图可以合并。
基于SNN的聚类算法:
SNN即计算共享最近邻相似度
找出所有点的k最近邻
如果x和y不是相互在对方的最近邻中 then Similarity(x,y)=0;
else Similarity(x,y)=共享最近邻个数
end
基于SNN的聚类算法:
构造SNN相似度矩阵
进行最近k邻居的稀疏处理(根据某个阀值)并依此构造出最近邻居图,使得具有较强连接的样本之间有链接
统计出所有样本的链接强度,依此来确定核心点和噪声点
最后将剩下的点聚类
另外SNN也可以和DBSCAN相结合
一趟聚类算法:
1,初始时,簇集合为空,读入一个新的对象
2,以这个对象构造一个新的簇
3,读入一个新的对象,计算对象与当前簇的距离,选择最小的距离
4,若最小距离大于阀值,则转到2,否则将其并入那个簇。
5,更新簇的质心
(注意阀值的选择策略,对聚类的结果影响相当明显)
基于模型的聚类算法(EM算法):
对参数向量做初始估计:包括随机选择k个对象代表簇的中心以及估计其他参数
按照下面两个步骤反复求精参数:
期望步:计算每个对象指派到类Ci的概率
最大化步:利用上一步得到的概率重新估计模型的参数
聚类的评价指标:
内部评价标准:主要通过计算内部的平均相似度簇间的平均相似度以及整体的平均相似度。理想的距离结果最小的簇内距离和最大的簇间距离。因此很多的距离评价标准都采用簇内和簇外的距离的比值来衡量
外部评价标准:已经存在一个人工分类的数据集,让聚类的结果与其进行比较。