数据挖掘(七)聚类

聚类分析:基本概念

假设一种策略可以有效的反应顾客之间的关系,我们想组织公司所有的客户到不同的组中,要求:

  • 在相同组中的顾客是尽可能相似的;
  • 在不同组中的顾客是尽可能不相似的;
  • 不同于分类(classification),每个顾客的类别是位未知的;
  • 这些组是自动被发现的

在上述情况下,这些组称之为簇,上述策略可以利用聚类(Clustering)分析。

什么是聚类分析

  • 簇(cluster):数据对象的集合
    相似的(或者相关的)在相同的组中;
    不相似的(或者不相关的)在不同的组中
  • 聚类分析(聚类,数据分割等)
    根据特征寻找数据对象之间的相似性并将相似的数据对象分组到簇(clusters)中。
    聚类分析就是一种寻找数据之间内在结构的技术。聚类把全体数据实例组织成一些相似组,而这些相似组被称作簇。处于相同簇中的数据实例彼此相同,处于不同簇中的实例彼此不同。
  • 聚类技术通常又被称为无监督学习,没有预先定义的类别
    与分类中的监督学习不同的是,在簇中那些表示数据类别的分类或者分组信息是没有的,是需要通过发现来学习的
    在面对同一种数据集的时候,不同的聚类技术可能生成不同的簇。
  • 典型的应用
    可以作为了解数据分布的工具;
    可以作为其他算法的预处理步骤(例如,特征选择)

数据分析和应用中的聚类

  • 生物学:生物的分类
  • 信息检索:文档聚类
  • 土地利用:在地球观测数据库中确定类似土地利用的区域
  • 市场营销:帮助市场营销人员发现其客户群中的不同群体,然后利用学习的知识来开发有针对性的市场营销计划
  • 城市规划:根据房屋类型,价值和地理位置识别房不同的组的房租
  • 地震研究:应将观测到的地震震中沿大陆断层聚集
  • 气候:了解地球气候,寻找大气和海洋的模式
  • 经济科学:市场研究

聚类作为预处理工具(实用程序)

  • 总结:回归,PCA,分类和关联分析的预处理
  • 压缩:图像处理:矢量量化
  • 寻找K个最近的对象,将搜索本地化到一个或少数几个簇
  • 离群值检测:离群值通常被视为远离任何离群值的簇

衡量聚集的质量

