聚类算法知识点整理

目录

  1. 1. 聚类任务
    1. 1.1. 无监督学习
    2. 1.2. 聚类定义
    3. 1.3. 聚类的用途
  2. 2. 聚类算法涉及的两个基本问题
    1. 2.1. 性能度量——“有效性指标”
      1. 2.1.1. 外部指标
        1. 2.1.1.1. Jaccard系数(JC)
        2. 2.1.1.2. FM系数(FMI)
        3. 2.1.1.3. Rand系数(RI)
      2. 2.1.2. 内部指标
        1. 2.1.2.1. DB指数(DBI)
        2. 2.1.2.2. Dunn指数(DI)
    2. 2.2. 距离计算
  3. 3. 聚类算法类型
    1. 3.1. 原型聚类——基于原型的聚类
      1. 3.1.1. 基于原型向量
        1. 3.1.1.1. K均值
        2. 3.1.1.2. LVQ——学习向量量化
      2. 3.1.2. 基于概率模型
        1. 3.1.2.1. 高斯混合聚类
    2. 3.2. 密度聚类
      1. 3.2.1. DBSCAN
      2. 3.2.2. 其他密度聚类算法
    3. 3.3. 层次聚类
      1. 3.3.1. AGNES
      2. 3.3.2. 自顶向下

聚类任务

无监督学习

常见的无监督学习包括

  • 聚类
  • 密度估计
  • 异常检测

NOTE:异常检测常借助聚类或距离计算进行,如将远离所有聚簇中心的样本作为异常点,或将密度极低处的样本作为异常点

聚类定义

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster).通过这样的划分,每个簇可能对应于一些潜在的概念(类别),这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名

聚类的用途

聚类既能作为一个单独的过程,用于寻找数据内在的分布结构,也可作为分类等其他学习任务的前驱过程

聚类算法涉及的两个基本问题

性能度量——“有效性指标”

  • 对聚类结果需要通过某种性能度量来评估其好坏
  • 若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果

“物以类聚”:同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同,即聚类结果的“簇类相似度高且簇间相似度低”

外部指标

将聚类结果与某个“参考模型”进行比较

Jaccard系数(JC)

FM系数(FMI)

Rand系数(RI)

内部指标

直接考察聚类结果而不利用任何参考模型

DB指数(DBI)

Dunn指数(DI)

Note:聚类的性能度量还有F值,互信息,平均廓宽等

距离计算

  • 有序属性——闵可夫斯基距离(此外还有内积距离、余弦距离等)
    • 欧氏距离
    • 曼哈顿距离
  • 无序属性——VDM

两者可结合处理混合属性

  • 加权距离
    针对样本空间中不同属性的重要性不同的情形

  • 非度量距离
    距离度量不满足直递性,模式识别、图像检索等涉及复杂语义的应用中常会涉及

Notes:

  • 属性即特征
  • 上述距离计算都是事先定义好的,现实任务中有时需要基于数据样本来确定合适的距离计算式,此时可通过“距离度量学习”来实现

聚类算法类型

原型聚类——基于原型的聚类

假设聚类结构能够通过一组原型刻画,一般算法先对原型进行初始化,然后对原型进行迭代更新求解,采用不同的原型表示,不同的求解方式将产生不同的算法

基于原型向量

K均值

  • 最小均值误差
  • 贪心策略
  • 迭代优化

kMeans

K均值的变体

  • k-medoids算法强制原型向量必为训练样本
  • k-modes算法可处理离散属性
  • Fuzzy C-means(FCM)则是软聚类算法,允许每个样本以不同程度同时属于多个原型
  • 采用某种Bregman距离可增强k均值算法对更多类型簇结构的适用性(原本k均值算法仅在凸形簇结构上效果较好)
  • 引入核技巧可得到核k均值算法,与谱聚类有密切联系,谱聚类可视为在拉普拉斯特征映射降维后执行k均值聚类

