聚类 高维聚类 聚类评估标准

高维数据的聚类分析

高维聚类研究方向

高维数据聚类的难点在于:

  1、适用于普通集合的聚类算法,在高维数据集合中效率极低

  2、由于高维空间的稀疏性以及最近邻特性,高维的空间中基本不存在数据簇。

在高维聚类的研究中有如下几个研究重点:

1)维度约简,主要分为特征变换和特征选择两大类。前者是对特征空间的变换映射,常见的有PCA、SVD等。后者则是选择特征的子集,常见的搜索方式有自顶向下、随机搜索等;(降维

2)高维聚类算法,主要分为高维全空间聚类和子空间聚类算法。前者的研究主要聚焦在对传统聚类算法的优化改进上,后者则可以看做维度约简的推广;

子空间聚类:

  选取与给定簇密切相关的维,然后在对应的子空间进行聚类。传统的特征选择算法可以用来确定相关维。

  特征选择算法综述:http://www.cnblogs.com/heaad/archive/2011/01/02/1924088.html

  不同的簇对应不同的子空间,并且每个子空间维数不同,因此也不可能一个子空间就可以发现所有的簇。为了解决这个问题,对全空间聚类进行了推广,称为子空间聚类(投影聚类)。

子空间聚类与基于降维的聚类对比

子空间聚类从某种程度上来讲与基于降维的聚类有些类似,但后者是通过直接的降维来对高维数据进行预处理,即在降维之后的某一个特定的低维空间中进行聚类处理;而前者是把高维数据划分成若干不同的子空间,再根据需要在不同的子空间中寻求数据的聚类。

3)聚类有效性,是对量化评估方法的研究;

基于降维的聚类从根本上说都是以数据之间的距离 或相似度评价为聚类依据,当数据的维数不是很高时,这些方法效果较好,但当数据维度增高,聚类处理将很难达到预期的 效果。 原因在于:

a)在一个很高维的空间中定义一个距离度量本身就是一个很困难的事情;

b)基于距离的方法通常需要计算各个聚类之间的距离均值,当数据的维度很高时,不同聚类之间的距离差异将会变得很小。

4)聚类结果表示方法;

5)高维数据索引结构;

6)高维离群点的研究

聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)

一、聚类分析的距离问题

聚类分析的目的就是让类群内观测的距离最近,同时不同群体之间的距离最大。

1.样本聚类距离以及标准化

几种常见的距离,欧氏距离、绝对值距离、明氏距离、马氏距离。与前面不同的是,概率分布的距离衡量,K-L距离代表P、Q概率分布差的期望。

一般来说,聚类分析的数据都会进行标准化,标准化是因为聚类数据会受数据的量纲影响。

在以上的几个距离明氏距离受量纲影响较大。马氏距离受量纲影响较小

还有cos(余弦相似性)余弦值的范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越趋近于0,他们的方向更加一致。相应的相似度也越高(cos距离可以用在文本挖掘,文本词向量距离之上)。