什么是好的聚类?

  • 好的聚类方法将产生高质量的聚类
    集群内高度相似:集群内具有凝聚力(cohesive
    集群间相似性低:集群之间有区别(distinctive

  • 聚类方法的质量取决于
    该方法使用的相似性度量;
    该方法的实施;
    它发现某些或所有隐藏模式的能力

如何衡量聚集的质量?

  • 差异/相似度指标
    相似性以距离函数(通常为度量)表示: d ( i , j ) d(i,j) d(i,j)
    距离函数(distance functions)的定义通常取决于特征类型(例如,区间缩放,布尔值,分类,有序)
    权重应基于应用程序和数据语义与不同的变量关联
  • 聚集的质量
    有一个单独的“质量”功能可衡量集群的“良性”;
    很难定义“足够相似”或“足够好”,通常是主观的。

聚类分析的注意事项

  • 分区标准
    单一级别,所有集群都处于同一级别(例如,客户集群);
    或者多级分区,集群处于不同的语义级别(例如,文档集群)

  • 集群分离
    独占(例如,客户仅属于一个组);
    和非独占(例如,文档属于多个主题)

  • 相似度
    基于距离(例如,欧式空间,矢量);
    与基于连接性(例如,邻接密度)

  • 集群空间
    群集整个数据空间(适用于低维数据);
    与聚类子空间(在高维数据中有用)

要求与挑战

  • 可扩展性Scalability::将大型数据集聚类
  • 能够处理不同类型的特征:数字,二进制,分类,序数,链接以及这些的混合
  • 基于约束的聚类Constraint based clustering:用户可以输入约束条件
  • 可解释性和可用性可解释性和可用性:聚类结果是可解释的,可理解的和可用的
  • 发现具有任意形状arbitrary shape的簇,而不是找到大小相似的球形簇,发现任意簇
  • 处理嘈杂数据noisy data的能力:现实世界中的数据通常都是嘈杂的,并且聚类方法必须对噪声具有耐性
  • 增量聚类和对输入顺序不敏感:在许多应用中,新数据可能随时到
  • 高维度High dimensionality::现实世界中的数据通常是高维度的

聚类方法

目前存在大量的聚类算法,算法的选择取决于数据的类型、聚类的目的和具体应用。聚类算法主要分为 5 大类:基于划分的聚类方法、基于层次的聚类方法、基于密度的聚类方法、基于网格的聚类方法和基于模型的聚类方法。

基于划分的聚类方法(Partitioning approach)

  • 在层次上构造各种分区,然后通过一些标准对它们进行评估,例如,最小化平方误差之和
    -典型方法: Typical methods: k means, k medoids , CLARANS

基于层次的聚类方法(Hierarchical approach)

  • 通过采用自下而上(bottom-up)或自上而下(top-down)的策略,使用某些标准对数据对象集进行分层分解
  • 典型方法:Typical methods: Diana, Agnes, BIRCH, CHAMELEON

基于密度的聚类方法(Density based approach)

  • 对于目标聚类中的每个数据点,给定半径的邻域必须至少包含最少数量的点
  • 典型方法:Typical methods: DBSACN, OPTICS, DenClue

基于网格的聚类方法(Grid based approach)

  • 将对象空间量化为有限数量的单元,这些单元形成网格结构并在网格上执行聚类
  • 典型方法:Typical methods: STING, WaveCluster , CLIQUE

各种聚类方法概述
在这里插入图片描述

基于划分的聚类方法

分区算法:基本概念

  • 将含有n个对象的数据库D划分为k个集群, C 1 C_1 C1, C 2 C_2 C2,… C k C_k Ck C i ∩ C j = ⊘ C_i\cap C_j = \oslash CiCj=), 并且群集变化范围内的平方误差总和被最小化:
    E = ∑ i = 1 k ∑ p ∈ C i d ( p , c i ) 2 E = \sum_{i=1}^{k} \sum_{p\in C_i} d(p,c_i)^2 E=i=1kpCid(p,ci)2
    c i c_i ci : 簇 C i C_i Ci的质心, p p p:一个对象, d d d:欧氏距离

  • 给定k,找到使 E E E 最小的数据集分区
    问题是欧式距离的NP-hard,即使在两个簇中,甚至在二维空间中的任何k个集群
    解决办法:使用 heuristic, greedy 和 iterative methods
    1.k-means (k-平均)算法:每个集群由集群的中心表示
    2.k-medoids算法(k-medoids):每个集群由集群中的一个对象表示
    基于划分的聚类方法中,最经典的就是以上两个算法,很多算法都是由这两个改进的。

K-Means聚类算法

给定k, k-means算法由4步生成

1.随机选择 k 个数据对象,每个数据对象代表一个簇中心,即选择 k 个初始中心,对剩余的每个对象,根据其与各簇中心的相似度(距离),将它赋给与其最相似的簇中心对应的簇

2.在当前分区中,计算每个群集的中心(即,重新计算每个簇中所有对象的平均值,作为新的簇中心)

3.重新把目标分配给最相似的集群中

4.返回第2步,直到分配不再改变

下图是K-Means聚类的实例

在这里插入图片描述
再列举一个实例:
步骤一:随机选取三个(k=3)质心
在这里插入图片描述
将每个向量分配到离各自最近的中心点,从而将数据集分成了3个类
在这里插入图片描述
步骤二:计算得到上步得到聚类中每一聚类观测值的均值作为新的质心。

在这里插入图片描述
重复步骤二,直至结果收敛,这里的收敛是指所有点到各自中心点的距离的和收敛
在这里插入图片描述

评价K-Means算法

  • 很有效:O(tkn), n为对象数,k是集群数,t是迭代数,通常 k 和 t 的值远小于n
  • 通常在局部最优时终止
    结果可能取决于最初的随机选择;
    为了获得更好的结果,算法使用不同的初始选择多次运行
  • 仅在定义了数据对象的均值(数值数据)时适用
  • 需要预先指定k,即集群数
  • 对嘈杂的数据和离群值敏感
  • 不适合发现大小差异很大的集群

由K-Means衍变的方法

K-Means的变体在以下方面有所不同:
选择初始的k个数据对象;
差异计算;
计算聚类均值的策略。

处理分类数据:k-modes

  • 用modes替换集群的means
  • 使用新的差异度量来处理分类对象
  • 使用基于频率的方法更新集群模式
  • 可以与k-means集成以将数值和标称值混合的数据聚类(k-prototype方法)

关于K-Means存在的问题

  • K-Means算法对离群值敏感
    由于具有极大值的对象可能会严重扭曲数据的分布(即均值计算)

  • k-medoids算法的基础:实际对象用于表示群集,为该群集中位于最中心的对象,而不是获取群集的平均值
    -使用绝对误差准则:
    E = ∑ i = 1 k ∑ p ∈ C i d ( p , o i ) 2 E = \sum_{i=1}^{k} \sum_{p\in C_i} d(p,o_i)^2 E=i=1kpCid(p,oi)2
    o i o_i oi: 群集 C i C_i Ci 的中值

K-Medoid聚类算法

Partitioning Around Medoids (PAM)是一个典型的K-Medoid算法

给定k,PAM 算法的实现如下:

1.选择k个对象作为初始medoids

2.根据对象与群集的类medoids之间的距离将其分配给最相似的群集

3.对于每个群集,将非medoids对象 x 与群集的medoids m 交换,并计算配置的总成本(即,x与群集相关联的所有数据点的平均差异度); 选择使x 具有最低值的

4.返回第2步,直到medoids不再改变

下图是PAM的实例

在这里插入图片描述

基于层次的聚类方法

层次聚类方法不需要指定最终聚成的簇的数目(例如K值)。将数据分区到位于不同级别的各个组中。它不需要簇数k作为输入,但是需要终止条件。
在这里插入图片描述

基于凝聚层次的聚类方法

Agglomerative Hierarchical Clustering Method
算法一开始将每个实例都看成一个簇,在一个确定的”聚类间度量函数“的驱动下,算法的每次迭代中都将最相似的两个簇合并在一起,该过程不断重复直到只剩下一个簇为止。该方法称为层次聚类,也叫凝聚聚类(agglomerative clustering)。

  • 一种首先将每个对象视为一个集群的自上而下(bottom-up)的策略
  • 迭代地将群集合并为越来越大的群集
  • 当所有对象都位于单个群集(层次结构的root)或满足某些终止条件(例如,所需的群集数量)时停止
  • 合并两个最接近的聚类(根据一些相似性度量)
  • 由于每次迭代会合并两个群集,因此最多需要n次迭代

AGNES (Agglomerative Nesting)

过程如下:
1.最初将每个对象放入群集中;
2.然后逐步合并最接近的群集:

  • 每个群集都由其所有对象表示
  • 𝐶1和𝐶2之间的相似度被认为是最接近的对象对(𝑜1,𝑜2)的相似度,其中𝑜1∈𝐶1和𝑜2∈𝐶2
  • 称为单链接(single-link)方法

3.重复直到将所有对象分配到单个群集

在这里插入图片描述

基于分层聚类的过程

Dendrogram即树状图,表示分层聚类的过程(即,如何将对象逐步分组或分区)

在这里插入图片描述

聚类之间的相似度依据聚类间距离来度量

层次聚类的思想并不复杂,引起层次聚类算法区别的核心因素有两个:

聚类间距离度量:决定怎样测量(或定义)类间距离
提前终止条件:我们需要确定什么时候终止合并,否则最终只会得到一个单聚类

聚类间距离度量公式如下:

  • Single linkage: 来自不同群集的两个对象之间的最短距离

具体来说,类间距离定义为两类元素间的最短距离(取两两组合最短距离的两个)。
由于该度量值考虑了两个聚类中最近的两个成员间的距离,所以该过程对离群点很敏感,增加单个实例就可能完全改变整个聚类结构。 d ( C i , C j ) = min ⁡ p ∈ C i , p ′ ∈ C j ( ∣ p − p ′ ∣ ) d(C_i,C_j) = \min \limits_{p\in C_i ,p' \in C_j}\left({|p-p'|}\right) d(Ci,Cj)=pCi,pCjmin(pp)

  • Complete linkage: 来自不同群集的两个对象之间的最长距离