LVQ——学习向量量化

与k均值算法类似,“学习向量量化”(Learning Vector Quantization,LVQ)也是试图找到一组原型向量来刻画聚类结构,区别在于LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
LVQ

基于概率模型

高斯混合聚类

  • 使用高斯分布刻画原型,簇划分则由原型对应后验概率确定
  • 常采用EM算法迭代优化求解

guassian

Notes:

  • k均值算法可视为高斯混合聚类在混合成分方差相等、且每个样本仅指派给一个混合成分时的特例

密度聚类

密度聚类亦称“基于密度的聚类”(density-based clustering),此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。

DBSCAN

DBSCAN是一种著名的密度聚类算法,它基于一组“领域”(neighborhood)参数来刻画样本分布的紧密程度

DBSCAN

其他密度聚类算法

  • OPTICS
  • DENCLUE

层次聚类

层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。

AGNES

AGNES是一种采用自底向上聚合策略的层次聚类算法。它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数,这里的关键是如何计算聚类簇之间的距离。

AGNES

自顶向下

  • DIANA

AGNES与DIANA都不能对已合并或已分拆的聚类簇进行回溯调整,BIRCH则对此进行了调整

 

 

聚类分析能够解决的问题 
数据集可以分为几类、每个类别有多少样本量、不同类别中各个变量的强弱关系如何、不同类别的典型特征是什么、基于类别划分的其他应用(如图片压缩)

知识点1:Kmeans流程,时间复杂度,优缺点,影响因素,改进方法 
知识点2:KNN训练边界、KNN流程、K值选择方法、应用场景 
知识点3:聚类应用场景,分类,原理,评价指标 
知识点4:相似性度量、距离度量 
 èç±»
