聚类分析的基本概念和方法

聚类分析的基本概念和方法



前言

  此文章主要讲解聚类分析的基本概念和方法,参考的内容是《数据挖掘概念与技术》Jiawei Han  Micheline Kamber  Jian Pei 著。


一、什么是聚类分析

  聚类分析: 是把一个数据对象划分成子集的过程,每个子集是一个簇,满足一下两点:

  • 簇中对象彼此相似。
  • 簇间对象彼此相异。

说到了聚类分析,就离不开无监督学习:没有预先定义的类
  聚类分析典型的应用:

  • 作为洞悉数据分布的独立工具。
  • 作为其他算法的预处理步骤。

1、聚类分析基本流程与步骤

  1、特征选择:

  • 选择跟任务相关的信息。
  • 最小化信息冗余。

  2、邻近性度量:两个特征向量的相似性。
  3、聚类准则:通过成本函数或一些规则表示。
  4、聚类算法:选择聚类算法。
  5、聚类评估:验证测试。
  6、结果解释:集成在应用中。

2、 什么是好的聚类方法

  一个好的聚类方法可以产生高质量的簇:

  • 高类内相似性,簇内的内聚性。
  • 低类间相似性,簇间区别。

  聚类方法的质量取决于:

  • 该方法采用的相似度量和它的实现。
  • 它能够发现一些或所有隐藏的模式。

说白了,就是把数据集分成几个子集,越容易区分越好。

3、聚类的模型评估

  相似性度量:

  • 相似性度量通常用距离表示:d(i, j).
  • 不同类型的数据(布尔值、分类、序数比、向量变量),距离函数存在很大的差异。
  • 根据应用和数据语义,权重应该与不同的变量相关联。

  聚类质量:

  • 通常有一个单独的 “质量” 函数来度量簇的 “质量”。
  • 很难定义 “足够相似” 和 “足够好”,答案通常都是非常主管的。

4、聚类分析的比较

  划分标准:单层分区与分层分区(通常多级分层分区更容易描述)。
  簇的分离性:排他性(一个客户只属于一个区域)与非排他性(一个文档可能属于多个类)。
  相似性度量:基于距离的(欧几里得,曼哈顿、切比雪夫),基于联通的(密度或连通性)。
  聚类空间:全空间(通常在低纬度)与子空间(通常在高纬度集群中)

5、聚类分析的挑战

  可伸缩性:对多有数据进行聚类,而不是对样本聚类。
  能够处理不同类型的属性:数值的、二元的、序数的。
  基于约束的聚类:用户可以输入约束条件,使用领域知识确定输入参数。
  用于决定输入参数的领域知识最小化。可解释性和可应用性强。
  其他:发现具有任意形状的簇,能够处理有噪声的数据,增量聚类和对输入顺序不敏感,高纬度数据。

二、基本聚类方法概述

  划分方法:构造不同的分区,然后根据一些标准对他们进行评估。典型的方法有:K-means,K-中心点,CLARANS.
  层次方法:使用一些标准对数据集分层。典型的方法:Diana,Agnes,BIRCH,CAMELEON.
  基于密度的方法:基于连通性和密度函数。典型方法:DBSCAN,OPTICS,DenClue.
  基于网络的方法:基于多粒度结构。典型的方法:STING,WaveCluster,CLIQUE

方法 一般特点
划分方法 ①发现球形互斥的簇 ②基于距离 ③可以使用均值或中心点等代表簇中心 ④对中小数据规模有效
层次方法 ①聚类是一个层次分解 ②不能纠正错误的合并或划分 ③可以集成其他技术,如微聚类或考虑对象链接
基于密度方法 ①可以发现任意形状的簇 ②簇是对象空间中被低密度区域分隔的稠密区域 ③簇密度:每个点的邻域内必须具有多少个点(阈值点)④可能过滤离群点
基于网络的方法 ①使用一种多分辨率网格数据结构 ②快速处理(典型地,独立于数据对象,但依赖于网格大小)

三、划分算法

1、基本概念

  划分方法:将一个包含 n 个对象的数据集 D 划分成 k 个簇。使距离平方和最小化( c i c_i ci 是簇 c i c_i ci 的中心或质心)