具体来说,只有两个聚类的所有成员都相似时,才认为两个聚类的距离很近、这种度量标准也对离群点很敏感,并且倾向于寻找紧凑的、直径较小的聚类。同时,也可能会出现一些实例与其他聚类的距离比与它自己所在聚类内其他点的距离还近很多的情况。
d ( C i , C j ) = max ⁡ p ∈ C i , p ′ ∈ C j ( ∣ p − p ′ ∣ ) d(C_i,C_j) = \max \limits_{p\in C_i ,p' \in C_j}\left({|p-p'|}\right) d(Ci,Cj)=pCi,pCjmax(pp)

  • Average linkage: 两个群集之间所有可能的对象对之间的平均距离
    1 n i n j ∑ p ∈ C i , p ′ ∈ C i ∣ p − p ′ ∣ \frac{1}{n_in_j}\sum_{p\in C_i,p'\in C_i} {|p-p'|} ninj1pCi,pCipp
    ni : Ci中的对象
  • Mean linkage: 两个群集的中心之间的距离
    d ( C i , C j ) = ∣ m i − m j ∣ d(C_i,C_j) = |m_i - m_j| d(Ci,Cj)=mimj
  • Medoid linkage: 两个群集的中等的距离
    d ( C i , C j ) = ∣ m e i − m e j ∣ d(C_i,C_j) = |me_i - me_j| d(Ci,Cj)=meimej
    在这里插入图片描述
    在这里插入图片描述
    群集的质心,半径和直径(用于数字数据集)
    除了上述的度量方式,还可以应用其他度量,例如平均集群间(inter-cluster)距离,平均集群内(intra-cluster)距离和方差增加variance increase距离
  • 质心(Centroid): 集群的“中心”
    C m = ∑ i = 1 N ( p i ) N C_m = \frac{\sum_{i=1}^{N} (p_i)}{N} Cm=Ni=1N(pi)
  • 半径(Radius): 从群集的任何点到质心的平均距离的平方根
    R m = ∑ i = 1 N ( p i − c m ) 2 N R_m = \sqrt{\frac{\sum_{i=1}^{N} (p_i - c_m)^2}{N}} Rm=Ni=1N(picm)2
  • 直径(Diameter) 群集中所有点对之间的平均均方根距离的平方根
    D m = ∑ i = 1 N ∑ j = 1 N ( p i − p j ) 2 N D_m = \sqrt{\frac{\sum_{i=1}^{N}\sum_{j=1}^{N} (p_i - p_j)^2}{N}} Dm=Ni=1Nj=1N(pipj)2

基于分裂层次的聚类方法

Divisive Hierarchical Clustering Method

  • 一种首先将所有对象作为层次结构的root放在一个群集中的自下而上(top-down)的策略
  • 将root集群划分为几个较小的子集群,然后将这些集群递归地划分为较小的子集群
  • 分区过程在以下情况下停止:
    最低级别的每个群集足够相干(仅包含一个对象或群集中的对象彼此足够相似);
    满足某些终止条件(例如,所需的群集数量)

DIANA (Divisive Analysis)

过程如下:
1.最初将所有对象放入初始单个群集中;
2.然后按步骤划分群集:

  • 选择具有**最大直径(largest diameter)**的聚类(直径是聚类中任何两个对象之间的最大距离)
  • 找到群集中**最不相同(most disparate)**的对象,该对象与群集中其他对象的平均差异(average dissimilarity)最大
  • 距离**最不相同(most disparate)**对象较近的对象被分配给新的群集,结果,选定的群集被分为两个新的群集
  • 重复直到每个群集包含一个对象
    在这里插入图片描述

BIRCH,CHAMELEON

基于凝聚的聚类方法主要缺点:

  • 永远无法撤销以前所做的
  • 伸缩性不好:时间复杂度至少为 O ( n 2 ) O(n^2) O(n2),其中n是对象总数