1. K-means聚类 
目标:最小化平方误差E=∑ki=1∑x∈Ci||x−μi||22E=∑i=1k∑x∈Ci||x−μi||22 (在sklearn中inertia_参数为均方差值,越小表示k越好) 
对于已有的未标记的样本,同时给定结果聚类的个数k;目标是把比较接近的样本归为一类,总共得到k个cluster。 
Kmeans中初始化k个中心点(Kmeans对中心点的选取比较敏感)(随机选择或指定k个样本点),然后计算每个样本到k个选定的样本中心点的距离,再比较待聚类样本到初始样本点的距离,将待聚类的样本指定为距离较近的各个类别,重新计算聚类中心;重复迭代以上过程。 
收敛条件: 
(1)聚类中心不再发生变化 
(2)每个样本到对应聚类中心的距离之和不再有很大的变化 
优缺点: 
(1)对初始样本点的选取敏感;对异常点免疫效果不佳;对团状数据点效果较好,对带状效果不好 
Kmeans和Kmeans++:前者随机选点,后者选最远的K个点作为初始点 
(2)线性增长的聚类算法,不适用于海量数据 
改进方法:MiniBatchKMeans: 计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本(而非全部样本)作为代表参与聚类算法过程。 
数据异常对结果的影响 
(1)数据的异常值。需要做异常点的检测和处理 
(2)数据的异常量纲。变量归一化或者标准化处理 
2. LVQ 学习向量量化 
过程:初始化原型向量;随机选取一个有标记的训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一直来对原型向量进行相应的更新 
停止条件: 
(1)达到最大迭代轮数 
(2)原型向量更新很小或者不再更新 
LVQ是SOM基于监督信息的扩展 
【挖个坑,等补充了神经网络来更新下SOM】 
3. DBSCAN密度聚类 
简单来说,就是初始选择一个点,找它所有在邻域参数内的样本点(核心对象),任选一个核心对象,找出其密度可达(即存在一条路径使路径上的相邻的样本点都在邻域上)的样本,直到找不到为止,则生成第一个样本。 
可以类比成传销= = 
DBSCAN算法的出发点是基于密度寻找被低密度区域分离的高密度空间。 
与Kmeans的比较 
对原始数据的分布规律没有明显要求 
无需指定聚类数量,对结果的先验要求不高 
DBSCAN可区分核心对象、边界点和噪音点,因此对噪声的规律效果好,能有效应对数据噪点 
缺点 
对于高维问题,基于Eps(半径)和MinPts(密度)的定义是个很大的问题 
当簇的密度变化太大时,聚类结果较差 
当数据量增大时,要求较大的内存支持,I/O消耗也很大 
4. GMM高斯混合模型 
简单地说,k-means 的结果是每个数据点被 assign 到其中某一个 cluster 了,而 GMM 则给出这些数据点被 assign 到每个 cluster 的概率,又称作 soft assignment 。 
初始参数:样本点属于各个高斯函数的概率,以及每个高斯函数的均值和方差(参数随机给定) 
求解过程: 
EM算法 
E-step: 由已知的均值和方差估算在该参数下的样本点的分布 
M-step:由样本点的分布再求均值和方差 
优缺点: 
优点:多个分布的组合,EM求解,速度快,最大似然概率 
缺点:对初始化值敏感,容易陷入局部最优,需要指定k个高斯分布;对非凸分布数据集效果不好 
5. 距离的度量 
* 幂距离。针对不同的属性给予不同的权重值,决定其属于那个簇 
distmk(xi,xj)=(∑nu=1|xiu−xju|p)1rdistmk(xi,xj)=(∑u=1n|xiu−xju|p)1r 
当r=p时,退化为闵可夫斯基距离。 
* 闵可夫斯基距离 
distmk(xi,xj)=(∑nu=1|xiu−xju|p)1pdistmk(xi,xj)=(∑u=1n|xiu−xju|p)1p 
* 曼哈顿距离:P=1的闵可夫斯基距离。曼哈顿距离取消了欧式距离的平方,因此使得离群点的影响减弱 
* 欧氏距离:P=2的闵可夫斯基距离。欧式距离通常采用的是原始数据,而并非规划化后的数据,优势在于新增对象不会影响到任意两个对象之间的距离。然而,如果对象属性的度量标准不一样,对结果影响较大。 
* 切比雪夫距离 
dist(xi,xj)=Maxnu=1(xiu−xju)dist(xi,xj)=Maxu=1n(xiu−xju) 
* 余弦相似度。空间中两个对象的属性所构成的向量之间的夹角大小 
* Pearson相似度。可以描述为不同对象偏离拟合的中心线程度,可以进一步的理解为,许多对象的属性拟合成一条直线或者曲线,计算每个对象相对于这条线的各属性偏离程度。只能衡量线性相关性。 
* Jaccard相似度 
* 汉明距离。将同等长度的字符串由其中一个变换到另一个的最小替换次数。 
* 相关距离。随机变量的相似度 
ρXY=Cov(X,Y)D(X)√D(Y)√=E((X−EX)(Y−EY))D(X)√D(Y)√ρXY=Cov(X,Y)D(X)D(Y)=E((X−EX)(Y−EY))D(X)D(Y) 
6. 在k-means或kNN,我们常用欧氏距离来计算最近的邻居之间的距离,有时也用曼哈顿距离,请对比下这两种距离的差别。 
欧式距离 是直线距离 
曼哈顿距离是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和,所以也叫街区距离,就是拐来拐去的距离= = 
7. 谱聚类 
谱聚类 
主要思想:把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的 
聚类过程: 
(1) 构建相似矩阵S 
(2) 根据S构建邻接矩阵W,构建度矩阵D 
[构建邻接矩阵三种方法\eplison\eplison邻近,kk邻近,全连接(引入核函数通常是RBF)] 
(3) 计算出拉普拉斯矩阵L并标准化D−1/2LD−1/2D−1/2LD−1/2 
(4) 计算最小k1k1个特征值所各自对应的特征向量ff 
(5) 将各自对应的特征向量ff组成的矩阵按行标准化,最终组成n×k1n×k1维的特征矩阵FF 
(6) 对FF中的每一行作为一个k1k1维的样本,共nn个样本,用输入的聚类方法进行聚类,聚类维数为k2k2 
(7) 得到簇划分C(c1,c2,..,ck2)C(c1,c2,..,ck2) 
谱聚类算法的主要优点有: 
1)谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到 
2)由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。 
谱聚类算法的主要缺点有: 
1)如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。 
2) 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。