几种标准化的方法,有规范化、标准化(R语言︱数据规范化、归一化

2.不同类型变量距离计算 

算法杂货铺——k均值聚类(K-means)

1、标量:欧几里得距离  曼哈顿距离  闵可夫斯基距离 标准化

标量也就是无方向意义的数字,也叫标度变量。现在先考虑元素的所有特征属性都是标量的情况。例如,计算X={2,1,102}和Y={1,3,2}的相异度。一种很自然的想法是用两者的欧几里得距离来作为相异度,欧几里得距离的定义如下:

其意义就是两个元素在欧氏空间中的集合距离,因为其直观易懂且可解释性强,被广泛用于标识两个标量元素的相异度。将上面两个示例数据代入公式,可得两者的欧氏距离为:

除欧氏距离外,常用作度量标量相异度的还有曼哈顿距离和闵可夫斯基距离,两者定义如下:

曼哈顿距离:

闵可夫斯基距离:

欧氏距离和曼哈顿距离可以看做是闵可夫斯基距离在p=2和p=1下的特例。另外这三种距离都可以加权,这个很容易理解,不再赘述。

下面要说一下标量的规格化问题。上面这样计算相异度的方式有一点问题,就是取值范围大的属性对距离的影响高于取值范围小的属性。例如上述例子中第三个属性的取值跨度远大于前两个,这样不利于真实反映真实的相异度,为了解决这个问题,一般要对属性值进行规格化。所谓规格化就是将各个属性值按比例映射到相同的取值区间,这样是为了平衡各个属性对距离的影响。通常将各个属性均映射到[0,1]区间,映射公式为:

其中max(ai)和min(ai)表示所有元素项中第i个属性的最大值和最小值。例如,将示例中的元素规格化到[0,1]区间后,就变成了X’={1,0,1},Y’={0,1,0},重新计算欧氏距离约为1.732。

2、二元变量:相同序位同值属性的比例 Jaccard系数

所谓二元变量是只能取0和1两种值变量,有点类似布尔值,通常用来标识是或不是这种二值属性。对于二元变量,上一节提到的距离不能很好标识其相异度,我们需要一种更适合的标识。一种常用的方法是用元素相同序位同值属性的比例来标识其相异度。

设有X={1,0,0,0,1,0,1,1},Y={0,0,0,1,1,1,1,1},可以看到,两个元素第2、3、5、7和8个属性取值相同,而第1、4和6个取值不同,那么相异度可以标识为3/8=0.375。一般的,对于二元变量,相异度可用“取值不同的同位属性数/单个元素的属性位数”标识。

上面所说的相异度应该叫做对称二元相异度。现实中还有一种情况,就是我们只关心两者都取1的情况,而认为两者都取0的属性并不意味着两者更相似。例如在根据病情对病人聚类时,如果两个人都患有肺癌,我们认为两个人增强了相似度,但如果两个人都没患肺癌,并不觉得这加强了两人的相似性,在这种情况下,改用“取值不同的同位属性数/(单个元素的属性位数-同取0的位数)”来标识相异度,这叫做非对称二元相异度。如果用1减去非对称二元相异度,则得到非对称二元相似度,也叫Jaccard系数,是一个非常重要的概念。

3、分类变量

分类变量是二元变量的推广,类似于程序中的枚举变量,但各个值没有数字或序数意义,如颜色、民族等等,对于分类变量,用“取值不同的同位属性数/单个元素的全部属性数”来标识其相异度。

4、序数变量:转成标量

序数变量是具有序数意义的分类变量,通常可以按照一定顺序意义排列,如冠军、亚军和季军。对于序数变量,一般为每个值分配一个数,叫做这个值的秩,然后以秩代替原值当做标量属性计算相异度。

5、向量:余弦相似度

对于向量,由于它不仅有大小而且有方向,所以闵可夫斯基距离不是度量其相异度的好办法,一种流行的做法是用两个向量的余弦度量,其度量公式为:

其中||X||表示X的欧几里得范数。要注意,余弦度量度量的不是两者的相异度,而是相似度!

3.群体聚类距离

前面是样本之间的距离,如果是一个点集,群落,如何定义群体距离。一般有以下几种距离。

二.KMEANS注意点

1.K均值聚类算法对离群值最敏感,因为它使用集群数据点的平均值来查找集群的中心。

在数据包含异常值、数据点在数据空间上的密度扩展具有差异、数据点为非凹形状的情况下,K均值聚类算法的运行结果不佳。

2.K均值对簇中心初始化非常敏感。

三.常见聚类模型的比较


K-means(kmeans)


层次聚类(kmeans)


EM模型聚类(mclust包)


优点


属于快速聚类,计算效率高


1、能够展现数据层次结构,易于理解

2、可以基于层次事后再选择类的个数(根据数据选择类,但是数据量大,速度慢)


相比其他方法能够拟合多种形状的类


缺点


1、需要实现指定类的个数(需要指定类)

2、有时会不稳定,陷入局部收敛


1、计算量比较大,不适合样本量大的情形

2、较多用于宏观综合评价


需要事先指定类的个数和初始分布

四.聚类分群的数量如何确定?分群效果如何评价?

没有固定标准,一般会3-10分群。或者用一些指标评价,然后交叉验证不同群的分群指标。

一般的指标:轮廓系数silhouette(-1,1之间,值越大,聚类效果越好)(fpc包),兰德指数rand;R语言中有一个包用30种方法来评价不同类的方法(NbClust),但是速度较慢。既可以确定分群数量,也可以评价聚类质量

商业上的指标:分群结果的覆盖率;分群结果的稳定性;分群结果是否从商业上易于理解和执行

1 . 兰德指数 需要标签

兰德指数(Rand index)需要给定实际类别信息$C$,假设$K$是聚类结果,$a$表示在$C$与$K$中都是同类别的元素对数,$b$表示在$C$与$K$中都是不同类别的元素对数,则兰德指数为:

${\rm RI}=\frac{a+b}{C_2^{n_{\rm samples}}}$,

对于以上公式,

  • 分子:属性一致的样本数,即同属于这一类或都不属于这一类。a是真实在同一类、预测也在同一类的样本数;b是真实在不同类、预测也在不同类的样本数;
  • 分母:任意两个样本为一类有多少种组合,是数据集中可以组成的总元素对数;
  • RI取值范围为[0,1],值越大意味着聚类结果与真实情况越吻合。

对于随机结果,RI并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数(Adjusted rand index)被提出,它具有更高的区分度:

${\rm ARI}=\frac{{\rm RI}-E[{\rm RI}]}{\max({\rm RI})-E[{\rm RI}]}$,

具体计算方式参见Adjusted Rand index

ARI取值范围为$[-1,1]$,值越大意味着聚类结果与真实情况越吻合。从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。

2. 互信息 需要标签

互信息(Mutual Information)也是用来衡量两个数据分布的吻合程度。假设$U$与$V$是对$N$个样本标签的分配情况,则两种分布的熵(熵表示的是不确定程度)分别为:

$H(U)=\sum\limits_{i=1}^{|U|}P(i)\log (P(i)), H(V)=\sum\limits_{j=1}^{|V|}P‘(j)\log (P‘(j))$,

其中$P(i)=|U_i|/N,P‘(j)=|V_j|/N$。$U$与$V$之间的互信息(MI)定义为:

${\rm MI}(U,V)=\sum\limits_{i=1}^{|U|}\sum\limits_{j=1}^{|V|}P(i,j)\log\left ( \frac{P(i,j)}{P(i)P‘(j)}\right )$,

其中$P(i,j)=|U_i\bigcap V_j|/N$。标准化后的互信息(Normalized mutual information)为:

${\rm NMI}(U,V)=\frac{{\rm MI}(U,V)}{\sqrt{H(U)H(V)}}$。

与ARI类似,调整互信息(Adjusted mutual information)定义为:

${\rm AMI}=\frac{{\rm MI}-E[{\rm MI}]}{\max(H(U), H(V))-E[{\rm MI}]}$。

利用基于互信息的方法来衡量聚类效果需要实际类别信息,MI与NMI取值范围为$[0,1]$,AMI取值范围为$[-1,1]$,它们都是值越大意味着聚类结果与真实情况越吻合。

3. 轮廓系数

轮廓系数旨在将某个对象与自己的簇的相似程度和与其他簇的相似程度进行比较。轮廓系数最高的簇的数量表示簇的数量的最佳选择。

轮廓系数(Silhouette coefficient)适用于实际类别信息未知的情况。对于单个样本,设$a$是与它同类别中其他样本的平均距离,$b$是与它距离最近不同类别中样本的平均距离,轮廓系数为:

$s=\frac{b-a}{\max(a,b)}$。

对于一个样本集合,它的轮廓系数是所有样本轮廓系数的平均值。

轮廓系数取值范围是$[-1,1]$,同类别样本越距离相近且不同类别样本距离越远,分数越高。

一般来说,平均轮廓系数越高,聚类的质量也相对较好。在这,对于研究区域的网格单元,最优聚类数应该是2,这时平均轮廓系数的值最高。但是,聚类结果(k=2)的 SSE 值太大了。当 k=6 时,SEE 的值会低很多,但此时平均轮廓系数的值非常高,仅仅比 k=2 时的值低一点。因此,k=6 是最佳的选择。

原文地址:https://www.cnblogs.com/34fj/p/9163578.html

时间: 2024-10-10 01:49:35

聚类 高维聚类 聚类评估标准的相关文章

聚类:层次聚类、基于划分的聚类(k-means)、基于密度的聚类、基于模型的聚类

一.层次聚类 1.层次聚类的原理及分类 1)层次法(Hierarchicalmethods)先计算样本之间的距离.每次将距离最近的点合并到同一个类.然后,再计算类与类之间的距离,将距离最近的类合并为一个大类.不停的合并,直到合成了一个类.其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等.比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离. 层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法(agglomerat

机器学习-层次聚类(划分聚类)

层次聚类(划分聚类) 聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小:属于无监督学习. 算法步骤 1.初始化的k个中心点 2.为每个样本根据距离分配类别 3.更新每个类别的中心点(更新为该类别的所有样本的均值) 4.重复上面两步操作,直到达到某个中止条件 层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法: 凝聚的层次聚类 AGNES算法==>采用自底向上

聚类:层次聚类

假设有N个待聚类的样本,对于层次聚类来说,步骤:  1.(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度:        2.寻找各个类之间最近的两个类,把他们归为一类(这样类的总数就少了一个):        3.重新计算新生成的这个类与各个旧类之间的相似度:        4.重复2和3直到所有样本点都归为一类,结束 整个聚类过程其实是建立了一棵树,在建立的过程中,可以通过在第二步上设置一个阈值,当最近的两个类的距离大于这个阈值,则认为迭代可以终止.另外关键

【机器学习笔记五】聚类 - k均值聚类

参考资料: [1]Spark Mlib 机器学习实践 [2]机器学习 [3]深入浅出K-means算法  http://www.csdn.net/article/2012-07-03/2807073-k-means 一.概念 K-means聚类是在无监督的情况下,将样本数据进行聚类.以2均值聚类的算法为例: 1.在样本中选择两个初始化中心点: 2.计算所有样本到这两个中心点的距离,并以此为基准将样本分为两类: 3.将中心点移到这类样本的新中心点: 4.重复2.3步骤直到满足要求: K-means

【转】使用scipy进行层次聚类和k-means聚类

scipy cluster库简介 scipy.cluster是scipy下的一个做聚类的package, 共包含了两类聚类方法: 1. 矢量量化(scipy.cluster.vq):支持vector quantization 和 k-means 聚类方法 2. 层次聚类(scipy.cluster.hierarchy):支持hierarchical clustering 和 agglomerative clustering(凝聚聚类) 聚类方法实现:k-means和hierarchical cl

聚类算法(K-means聚类算法)

在数据分析挖掘过程中常用的聚类算法有1.K-Means聚类,2.K-中心点,3.系统聚类. 1.K-均值聚类在最小误差基础上将数据划分为预定的类数K(采用距离作为相似性的评价指标).每次都要遍历数据,所以大数据速度慢 2.k-中心点,不采用K-means中的平均值作为簇中心点,而是选中距离平均值最近的点最为簇中心点. 3.系统聚类又叫多层次聚类,分类是由高到低(可以想象下二叉树这种结构),越靠后,包含的数据点越少,但共同特征越多,缺点是不适合大数据量,速度慢. K-mans聚类实战代码: #-*

机器学习--聚类系列--层次聚类

层次聚类 层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树.在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点.创建聚类树有自下而上合并和自上而下分裂两种方法. 作为一家公司的人力资源部经理,你可以把所有的雇员组织成较大的簇,如主管.经理和职员:然后你可以进一步划分为较小的簇,例如,职员簇可以进一步划分为子簇:高级职员,一般职员和实习人员.所有的这些簇形成了层次结构,可以很容易地对各层次

模糊聚类-模拟花朵聚类

模糊聚类 模糊聚类与K-means算法有异曲同工之妙,两者各有优劣势,K-means算法的介绍连接:https://www.cnblogs.com/bokeyuancj/p/11460883.html 基本概念: 聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域中获得最广泛的应用.它把一个没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽可能归于一类,而把不相似的样本划分到不同的类中.硬聚类把每个待识别的对象严格的划分某类中,

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的