基于以上进行了扩展,集成基于层次和距离的聚类来改进,主要的算法有:

  • BIRCH (1996) :使用CF树并逐步调整子集群的质量
  • CHAMELEON (1999) :使用动态建模的层次聚类

BRICH

全称是Balanced Iterative Reducing and Clustering Using Hierarchies,即平衡的迭代减少和使用层次结构的聚类

  • 该设计用于聚类大量数字数据
  • 集成层次结构聚类(在初始阶段)和其他聚类方法,例如迭代分区(在后期)
  • 使用聚类特征clustering feature(CF)汇总群集
  • 使用聚类特征树clustering feature tree(CF tree)表示聚类层次结构
  • 速度快
  • 对大型数据集来说具有可伸缩性
  • 对增量和动态集群有效

BIRCH的CF

  • 聚类特征CF:一个三元组,用(N, LS, SS)来表示,汇总了子集群 𝐶𝑖 = {𝑝1,𝑝2,…,𝑝𝑁}的信息。
    其中:
    N 表示这个CF中包含的样本数量;
    LS 表示所有样本点的线性和: L S = ∑ i = 1 N p i LS = \sum_{i=1}^{N} p_i LS=i=1Npi
    SS 表示所有样本点的平方和: S S = ∑ i = 1 N p i 2 SS = \sum_{i=1}^{N} p_i^2 SS=i=1Npi2

  • 半径和直径可以基于CF计算

  • CF是累积的
    如果两个群集C𝑖和Cj合并,则通过将C𝑖和Cj的CF求和而获得的新群集的CF
    在这里插入图片描述
    BIRCH的CF-Tree

  • CF树是一种高度平衡树,用于存储分层聚类的聚类特征,其中
    树中的nonleaf节点具有后代或“子代”;
    nonleaf节点存储其子级CF的总和(汇总有关其子级的聚类信息),CF-Tree中父节点的某个CF值等于其指向的所有子节点CF值的总和。

  • CF数的三个关键参数
    1.B :每个nonleaf节点最大的CF个数
    2.L :每个叶节点最大的CF个数
    3.T: 叶节点处存储的子簇的最大直径
    这些参数控制数的尺寸

  • BIRCH最大限度地减少了输入/输出所需的时间

下图为CF-Tree结构图
在这里插入图片描述
CF-Tree构建