知识点梳理: 
知识点1:Kmeans 
(1)介绍Kmeans的流程

随机选取k个点作为初始质心 
repeat 
————–将n个样本点指派到最近的质心 
————–更新质心 
until 超过迭代次数或者质心不再变化

(2)Kmeans的时间复杂度 
O(kTmn)O(kTmn) kk是指定的质心个数,TT是迭代次数,mm是样本维度,nn是样本数

(3)Kmeans的优缺点 
优点:易于实现,时间复杂度低 
缺点:对初始质心的选择敏感、对k选取敏感、只能处理数值形数据、对异常点免疫效果不太好,对非团状数据点聚类效果不好、因为采用迭代的方法和初始点选择容易陷入局部最优解、对样本输入顺序敏感

(4)Kmeans的改进方法 
对k选取敏感,以均方差和为度量,根据inertia_来选取k的值; 
容易陷入局部最优解: 尝试不同质心、调整迭代次数、找到合适的k 
对初始质心选择敏感:Kmeans++ 
优化Kmeans:使用kd树 
将所有的观测实例构建成一颗kd树,之前每个聚类中心都是需要和每个观测点做依次距离计算,现在这些聚类中心根据kd树只需要计算附近的一个局部区域即可。

(5)简要叙述Kmeans++ 
k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。 
从输入的数据点集合中随机选择一个点作为第一个聚类中心 
对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x) 
选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大 
重复2和3直到k个聚类中心被选出来 
利用这k个初始的聚类中心来运行标准的k-means算法 
从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下: 
先从我们的数据库随机挑个随机点当“种子点” 
对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。 
然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。 
重复2和3直到k个聚类中心被选出来 
利用这k个初始的聚类中心来运行标准的k-means算法

(6)Kmeans的影响因素 
A.样本输入顺序; 
B.模式相似性测度; 
C.初始类中心的选取

知识点2: KNN 
(1)KNN的流程 
a. 计算训练样本和测试样本中每个样本点的距离; 
b. 对上面所有的距离值进行排序; 
c. 选前k个最小距离的样本; 
d. 根据这k个样本的标签进行投票,得到最后的分类类别;

(2)KNN中K的选取 
a.如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;(断路) 
b.如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。(短路) 
c.K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。 
在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

(3)KNN的训练边界是坑坑洼洼的,它适用于样本较多但典型性不好的情况

(4)KNN和Kmeans比较 

KNNåKmeans
知识点3:聚类 
(1)聚类原理:相似度度量

(2)聚类评价指标: 
分为内部评价和外部评价,其中内部评价(无真实聚类结果作为参照)的要求是类内样本尽可能相似,类间样本尽可能不同 
* 群体内所有变量的综合标准差(RMSSTD) 
* 群体间差异指标(R-Square) 
* 损失的群体内相似性比例(SPR) 
* 群体间的距离

(3)聚类的分类: 
1. 基于划分的聚类:K-means,k-medoids,CLARANS。 
2. 基于层次的聚类:AGNES(自底向上),DIANA(自上向下)。 
3. 基于密度的聚类:DBSACN,OPTICS,BIRCH(CF-Tree),CURE。 
4. 基于网格的方法:STING,WaveCluster。 
5. 基于模型的聚类:EM,SOM,COBWEB。

(4)应用场景 
查看异常值 
目标用户的群体分类 
不同产品间的价值组合 
变量聚类还可以处理变量共线性的问题

