- 聚类分析是将数据划分成有用的簇,如果目标是划分有用的组,则簇应当体现数据的自然结构;聚类分析只是解决问题的起点
- 聚类的目的:
- 用于理解的聚类:在对世界的分析和描述中,人类擅长将对象划分为簇,例如
- 生物学:界门纲目科属种
- 信息检索:面对网页的搜索结果,聚类将其分成若干簇,每个簇获取某个特定的方面
- 气候
- 医学
- 商业:利用顾客的信息将其分组
- 实用的聚类:聚类分析提供由个别数据对象到数据对象所指派的簇的抽象;发现最具代表性的簇原型的技术:
- 汇总:其他数据分析技术都具有更高的复杂度,对于大型数据集,可以将算法用于仅包含簇原型的数据集,汇总的结果能和使用所有数据的结果相近
- 压缩:每个对象用它所在簇的原型的索引表示,即向量量化,常用于图象、声音和视频数据,这些数据的特点:
- 数据对象之间高度相似
- 某些信息丢失是可以接受的
- 希望大幅压缩数据量
- 有效的发现最近邻:找出最近邻需要所有点对点之间的距离,如果一个对象接近簇原型,可以用簇原型减少计算,其中两个簇的邻近性用其原型之间的距离度量
- 用于理解的聚类:在对世界的分析和描述中,人类擅长将对象划分为簇,例如
- 概述:
- 什么是聚类分析:聚类分析仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组,组内对象相互之间是相似的(相关的),不同组的对象是不同的(不相关的);组内的相似性(同质性)越大,组间差别越大,聚类越好;聚类分析是一种非监督分类,只能从现有数据中导出类标号,类标号都是未知的(一般数据挖掘中的分类即监督分类,不是聚类)
- 不同的聚类类型:
- 划分聚类:简单的将数据对象集划分成不重叠的子集,使每个对象恰在一个子集中
- 层次聚类:嵌套簇的集群;层次聚类可以看作划分聚类的序列,划分聚类可以通过在一个特定层剪断层次树得到
- 互斥的:每个对象都能指派到单个簇
- 重叠的(非互斥的):一个对象同时属于多个类的事实;将一个对象放在两个簇中同样好
- 模糊聚类:每个对象对于每个簇都有一个隶属权值(0~1),概率聚类技术计算每个点属于每个簇的概率,且这些概率的和必为1(对于1个对象而言);模糊聚类不是一个真正解决多类问题的技术,这种方法适用于避免将一个对象随意指派到一个簇的情况;实际中,将对象指派到最高权值的簇,转化为互斥聚类
- 完全聚类:将每个对象指派到一个簇
- 部分聚类:数据集中某些对象可能不属于明确定义的簇(可能是噪声、离群点)
- 不同的簇的类型:
- 明显分离的:每个点到同簇中每个点的距离比到不同簇中任意点的距离更近;有时,使用一个阈值来说明簇中所有对象相互之间必须充分接近
- 基于原型的:每个对象到定义该簇的原型的距离比到其他簇的原型的距离更近;对于具有连续属性的数据,簇的原型是质心,即簇中所有点的平均值;而具有分类属性的数据,原型是中心点,即簇中最有代表性的点;所以,原型可以看作是最靠近中心的点,基于原型的簇即基于中心的簇,这种簇趋向于呈球状
- 基于图的:数据如果用图表示,簇可以定义为连通分支,即互相连通但不与组外对象连通的对象组,其中一个重要例子:
- 基于邻近的簇:当两个对象的距离在指定范围之内,这两个对象是连通的;一个簇中的对象到另一个簇的任意对象的距离比到不同簇中的距离更近
- 团:图中相互之间完全连接的结点的集合
- 基于密度的:簇是对象的稠密区域,被低密度的区域环绕;当簇不规则或相互盘绕,并且有噪声和离群点时,使用基于密度的簇定义
- 共同性质的(概念簇):有某种共同性质的对象的集合
- K均值:基于原型的、划分的聚类技术,k均值用质心定义原型,其中质心是一组点的均值,用于n为连续空间中的对象;k中心点使用中心点定义原型,其中中心点是一组点中最具有代表性的点,可用于广泛的数据;两者的区别是k均值不需要是实际的数据点,而中心点必须是实际数据点
- 基本k均值算法:
- 步骤
- 选择k个初始质心,即期望的簇的个数
- 每个点指派到最近的质心,而指派到质心的点集成为一个簇
- 根据指派到簇的点,更新每个簇的质心
- 重复指派和更新步骤,直到簇不发生变化或质心不发生变化
- 对于邻近性函数和质心类型的某些组合,k均值总是收敛到一个解,即簇中的所有点不会转移到别的簇,但大部分收敛发生在早期阶段,因此结束条件可以改为:直到仅有1%的点改变簇
- 指派点到最近的质心:用邻近性度量来量化数据之间的距离,欧几里得距离和文档的余弦相关性;二分k均值是一种通过减少相似度计算量来加快k均值速度的方法
- 质心和目标函数:重新计算每个簇的质心,而质心随数据邻近性度量和聚类目标不同而改变,聚类的目标即目标函数,依赖于数据点之间的邻近性度量,下面是数学上的讨论:
- 欧几里得空间中的数据:邻近性度量为欧几里得距离的数据,用误差平方和SSE作为度量聚类质量的目标函数,给定两次运行k均值产生的不同的簇集,SSE越小越好,说明聚类的质心能更好地代表簇中的点,而使簇的SSE最小的质心是均值;然而点指派到簇和重新计算质心只能确保找到关于SSE的局部最优,因为这是对选定的质心和簇而不是对所有的可能来优化SSE
- 文档数据:邻近性度量为余弦相关性,目标是最大化簇中文档与簇的质心的相似性,即凝聚度,簇的质心是均值
- 一般情况:Bregman散度是一类邻近性度量,更一般的质心是均值;以余弦相似度或欧几里得距离为邻近性度量的k均值算法是基于Bregman散度的一般聚类算法的特例
- 选择初始质心:随机的选择质心往往得到的结果不是很好;处理选择初始质心问题的方法:
- 多次运行,每次选择一组不同的随机初始质心,然后选取最小的全局SSE的簇集;但初始质心的问题即使重复运行多次也不能克服
- 对一个样本使用层次聚类技术,从层次聚类中提取k个簇,将这些簇的质心作为初始质心,仅特殊情况有效:
- 样本较小,数百到数千
- k相对于样本大小较小
- 随机选择一个点或者对所有点的质心作为第一个点,对于每个后继初始质心,选择离已经选取过的初始质心最远的点作为后继初始质心,确保初始质心不仅是随机的也是散开的;然而可能选中离群点,此外随着初始质心的增加,在计算出一个后继初始质心的开销大;通常用于点样本(从数据中抽取一部分点为样本)
- 时间和空间复杂度:迭代次数通常很小且是有界的,只要簇个数k显著小于数据点数,k均值的计算时间与数据点数线性相关,并且是有效且简单的
- 步骤
- 基本k均值算法:
- k均值:附加的问题:
- 处理空簇:所有点在指派簇时,某个簇都未被分配,即空簇,需要替补质心,解决方法2个:
- 选择一个距离当前任何质心最远的点
- 从具有最大SSE的簇中选择一个替补质心
- 离群点:使用平方误差标准时,离群点可能过度影响所发现的簇;可以提前删除,或者在后处理中识别离群点:可以记录每个点对簇的SSE的影响;有些很小的簇也可能是离群点
- 用后处理降低SSE:一种明显降低SSE的方法是找出更多的簇;但实际上k的个数不能增加,所以要对结果簇进行修补,产生较小SSE的聚类;策略是关注每一个簇,交替的使用簇合并和簇分裂,从而改变总SSE,
- 增加簇来降低总SSE的2种策略:
- 分裂一个簇:选择最大SSE的簇,或者在特定属性上有最大标准差的簇
- 引进一个新的质心:选择离所有簇质心最远的点,或者从具有最大SSE的点中随机选择
- 减少簇个数来降低总SSE的2种策略:
- 拆散一个簇:删除簇的对应质心,将簇中的点重新指派到其他簇,理想状况下是使总SSE增加最少的簇
- 合并两个簇:选择质心最接近的两个簇(质心法),或者合并两个导致总SSE增加最少的簇(Ward方法),这两种合并策略与层次聚类使用的方法相同
- 增加簇来降低总SSE的2种策略:
- 增量的更新质心:可以在点到簇的每次指派后,增量地更新质心;缺点是导致次序依赖性
- 处理空簇:所有点在指派簇时,某个簇都未被分配,即空簇,需要替补质心,解决方法2个:
- 二分k均值:为了得到k个簇,将所有点的集合分裂为两个簇,从这些簇中选取一个继续二分,直到有k个簇;待分裂的簇有多种选择:点最多的簇、最大SSE的簇、两者结合标准;通常使用结果簇的质心作为基本k均值的初始质心;二分k均值不太受初始化质心的困扰,因为执行多次二分试验且选取最小SSE的试验结果,每步只有两个质心;二分产生的聚类序列可以产生层次聚类
- k均值和不同簇类型:在空间中,k均值的目标函数一般是最小化等尺寸、等密度的球形簇,或者明显分离的簇,其他簇类型不匹配,或者增加k,较小的簇则是纯的
- k均值的优缺点:k均值简单有效、适用于大部分数据类型,二分k也不太受初始化影响;缺点是,不能处理非球形簇、不同尺寸不同密度的簇(可以增加k的量),对包含离群点的数据集进行聚类时k均值也有问题,最后k均值仅限于具有质心的数据
- k均值的优化问题(解释k均值为何是均值为质心的数学验证):为了找到全局最优的解,穷举是不可能的,可以用梯度下降的技术选择初始解,然后重复:计算最好的优化目标函数的解的改变,然后更新解:看书