逐步构造CF树:
阶段1:扫描数据库以在内存CF树中建立初始树(数据的多级压缩,试图保留数据的固有聚类结构;
阶段2:再次扫描数据库,使用任意聚类算法对CF树的叶子节点进行聚类,移除稀疏聚类(离群值)并将密集聚类分组为较大的聚类

线性扩展:通过一次扫描即可找到良好的聚类,并通过几次其他扫描来提高质量

弱点:仅处理数字数据,并且对数据记录的顺序敏感

CF-Tree构建步骤:

1、初始状态,CF树是空的,无任何样本。读入第一个样本x(a,b),生成一个CF三元组,此处N=1,LS=(a,b),SS= a 2 a^2 a2 + b 2 b^2 b2,我们令其为CF1

2、读入第二个样本,若到CF1的距离小于T,那么这个样本也归入CF1,更新三元组数据;如果大于T,则新划分出一个CF,这个样本作为CF2当中的首个样本,生成一个CF三元组。
注意:此时都是在节点内进行CF的建立,而非产生新的节点。

3、分裂:如果新数据进入该节点后,距离所有CF中心的距离都大于T,且CF个数在生成新CF后大于B,则该节点需要进行划分。

4、找到该分支内各个CF之间的距离最大的两个CF,分别作为两个新叶子节点的CF,再计算剩余CF到这两个CF之间的距离,距离近的分到一个节点当中。

5、如果节点分裂过后叶子节点个数超过L,则该节点要进行分裂,分裂方式和上一步相同。

6、生成CF和分裂过程直至所有样本均进入CF树后停止。

BIRCH算法

该算法对应生成的结果就是一个簇(聚类特征 - CF);
BIRCH算法的过程就是建立CF-Tree的过程。

  • 将数据点或子集群插入CF树
    首先通过递减树根据距离度量(例如,平均链接,平均集群间距离等)找到最近的叶子节点和根距离;
    将点添加到叶条目并更新CF如果叶片直径> max_diameter,则分裂叶片,并可能分裂父节点;
    通过更新到根路径上非叶节点的CF信息,将新条目的信息传递到根
  • 重建树类似于B +树的构建
  • 优点:
    层次聚类算法的时间复杂度为 : O ( n 2 ) O(n^2) O(n2)
    而优化后的BIRCH算法构建聚类特征树(CF-Tree)的时间复杂度为: O(n)
  • 缺点:
    1.敏感数据点的插入顺序
    2.由于我们固定了叶节点的大小,因此群集可能不是那么自然
    3.由于使用半径和直径度量来控制簇的大小,因此簇倾向于为球形,只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数

CHAMELEON

  • 一种基于动态模型的度量聚类之间相似度的分层聚类算法
    在进行两个类簇合并时使用更高的标准,同时考虑了类簇之间的互连性(interconnectivity)(连接两个子簇的边的权重之和)和近似性(closeness)(连接两个子簇的边的平均权重),具有发现任意形状和大小的簇的能力。

  • 如果两个集群的互连性很高并且彼此靠近,则将它们合并

  • 不依赖于静态和用户提供的模型

  • 形成自然均匀的簇

  • 只要可以指定相似度函数,就适用于所有数据类型

  • 算法的过程可分为两个阶段:
    阶段一:构造一个k nearest neighbor 图,再通过一个图划分算法将图划分成大量的子图,每个子图代表一个初始子簇;
    阶段二:通过一个凝聚的层次聚类算法反复的合并子簇来找到真正的聚类结果。

  • 该算法能发现高质量的任意形状的簇

  • 高维数据的复杂度为 : O ( n 2 ) O(n^2) O(n2)
    在这里插入图片描述

基于层次结构的聚类概率论

  • 基于链接度量的算法分层聚类方法
    敏感地选择良好的距离测量;
    难以处理缺少的属性值(不容易应用距离计算);
    优化目标不清楚:启发式,本地搜索
  • 概率层次聚类
    -使用概率模型测量聚类之间的距离
    生成模型:将要聚类的数据对象集作为基础数据生成机制的样本
    聚类被认为是通过使用观察到的数据对象来尽可能准确地估计生成模型
    易于理解,作为算法的集合体非常有效,但可以处理部分观察到的数据
    假设生成模型基于分布函数,例如高斯分布或伯努利分布

基于密度的聚类方法

基于密度的聚类方法(Density Based Clustering Methods)

  • 分区和分层方法都是基于各种各样的距离的找到球形(spherical shaped)簇:
    所以无法找到任意形状的簇,例如“ S”形或椭圆形簇;
    并且群集中包含噪声或离群值。
  • 将数据空间建模为由稀疏区域分隔的密集区域可提供任意形状的簇
  • 主要优点:
    1.发现任意形状的簇
    在这里插入图片描述
    2.处理噪音
    3.扫描一次
    4.需要密度参数作为终止条件

基本概念
给定数据集 D = {x1, x2 ,…xm} ,定义

  • 两个参数
    1. ε \varepsilon ε ε \varepsilon ε邻域包含样本集D 中与任意对象的距离不大于 ε \varepsilon ε的样本
    2.MinPts : ε邻域中包含的对象的最小数

  • p的 ε − n e i g h b o r h o o d \varepsilon -neighborhood εneighborhood : N ε ( p ) N_\varepsilon (p) Nε(p) {q belongs to D | dist(p,q) } ≤ ε

  • 核心对象:其ε邻域至少包含MinPts个对象(即,其ε邻域很密集)

  • 密度直达Density-directly ::若xj位于xi ε \varepsilon ε邻域内,且xi是核心对象,则称xj由xi密度直达
    下图中q N ε ( q ) N_\varepsilon (q) Nε(q)是密集的
    圆圈显示 ε \varepsilon ε邻域,q是核心对象;
    p在核心对象q的 ε \varepsilon ε邻域内, p由q密度直达
    在这里插入图片描述

  • 密度可达Density-reachable::对xi和xj,若存在样本序列 p1, p2,…,pn , 其中,p1 = xi , pn = xj, 且pi+1 由pi 密度直达,则称xi和xj 密度可达
    下图中p由q密度可达
    在这里插入图片描述

  • 密度相连Density-connected::对xi和xj,若存在xk,使得xi和x~ 均由xk 密度可达,则称xi和xj 密度相连

在这里插入图片描述

DBSCAN

DBSCAN算法
DBSCAN(Density—Based Spatial Clustering of Application with Noise)算法是一种典型的基于密度的聚类方法。它将簇定义为密度相连的点的最大集合,能够把具有足够密度的区域划分为簇,并可以在有噪音的空间数据集中发现任意形状的簇。

DBSCAN的指导思想是:
用一个点的∈邻域内的邻居点数衡量该点所在空间的密度,只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去;
它可以找出形状不规则(oddly-shaped)的cluster,且聚类时不需要事先知道cluster的个数。

基本概念

  • 依靠基于密度的聚类概念:DBSCAN 算法对簇的定义很简单,由密度可达关系导出的最大密度相连的样本集合,即为最终聚类的一个簇。

  • C ⊆ D C \subseteq D CD ,C是一组群集,应满足:
    在C 中任意2个对象 p 和 q ,p 和 q 是密度相连(density-connected)的;
    没有任意的目标对 (p,q) , p ∈ C p\in C pC, q ∈ ( D − C ) q\in (D-C) q(DC),其中p 和 q 是密度相连的。

  • 发现带有噪声的空间数据库中任意形状的簇

  • DBSCAN 算法的簇里面可以有一个或者多个核心点。如果只有一个核心点,则簇里其他的非核心点样本都在这个核心点的 Eps 邻域里。如果有多个核心点,则簇里的任意一个核心点的 Eps 邻域中一定有一个其他的核心点,否则这两个核心点无法密度可达。这些核心点的 Eps 邻域里所有的样本的集合组成一个 DBSCAN 聚类簇。

重要参数

1.Eps 是定义密度时的邻域半径

2.MinPts 为定义核心点时的阈值。

在 DBSCAN 算法中将数据点分为以下 3 类。
1)核心点(core point)
如果一个对象在其半径 Eps 内含有超过 MmPts 数目的点,则该对象为核心点。

2)边界点(border point)
如果一个对象在其半径 Eps 内含有点的数量小于 MinPts,但是该对象落在核心点的邻域内,则该对象为边界点。

3)噪音点(noise point)
如果一个对象既不是核心点也不是边界点,则该对象为噪音点。

