将物理或抽象对象的集合分组成为由类似的对象组成的多个类的过程被称为聚类。由聚类所生 成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。
聚类属于无监督学习(unsupervised learning),也就意味着它不依赖于预先定义的类和训练样本。所以聚类是通过观察学习,而不是通过例子学习。
数据挖掘对聚类的典型要求如下:
为了实现度量值的标准化,一种方法是将原来的度量值转 换为无单位的值。给定一个变量 f 的度量值,可以进行如下的变换:
这里的 x1f,…,xnf 是 f 的 n 个度量值,mf 是 f 的平均值
对数据进行标准化的处理之后,下面要计算对象间的相异度,而对象间的相异度是基于对象间的距离来计算的。
欧几里得距离(Euclidean distance):
以上两种距离度量方法均满足:
**明考斯基距离(Minkowski distance)**是欧几里得距离和曼哈顿距离的概化:
q=1就是曼哈顿距离,q=2就是欧几里得距离
一个二元变量只有两个状态:0 或 1,0 表示该变量为空,1 表示该变量存在。
如何计算二元变量的相似度呢?
如果假设所有的二元变量有相同的权重,我们得到一个两行两列的可能性表。在表中,a 是对象 i 和 j 值都为 1 的变量的数目,b 是在对象 i 中值为 1,在对象 j 中值为 0 的变量的数目,c 是 在对象 i 中值为 0,在对象 j 中值为 1 的变量的数目,d 是在对象 i 和 j 中值都为 0 的变量的数目。变量的总数是 p=a+b+c+d
对称的二元变量和不对称的二元变量之间的区别是什么?
如果它的两个状态有相同的权重, 那么该二元变量是对称的,也就是两个取值 0 或 1 没有优先权。如果两个状态的输出不是同样重要,那么该二元变量是不对称的。例
对称的二元变量距离测量:
非对称二元变量的距离测量:
d(jack,mary)=(0+1)/(2+0+1)=0.33
d(jack,jim)=(1+1)/(1+1+1)=0.67
d(jim,mary)=(1+2)/(1+1+2)=0.75
这意味着jim和mary不可能有相似的疾病,因为他们有着最高的相异度,在这三个病人中,jack和mary最可能有类似疾病。
标称变量是二元变量的推广,它可以具有多于两个的状态值。
如何计算标称变量所描述的对象之间的相异度?
这里的p是全部变量的数目,m是匹配数目(i和j取值相同的变量数目)
一个离散的序数型变量类似于标称变量,除了序数型变量的 M 个状态是以有意义的序列排序的。一个序数型变量的值可以映射为排序。
如何计算序数型变量所描述的对象之间的相异度?
如何计算用比例标度型变量描述的对象之间的相异度?
采用与处理区间标度变量同样的方法。但是,这种作法通常不是一个好的选择,因为刻度 可能被扭曲了。
对比例标度型变量进行对数变换
后两种方法比较有效
在许多真实的数据库中,对象是被混合类型的变量描述的。一般来说,一个数据库可能包含上 面列出的全部六种类型(区间标度变量, 对称二元变量,不对称二元变量,标称变量,序数型变量,比例标度型变量)。
那么,我们怎样计算用混合类型变量描述的对象之间的相异度?
是将所有的变量一起处理,只进行一次聚类分析。一种技术将不同类型的变 量组合在单个相异度矩阵中,把所有有意义的变量转换到共同的值域区间[0.0, 1.0]上。
待解
划分方法(partitioning methods):
给定一个 n 个对象或元组的数据库,一个划分方法构建数据的 k 个划分,每个划分表示一个聚类,并且 k<=n。也就是说,它将数据划分为 k 个组,同时满足如下的 要求:
(1)每个组至少包含一个对象;
(2)每个对象必须属于且只属于一个组。
层次的方法(hierarchical methods):层次的方法对给定数据集合进行层次的分解。根据层次的分解 如何形成,层次的方法可以被分为凝聚的或分裂的方法。凝聚的方法,也称为自底向上的方法,一 开始将每个对象作为单独的一个组,然后继续地合并相近的对象或组,直到所有的组合并为一个(层 次的最上层),或者达到一个终止条件。分裂的方法,也称为自顶向下的方法,一开始将所有的对 象置于一个簇中。在迭代的每一步中,一个簇被分裂为更小的簇,直到最终每个对象在单独的一个 簇中,或者达到一个终止条件。
基于密度的方法:绝大多数划分方法基于对象之间的距离进行聚类。这样的方法只能发现球状的簇, 而在发现任意形状的簇上遇到了困难。随之提出了基于密度的另一类聚类方法,其主要思想是:只 要临近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类。也就是说,对给定类中的 每个数据点,在一个给定范围的区域中必须包含至少某个数目的点。这样的方法可以用来过滤“噪 音”数据,发现任意形状的簇。
基于网格的方法:基于网格的方法把对象空间量化为有限数目的单元,形成了 一个网格结构。所有的聚类操作都在这个网格结构(即量化的空间)上进行。这种方法的主要优点 是它的处理速度很快,其处理时间独立于数据对象的数目,只与量化空间中每一维的单元数目有关。
基于模型的方法:基于模型的方法为每个簇假定了一个模型,寻找数据对给定模型的最佳匹配。一个基于模型的算法可能通过构建反映数据点空间分布的密度函数来定位聚类。它也基于标准的统计数字自动决定聚类的数目,考虑“噪音”数据和孤立点,从而产生健壮的 聚类方法。
k-means算法
输入:簇的数目k和包含n个对象的数据库
输出:k个簇,使平方误差最小
缺点:
k-methods算法
此方法修改了k-means算法对异常值的敏感性。不采用簇中对象的平均值作为参 照点,可以选用簇中位置最中心的对象,即 medoid。这样划分方法仍然是基于最小化所有对象与其 参照点之间的相异度之和的原则来执行的。
一个层次的聚类方法将数据对象组成一棵聚类的树。根据层次分解是自底向上,还是自顶向下形成,层次的聚类方法可以进一步分为凝聚(agglomerative)和分裂(divisive)层次聚类。
一个纯粹的层次聚类方法的聚类质量受限于如下特点:一旦一个合并或分裂被执行,就不能修正。
凝聚的层次聚类:这种自底向上的策略首先将每个对象作为一个簇,然后合并这些原子簇 为越来越大的簇,直到所有的对象都在一个簇中,或者某个终结条件被满足。绝大多数层 次聚类方法属于这一类,它们只是在簇间相似度的定义上有所不同。
分裂的层次聚类:这种自顶向下的策略与凝聚的层次聚类不同,它首先将所有对象置于一 个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终结条 件,例如达到了某个希望的簇数目,或者两个最近的簇之间的距离超过了某个阈值。
它克服了凝聚聚类方法的两个困难:
BIRCH 使用聚类特征来概括一个簇,使用聚类特征树(CF-树)来表示聚类的层次结构。
考虑一个n个d维的数据对象或点的簇。簇的聚类特征(Clustering Feature,CF)是一个3 维向量,汇总了对象簇的信息,定义如下:
CF-树是一个高度平衡的树,它存储了层次聚类的聚类特征。
BIRCH采用了一种多阶段聚类技术:数据集的单遍扫描产生一个基本好的聚类,而一或多遍的额外扫描可以进一步地改进聚类质量。主要有两个阶段:
CURE 采用了一种新的层 次聚类算法,该算法选择了位于基于质心和基于代表对象方法之间的中间策略。它不用单个质心或 对象来代表一个簇,而是选择了数据空间中固定数目的具有代表性的点。
CURE算法核心:
为了发现任意形状的聚类结果,提出了基于密度的聚类方法。这类方法将簇看作是数据空间中 由低密度区域分割开的高密度对象区域。
主要特点:
两个参数:
如果一个对象的ε–邻域至少包含最小数目 MinPts 的对象,那么该对象称为核心对象。
给定一个对象集合 D,如果 p 是在 q 的ε–邻域内,而 q 是一个核心对象,我们说对象 p 从对象 q 出发是直接密度可达的
如果存在一个对象链 p1,p2,…,pn,p1=q, pn=p,对 pi∈ D,1≤i≤n,pi+1 是从 pi 关于ε和 MinPts 直接密度可达的,则对象 p 是从对象 q 关于ε和 MinPts 密度可达的(density-reachable)。
如果对象集合 D 中存在一个对象 o,使得对象 p 和 q 是从 o 关于ε和 MinPts 密度可达的,那么 对象 p 和 q 是关于ε和 MinPts 密度相连的(density-connected)
输入:
- D:一个包含n个对象的数据集
- ε:半径参数
- MinPts:邻域密度阈值
输出:基于密度的簇集合
基于网格的聚类方法采用一个多分辨率的网格数据结构。它将空间量化为有限数目的单元,这些单元形成了网格结构,所有的聚类操作都在网格上进行。这种方法的主要优点是处理速度快,其处理时间独立于数据对象的数目,仅依赖于量化空间中每一维上的单元数目。
统计查询方法:
特点:
孤立点是什么?
经常存在一些数据对象,它们不符合数据的一般模型。这样的数据对象被 称为孤立点,它们与数据的其它部分不同或不一致。孤立点可能是度量或执行错误所导致的。孤立点本身可能是非常重要的。
统计的方法对给定的数据集合假设了一个分布或概率模型(例如一个正态分布),然后根据模 型采用不一致性检验(discordancy test)来确定孤立点。该检验要求数据集参数(例如假设的数据分布),分布参数(例如平均值和方差),和预期的孤立点的数目。
不一致性检测依赖于:
缺点:
如果至少数据集合 S 中对象的 p 部分与对象 o 的距离大于 d, 对象 o 是一个基于距离的带参数 p 和 d 的孤立点,即 DB(p,d)。换句话说,不依赖于统计检验,我 们可以将基于距离的孤立点看作是那些没有足够邻居的对象,这里的邻居是基于距给定对象的距离 来定义的。与基于统计的方法相比,基于距离的孤立点探测归纳了多个标准分布的不一致性检验的 思想。基于距离的孤立点探测避免了过多的计算,而大量的计算正是使观察到的分布适合某个标准分布,及选择不一致性检验所需要的。
基于索引的算法:
给定一个数据集合,基于索引的算法采用多维索引结构,例如 R 树或 k-d 树, 来查找每个对象 o 在半径 d 范围内的邻居。设 M 是一个孤立点的 d 邻域内的最大对象数目。因此, 一旦对象 o 的 M+1 个邻居被发现,o 就不是 孤立点。
这个算法在最坏情况下的复杂度为 O(k*n2 ), 这里 k 是维数,n 是数据集合中对象的数目。
缺点:复杂度估算只考虑了搜索时间,即使建造索引的任务本身就是计算密集的。
基于单元的算法:
为了避免 O(n2 )的计算复杂度,为驻留内存的数据集合开发了基于单元 的算法。它的复杂度是 O(ck +n),这里 c 是依赖于单元数目的常数,k 是维数。
异常值检测:
它通过检查一组对象的主要特征来确定孤立点。与给出的描述偏离的对象 被认为是孤立点。
序列异常技术:模仿了人类从一系列推测类似的对象中识别异常对象的方式