E = ∑ i = 1 k Σ p ∈ C i ( d ( p , c i ) ) 2 E=\sum_{i=1}^{k} \Sigma_{p \in C_{i}}\left(d\left(p, c_{i}\right)\right)^{2} E=i=1kΣpCi(d(p,ci))2
  给定 k,根据选定的划分标准找出最优的 k 个簇。

  • 全局最优(Global optimal): 枚举所有的划分。
  • 启发式方法(Heuristic methods):K-means,K-medoids算法。
  • K-means:每个簇用簇中心表示。
  • K-medoids:每个簇用接近聚类中心的对象表示。

2、k-means 聚类方法

  k-means 算法分成四个步骤:

  1. 首先输入 k 的值,即具有 n 个对象的数据集 D = { o 1 , o 2 , . . . , o n } D=\{o_1,o_2, ... ,o_n\} D={ o1,o2,...,on} 经过聚类将得到 k 个分类或者分组。
  2. 从数据集中随机选择 k 个对象作为簇质心,每个簇质心代表一个簇,得到的簇质心集合为 C e n t r o i d = { c 1 , c 2 , . . . , c k } Centroid=\{c_1,c_2, ... ,c_k\} Centroid={ c1,c2,...,ck}
  3. 对 D 中每一个对象 o i o_i oi,计算 o i o_i oi c i c_i ci 的距离,得到一组距离值,选择最小距离值的簇质心 c s c_s cs .将对象 o i o_i oi 划分给 c s c_s cs 簇。
  4. 根据每个簇所包含的对象集合,重新计算簇中所有对象的平均值得到一个新的质心,重复步骤 3 和 4.直到簇的质心不在变化。

在这里插入图片描述

1、k-means 方法的优缺点

  优点:

  • 擅长处理球状分布的数据,当结果聚类是密集的,而且类和类直接的区别比较明显时,k-means 算法的效果较好。
  • 对于处理大数据集,是相对可伸缩和高效的,复杂度是 O(nkt), n 是对象个数,k 是簇的数目,t 是迭代的次数。
  • 相比较其他的算法简单,容易掌握。

  缺点:

  • 需要预先指定集群的数量 k (有自动确定 k 最佳的方法)
  • 对噪声和离群点敏感。
  • 不适合发现非凸形状的簇。

2、k-means 方法的变种

  大多数 k-means 方法的变种在于以下几个方面;

  • 初始 k 平均值的选择。
  • 相异度的计算。(距离公式)
  • 计算聚类平均值的策略。(中心点)

处理分类数据 k-众数:

  • 用众数代替聚类的平均值。
  • 使用新的相异性度量方法来处理分类对象。
  • 用基于频率的方法来更新聚类的众数。
  • k-prototype:一种混合处理分类数据和数值数据的方法。

注意:k-means 算法对孤立点很敏感:均值由于极大值的对象可能会严重的扭曲数据的分布。

3、k-中心聚类方法

  k-medoids(k-中心) :不采用簇中对象的平均值作为参照点,而是选用簇中位置最中心的对象最为参照点,也就是簇中心肯定是一个对象。
  k-中心 基本思想:

  1. 首先为每个簇随意选择一个代表对象;剩余的对象根据其与代表对象的距离分配给最近的一个簇。
  2. 反复地使用非代表对象来替代代表对象,以改进聚类的质量。
  3. 聚类结果的质量用一个代价函数来估算,该函数评估了对象与其参照对象之间的平均相异度。

PMA (Partitioning Around Medoids,1987)就是利用上述方法,它对于较小的数据集非常有效,但不能很好的扩展到大型数据集。

1.判定原则

  为了判定一个非代表对象 O r a n d o m O_{random} Orandom 是否是当前一个代表对象 O j O_j Oj 的好的代替,对于每一个非代表对象 p,考虑以下四种情况:

  • 第一种情况:p 当隶属于代表对象 O j O_j Oj.如果 O j O_j Oj O r a n d o m O_{random} Orandom 所代替,且 p 离 O i O_i Oi 最近,i ≠ j,那么 p 被重新分给 O i O_i Oi。老大跑远了,投靠最近的强势势力。这里就等于叛变了。
  • 第二种情况:p 当隶属于代表对象 O j O_j Oj.如果 O j O_j Oj O r a n d o m O_{random} Orandom 所代替,且 p 离 O j O_j Oj 最近,那么 p 被重新分给 O r a n d o m O_{random} Orandom。部落换了一个首领,变成老大的儿子,对象离家近,任然属于这个部落,只不过老大换了人。
  • 第三种情况:p 当隶属于代表对象 O i O_i Oi.如果 O j O_j Oj O r a n d o m O_{random} Orandom 所代替,且 p 任然离 O i O_i Oi 最近,i ≠ j,那么 p 隶属关系不改变。
  • 第四种情况:p 当隶属于代表对象 O i O_i Oi.如果 O j O_j Oj O r a n d o m O_{random} Orandom 所代替,且 p 任然离 O j O_j Oj 最近,i ≠ j,那么 p 被重新分配给 O r a n d o m O_{random} Orandom