通俗地讲,核心点对应稠密区域内部的点,边界点对应稠密区域边缘的点,而噪音点对应稀疏区域中的点

DBSCAN算法的描述如下
输入:数据集,邻域半径 Eps,邻域中数据对象数目阈值 MinPts;
输出:密度联通簇。
处理流程如下:

1.从数据集中任意选取一个数据对象点 p;

2.如果对于参数 Eps 和 MinPts,所选取的数据对象点 p 为核心点,则找出所有从 p 密度可达的数据对象点,形成一个簇;

3.如果选取的数据对象点 p 是边缘点,将它标记为"noise",选取另一个数据对象点;

4.重复 2、3 步,直到所有点被处理。

DBSCAN 算法的计算复杂的度为 O(n²),n 为数据对象的数目。这种算法对于输入参数 Eps 和 MinPts 是敏感的。

评价DBSCAN算法

优点:
和传统的 k-means 算法相比,DBSCAN 算法不需要输入簇数 k 而且可以发现任意形状的聚类簇,同时,在聚类时可以找出异常点。

DBSCAN 算法的主要优点如下。

1.可以对任意形状的稠密数据集进行聚类,而 k-means 之类的聚类算法一般只适用于凸数据集。

2.可以在聚类的同时发现异常点,对数据集中的异常点不敏感。

3.聚类结果没有偏倚,而 k-means 之类的聚类算法的初始值对聚类结果有很大影响。

缺点:

1.参数ε和MinPts由用户手动选择,稍有不同的设置可能导致完全不同的聚类结果
2.启发式设置参数,对于现实世界的高维数据很难确定
3.现实世界的数据具有偏斜的分布,其中聚类结构可能无法通过单个全局参数集很好地表征。对于整个数据集只采用了一组参数。如果数据集中存在不同密度的簇或者嵌套簇,则 DBSCAN 算法不能处理。为了解决这个问题,有人提出了 OPTICS 算法。
4.DBSCAN 算法可过滤噪声点,这同时也是其缺点,这造成了其不适用于某些领域,如对网络安全领域中恶意攻击的判断。

关于ε的单调性
在In BDSCAN中,固定的MinPt并且, ε 1 \varepsilon_1 ε1 < ε 2 \varepsilon_2 ε2,其中集群 C1 和 C2 分别基于 ε 1 \varepsilon_1 ε1 ε 2 \varepsilon_2 ε2 ,相对的 C 1 ⊆ C 2 C_1 \subseteq C_2 C1C2

OPTICS:

概念
OPTICS聚类算法是基于密度的聚类算法,全称是Ordering points to identify the clustering structure,目标是将空间中的数据按照密度分布进行聚类,其思想和DBSCAN非常类似,但是和DBSCAN不同的是,OPTICS算法可以获得不同密度的聚类,直接说就是经过OPTICS算法的处理,理论上可以获得任意密度的聚类。因为OPTICS算法输出的是样本的一个有序队列,从这个队列里面可以获得任意密度的聚类。

定义
关于参数,和DBSCAN一样,有两个参数
1.Eps 是定义密度时的邻域半径。

2.MinPts 为定义核心点时的阈值。

这里引入两个关于距离的定义:

1.核心距离(Core-distance):
核心点距最小的MinPts内最近的点的距离,如果核心点未定义,核心距离也未定义。
c o r e D i s t ( P ) = { U n d e f i n e d , i f N ( P ) ≤ M i n P t s M i n P t s t h D i s t a n c e i n N ( P ) , e l s e coreDist (P)=\begin{cases} Undefined,\quad if N(P) \leq MinPts \\\\ MinPts_thDistance in N(P) ,\quad else \end{cases} coreDist(P)=Undefined,ifN(P)MinPtsMinPtsthDistanceinN(P),else

2.可达距离(Reachability distance):
对于核心点P,O到P的可达距离定义为O到P的距离或者P的核心距离,即公式
c o r e D i s t ( P ) = { U n d e f i n e d , i f N ( P ) ≤ M i n P t s m a x ( c o r e D i s t ( P ) , d i s t ( O , P ) ) , e l s e coreDist (P)=\begin{cases} Undefined,\quad if N(P) \leq MinPts \\\\ max(coreDist (P),dist(O,P)) ,\quad else \end{cases} coreDist(P)=Undefined,ifN(P)MinPtsmax(coreDist(P),dist(O,P)),else
如果核心点未定义,可达距离也未定义。
O到P直接密度可达,即P为核心点,且P到O的距离小于半径。

OPTICS算法

算法过程如下:
输入:数据样本D,初始化所有点的可达距离和核心距离为MAX,半径εε,和最少点数MinPtsMinPts。

1、建立两个队列,有序队列(核心点及该核心点的直接密度可达点),结果队列(存储样本输出及处理次序)

2、如果D中数据全部处理完,则算法结束,否则从D中选择一个未处理且未核心对象的点,将该核心点放入结果队列,该核心点的直接密度可达点放入有序队列,直接密度可达点并按可达距离升序排列;

3、如果有序序列为空,则回到步骤2,否则从有序队列中取出第一个点:
判断该点是否为核心点,不是则回到步骤3,是的话则将该点存入结果队列,如果该点不在结果队列;
该点是核心点的话,找到其所有直接密度可达点,并将这些点放入有序队列,且将有序队列中的点按照可达距离重新排序,如果该点已经在有序队列中且新的可达距离较小,则更新该点的可达距;。
重复步骤3,直至有序队列为空。

4、算法结束。

评价OPTICS算法

  • 克服使用一组全局参数的困难
  • 没有显式地产生数据集聚类; 它输出一组顺序的集群
    提供所有数据对象的线性列表;
    生成数据对象的特殊顺序,而不是基于密度的聚类结构;
    密集的群集中的对象在群集顺序中彼此靠近列出;
    该顺序等效于通过各种参数设置获得的基于密度的聚类;
    群集排序可用于提取基本群集信息

DENCLUE

DENCLUE使用统计密度函数

  • 在DBSCAN和OPTICS中,密度是通过计算ε附近的物体数量来计算的; 对ε的值非常敏感
  • DENCLUE:使用统计密度函数
    原理:一个点的概率密度取决于该点到观察对象的距离
    定义如下:
    在这里插入图片描述
  • 主要特征:
    需要数学基础
    适用于噪声较大的数据集
    可以对高维数据集中任意形状的簇进行紧凑的数学描述
    比现有算法(例如DBSCAN)快得多

基于网格的聚类方法

基于划分和层次的聚类方法都无法发现非凸面形状的簇,真正能有效发现任意形状簇的算法是基于密度的算法,但基于密度的算法一般时间复杂度较高,而基于网格的聚类算法,网格方法可以有效减少算法的计算复杂度,且同样对密度参数敏感。
概括来说。基于网格的聚类方法

  • 是划分空间的方法
  • 使用多分辨率(multiresolution)网格数据结构
  • 独立于输入对象的分布,将嵌入空间划分为多个单元
  • 快速处理时间,与对象数量无关

典型算法:STING,CLIQUE

  • STING:基于网格多分辨率,将空间划分为方形单元,对应不同分辨率
  • CLIQUE:结合网格和密度聚类的思想,子空间聚类处理大规模高维度数据

虽然这两种算法用不同的网格划分方法,将数据空间划分成为有限个单元(cell)的网格结构,并对网格数据结构进行了不同的处理,但核心步骤是相同的:

1、 划分网格

2、 使用网格单元内数据的统计信息对数据进行压缩表达

3、 基于这些统计信息判断高密度网格单元

4、 最后将相连的高密度网格单元识别为簇

STING

STING全称为“A Statistical Information Grid Approach”即一种统计信息网格方法。

  • 把对象所在的空间区域分为多个矩形(retangular)单元
  • 空间以分层和递归的方式划分
    有几个单元格级别对应于不同级别的分辨率;
    高级别的每个单元都被分区以形成下一个较低级别的多个单元(树结构);
    预先计算并存储每个单元中特征的统计参数,例如均值,最大值和最小值
    在这里插入图片描述

STING聚类方法

  • 单元格的统计参数用于回答查询
  • 从较低级别的单元格参数可以轻松计算出较高级别的单元格参数
    计数,平均值,标准偏差,最小值,最大值;
    分布类型:正态分布,均匀分布,指数分布,无;
    底层参数直接根据数据计算
  • 使用自上而下的方法来回答空间数据查询
    1.从单元数最少的层开始;
    2.对于当前级别中的每个单元格,计算置信区间(即与给定查询的相关性);
    3.从进一步考虑中删除无关的单元格;
    4.探索较低水平相关单元的子代;
    5.重复此过程,直到到达最底层; 返回满足查询条件的相关单元格的区域

STING算法

  • 最初建议用于特殊数据挖掘
  • 查询示例:
    在这里插入图片描述
  • 优点:
    独立查询,易于并行化,增量更新;
    O(K)用于查询处理,其中K是最低级别的网格单元数; O(n)用于计算单元的统计参数
  • 缺点:
    所有群集边界均为水平或垂直边界,并且未检测到对角线边界

CLIQUE

  • 在现实世界的数据中,对象具有数十个特征(值的范围很广),其中许多与聚类无关
    很难找到覆盖整个数据空间的集群;
    在数据的不同子空间中搜索聚类更好;
    例如: 对于患者类型,不要考虑所有的特征,而要考虑“高烧”,“咳嗽但不要流鼻涕”和3 <16岁的年龄
  • 自动识别高维数据空间的子空间,该子空间比原始空间具有更好的聚类能力
  • CLIQUE可被视为同时基于密度和基于网格的
    它将每个维度划分为非重叠间隔,从而将m维数据空间划分为多单元;
    如果单元格中包含的对象数超过阈值,则该单元格密集;
    集群是子空间中连接的密集单元的最大集合;
    要确定候选搜索空间,请使用密集单元的单调性(monotonicity )(基于Apriori属性关于维数)

在子空间中的簇的环境中,单调性表示:
仅当c的每个(k-1)维投影(即(k-1)维子空间中的单元)至少具有j点时,k维单元c(k> 1)才能至少具有j点。
在这里插入图片描述

CLIQUE算法

算法主要分为两步骤
步骤一:

  • 将每个维度划分为多个间隔,并确定密集的间隔
  • 在子空间(𝐷𝑖1,…,𝐷𝑖𝑘)和𝐷𝑗1,…,𝐷𝑗𝑘)中迭代地将两个k维密集单元𝑐1和𝑐2连接起来,如果:
    (1)𝐷𝑖1=𝐷𝑗1,…,𝐷𝑖𝑘−1=𝐷𝑗𝑘−1 ;
    (2)𝑐1𝑐2在这些维度上共享相同的间隔
    那么在空间(𝐷𝑖1,…,𝐷𝑖𝑘-1,𝐷𝑖𝑘,𝐷𝑗𝑘)生成一个新的(k + 1)维候选单元

步骤二:

  • 使用每个子空间中的密集单元来组装集群(即,确定每个集群覆盖连接的密集单元集群的最大区域)
    最大区域是一个超级单元,每个进入它的单元都是密集的,并且不能在子空间的任何维度上进一步扩展

CLIQUE优点

  • 自动查找维数最高的子空间,以便这些子空间中存在高密度簇;
  • 对输入中的记录顺序不敏感,并且不假定某些规范的数据分布
  • 随着输入的大小线性扩展,并且随着数据中维数的增加而具有良好的可伸缩性

CLIQUE缺点

  • 聚类结果的准确性可能会降低,但方法简单

聚类的评价

聚类评估

聚类评估的主要任务:

  • 评估聚类趋势(Assessing clustering tendency): 如果数据中存在非随机结构(数据具有分组结构),则对数据集进行聚类分析是有意义的
  • 确定数据集中的聚类数量: 聚类数量可以视为数据集的统计总结,可以在聚类分析之前进行估算
  • 衡量聚类质量(Measuring clustering quality:) 评估生成的集群的质量:
    聚类对数据集的拟合程度;
    聚类与基本事实的匹配程度(如果存在;
    对聚类进行评分,然后在同一数据集上比较两组聚类结果

评估聚类趋势

  • 评估数据集是否具有非随机结构(不是由统一的数据分布生成),可能导致有意义的聚类
  • 通过统计检验(Hopkins Static)检验空间随机性
    数据集D被视为随机变量z的样本,z是否均匀分布在数据空间中?
    从D均匀采样n个点p1,…,pn; 对于每个pi,在D中找到其最近的邻居:
    在这里插入图片描述
    从D均匀采样n个点,q1,…,qn; 对于每个qi,在D中找到其最近的邻居:
    在这里插入图片描述
    计算Hopkins Static:
    在这里插入图片描述

确定数据集中的聚类数量

  • 确定聚类数量很重要
    一些聚类算法(例如k-means)需要此参数;
    正确数量的群集控制适当的粒度(群集的可压缩性和准确性之间的平衡)

  • Empirical 方法:
    在这里插入图片描述

  • Elbow方法:
    通过增加聚类的数量(即获得更多的内聚簇),每个簇的簇内方差之和减小;
    但是将凝聚聚类一分为二,可能会降低减少聚类内方差之和的边际效应;
    聚类方差内和聚类数之和的曲线的拐点被认为是正确的聚类数

  • Cross validation方法:(在分类中使用)
    将数据集D分成m个部分;
    使用 m-1个部分获得聚类模型;
    使用其余部分测试聚类的质量,例如: 对于测试集中的每个点,找到最接近的质心,并使用测试集中所有点与其最接近的质心之间的平方距离之和来衡量模型对测试集的拟合程度;
    对于任何k> 0,重复此过程m次。 质量测度的平均值被认为是整体质量;
    比较不同k的整体质量,找到最适合数据的k。

衡量聚类质量

  • 外在的(监督的)
    一个真理,由人类专家建立的理想聚类是可用的;
    使用某些聚类质量度量将聚类与基本事实进行比较;
    例如: 精确度和召回率

  • 内在的(无监督)
    真理不可用;
    通过考虑以下因素评估聚类的优势群集分离和紧凑的程度;
    例如 轮廓系数

外在方法

  • 给定基本事实Cg时,聚类C的聚类质量度量Q将得分Q(C,Cg )
  • 如果满足以下基本条件,则Q很好
    聚类同质性(homogeneity):聚类越纯净,聚类越好;
    聚类完整性:如果有两个对象在真理中属于同一类别,则应将它们分配给
    同一聚类;
    Rag bag: 将异类对象放入纯净的聚类中,而不是将其放入抹布袋(即“ 杂类”或“其他”类别)应受的处罚更多;
    小集群保存:将小类别拆分成小块比将大类别拆分成小块更加有害
  • 对象𝑜𝑖的精度:在𝑜𝑖 的聚类中有多少其他对象属于𝑜𝑖的类别
  • 对象𝑜𝑖的召回度:在Cg中。在𝑜𝑖 的聚类中有多少对分配给𝑜𝑖的类别
  • 聚类C中𝑜𝑖与𝑜𝑗之间关系的正确性
    在这里插入图片描述

内在方法

  • 假设具有n个对象的数据集D被分为k个聚类
  • 对象o和o聚类中所有其他对象之间的平均距离
    在这里插入图片描述
  • 从o到除o以外的所有聚类的最小平均距离
    在这里插入图片描述
  • o的轮廓系数(轮廓系数):
    在这里插入图片描述
  • 衡量聚类的适应度:群集中所有对象o的平均值s(o)
  • 衡量聚类质量:数据集中所有对象o的平均值s(o)

总结

  • Cluster analysis 对象的similarity对其进行分组并具有广泛的应用
  • 可以为各种类型的数据计算相似度
  • 聚类算法可以分为基于分区的方法,基于分层的方法,基于密度的方法,基于网格的方法和基于模型的方法
  • K-meanK-medoids算法是流行的基于分区的聚类算法
  • BirchChameleon是典型的基于分层的聚类算法,并且还有概率层次聚类算法
  • DBSCANOPTICSDENCLU是典型的基于密度的聚类算法
  • STINGCLIQUE是基于网格的聚类算法,其中CLIQUE也是子空间聚类算法
  • 聚类结果的质量可以通过多种方式进行评估
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kxwang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值