(5)影响聚类算法结果的主要因素 
a.分类准则 
b.特征选取 
c.模式相似性测度

(6)聚类方法选择 
如果数据集是高维的,那么选择谱聚类,它是子空间划分的一种 
如果数据量为中小规模,例如100w条以内,那么K均值将是比较好的选择;如果超过100w,可以考虑Mini Batch KMeans 
如果数据集中有离群点(噪点),DBSCAN 
如果追求更高的分类准确度,谱聚类优于KMeans

知识点4:相似性度量 
(1)欧式距离、曼哈顿距离、余弦距离 
一个是直线距离,另外一个是街区距离,还有一个为余弦相似度得到。 
最常用的是欧式距离。 
曼哈顿距离在某些情况下具有更高的稳定性,但是如果数据集中某些特征值很大,用曼哈顿距离的话,这些特征会掩盖其他特征间的邻近关系,这种距离在城市道路导航中会用到。 
余弦距离,它适用于特征向量很多的情况,但是它丢弃了向量长度所包含的在某些场景下可能会很有用的一些信息。

(2)协方差和相关性的区别 
相关性是协方差的标准化格式。协方差本身很难做比较。例如:如果我们计算工资($)和年龄(岁)的协方差,因为这两个变量有不同的度量,所以我们会得到不能做比较的不同的协方差。为了解决这个问题,我们计算相关性来得到一个介于-1和1之间的值,就可以忽略它们各自不同的度量。

(3)马氏距离和欧式距离 
马氏距离是基于卡方分布的,度量多元outlier离群点的统计方法,包括坐标旋转和数据压缩 
坐标旋转的目标:使旋转后的各个维度之间线性无关,所以该旋转过程就是主成分分析的过程。 
数据压缩的目标:所以将不同的维度上的数据压缩成为方差都是1的的数据集。 
DM(x)=(x−μ)TS−1(x−μ)−−−−−−−−−−−−−−−−√DM(x)=(x−μ)TS−1(x−μ) 
其中μμ为均值,SS为协方差矩阵

欧式距离和马式距离都具有平移不变性和旋转不变性 
但是马氏距离多了尺度缩放不变性和不受量纲影响的特性(因为都被均一化了),还考虑了样本的分布情况。
原文:https://blog.csdn.net/tinkle181129/article/details/79095780 
 

Dunn指数是一种用于聚类质量评估的指标,它可以衡量类簇内部的紧密度和类簇之间的分离度。其计算公式为: Dunn = min_{i!=j} { min_{k} {d(i,j) / max_{l} {d(k,l)} } } 其中,i和j表示不同的类簇,k和l表示类簇中的两个样本点,d(i,j)表示类簇i和j之间的距离,d(k,l)表示类簇k内任意两个样本点之间的距离。 下面是一个简单的Python实现: ```python import numpy as np from sklearn.metrics.pairwise import pairwise_distances def dunn_index(X, labels): # 计算类簇间的距离 distances = pairwise_distances(X) cluster_distances = [] for i in range(len(np.unique(labels))): for j in range(i+1, len(np.unique(labels))): mask = np.logical_or(labels == i, labels == j) cluster_distances.append(np.max(distances[mask][:, mask])) # 计算类簇内的距离 intra_distances = [] for i in range(len(np.unique(labels))): mask = labels == i if np.sum(mask) > 1: intra_distances.append(np.max(distances[mask][:, mask])) # 计算Dunn指数 return np.min(cluster_distances) / np.max(intra_distances) ``` 其中,X表示样本数据,labels表示样本的类簇标签。使用sklearn库中的pairwise_distances函数计算样本之间的距离。计算类簇间的距离时,通过遍历所有不同的类簇组合,计算它们之间的距离,并取最大值。计算类簇内的距离时,遍历所有类簇,对于每个类簇,计算其中任意两个样本点之间的距离,并取最大值。最后,返回最小类簇间距离与最大类簇内距离的比值,即为Dunn指数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值