在这里插入图片描述

2、步骤

  算法 k-中心:

  1. 随机选择 k 个对象作为初始的代表对象。
  2. repeat:
    1. 指派每个剩余的对象给离它最近的代表对象所代表的簇。
    2. 随意的选择一个非代表对象 O r a n d o m O_{random} Orandom.
    3. 计算用 O r a n d o m O_{random} Orandom 代替 O j O_{j} Oj 的总代价 S.
    4. 如果 S 小于 0,则使用 O r a n d o m O_{random} Orandom 替换 O j O_{j} Oj,形成新的代表对象的集合。
  3. Utill:不发生变化。

在这里插入图片描述

层次聚类

  使用距离矩阵作为聚类准则。这个方法不需要簇 k 的数量作为输入,但是需要一个终止条件。

在这里插入图片描述

上图就是 AGNES 算法和 DIANA 算法简略图,这个不作为重点学习,需要了解的请查阅别处资料。

4、 密度聚类(重点DBSCAN)

1、基于密度聚类的基本概念

  两大参数:

  • Eps: 邻域的最大面积。
  • MinPts: 该点一个最大半径邻域内的最少点数。

   N E p s N_{Eps} NEps : { P 属 于 数 据 集 D   ∣   d i s t ( p , q ) ≤ E p s } \{P 属于数据集 D\space | \space dist(p,q)\leq Eps\} { PD  dist(p,q)Eps} ,给定对象半径为 Eps 内的区域称为该对象的 E 邻域。
  核心对象:如果给定对象 E 邻域内的样本点数大于或者等于 MinPts, 该对象为核心对象。
  直接密度可达:对于样本集合 D,如果样本点 p 在 q 的 E 邻域内,并且 q 为核心对象,那么对象 p 从对象 q 直接密度可达。

在这里插入图片描述

  密度可达:对于样本集合D, 给定一串样本点 p1, p2, … ,pn, p = p1, q = pn, 假如 pi 从 pi-1 直接密度可达,那么对象 q 到对象 p 密度可达。传递性。

在这里插入图片描述

  密度相连:对于样本集合 D 种一点 o,如果对象 o 到对象 p 和对象 q 都是密度可达的,那么 p 和 q 密度相连。也就是在密度可达中间加了一个对象,传递得更远而已。我们通过这种传递性,可以更好的聚类。

在这里插入图片描述

  DBSCAN 应用:依赖于基于密度的簇概念,簇被定义为密度连接点的最大集合。在有噪声的空间中发现任意形状的簇。

在这里插入图片描述

2、DBSCAN 算法逻辑

  1. 任意选择一个样本点 p。
  2. 基于半径和最小点数检索所有密度可及的点。
  3. 如果 p 是一个核心点,则形成一个簇。
  4. 如果 p 是一个边界点,那么 p 上没有一个密度可达的点,DBSCAN 访问下一个点。
  5. 继续这个过程,直到处理完所有的点。
  6. 如果使用空间索引,DBSCAN 的计算复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),其中 n 是数据集中数据对象的数量,否则,时间复杂度为 O ( n 2 ) O(n^2) O(n2).

  DBSCAN 伪代码:

在这里插入图片描述

心得

  介绍了聚类里面基础的知识和几个三个经典的聚类算法。这只是一种认识,希望可以带来入门级的理解,需要熟练掌握的话要多用。对于机器学习的友友们,算法的基本流程可能不能满足你们,实现出来或者要看清怎么实现的具体细节还需要自己去哔站搜索。算法是美丽的,过程简单,实现简单,关键要我们怎么开拓思维。好的数学功底,编程能力,语言组织(怎么转换成数学语言,怎么讲清刚认识的算法)都是干我们这行所具备的。模仿吧,模仿多了直到那些人的作品不好,再往后面知道怎么改造形成自己喜欢的风格,最后就是你自己的了。

猜你喜欢

转载自blog.csdn.net/qq_51294669/article/details/128048680