聚类分析(Cluster Analysis)

 我来答
舒适还明净的海鸥i
2022-07-02 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:69.4万
展开全部

聚类,将相似的事物聚集在一起,将不相似的事物划分到不同的类别的过程。是将复杂数据简化为少数类别的一种手段。

设有m个样本单位,每个样本测的n项指标(变量),原始资料矩阵:

指标的选择非常重要:
必要性要求:和聚类分析的目的密切相关,并不是越多越好
代表性要求:反映要分类变量的特征
区分度要求:在不同研究对象类别上的值有明显的差异
独立性要求:变量之间不能高度相关(儿童生长身高和体重非常相关)
散布性要求:最好在值域范围内分布不太集中

在各种标准量度值scale差异过大时,或数据不符合正态分布时,可能需要进行数据标准化。
(1) 总和标准化 。 分别求出各聚类指标所对应的数据的总和, 以各指标的数据除以该指标的数据的总和。

根据聚类对象的不同,分为Q型聚类,R型聚类

(1)常见距离统计量 - 闵可夫斯基距离系列(线性距离)

p=2,时为欧氏距离(n维空间中的几何距离)
p=∞,时为切比雪夫距离(棋盘格距离)

(2)常见距离统计量 - 马氏距离(协方差距离)
均值为μ,协方差矩阵为∑的向量x=(1,2,...n)
相比于欧式距离,马氏距离考虑到各种指标之间的联系(如身高和体重并不独立,)且马氏距离具有尺度无关性(scale-invariant),因此可不必做标准化。
如果协方差矩阵为单位矩阵(各指标之间完全相互独立),则马氏距离化为欧几里得距离。
如果协方差矩阵为对角矩阵,则马氏距离化为正规化的欧几里得距离(normalized Euclidean distance)

(3)常见距离统计量 - 文本距离
文本距离通常用来度量文本之间的相似度,在生物研究中常见于序列比对分析。

常见相似系数统计量
相似系数= 1,表明完全相似
相似系数= -1 表明完全相反
相似系数 = 0 表明完全独立
相关系数:

类与类之间 距离的度量方法:
系统聚类法不仅需要度量个体与个体之间的距离,还要度量类与类之间的距离。类间距离被度量出来之后,距离最小的两个小类将首先被合并成为一类。 由类间距离定义的不同产生了不同的系统聚类法。

目前有1000多种聚类算法:没有一种聚类算法可以包打天下,聚类算法中的各种参数也必须依据具体问题而调节
常见聚类算法的分类:
1,层次聚类(Hierarchical clustering)
2,划分聚类(Partitioning clustering)
3,密度聚类(Density-based)
4,期望最大化聚类(Expectation Maximization)
5,网格聚类(Grid-based)
6,模型聚类(Model-based)

1. 层次聚类的方法
基本思想:
在聚类分析的开始,每个样本(或变量)自成一类; 然后,按照某种方法度量所有样本(或变量)之间的亲疏程度,并把最相似的样本(或变量)首先聚成一小类; 接下来,度量剩余的样本(或变量)和小类间的亲疏程度,并将当前最接近的样本(或变量)与小类聚成一类;如此反复,知道所有样本聚成一类为止。
举例:
有一组数据D={a,b,c,d,e} 给了它们之间的距离矩阵。
首先,每一个例子都是一个类:

2. 划分聚类的方法
划分聚类算法:
给定一个包含n个样本的数据集,基于划分的方法(Partitioning Method)就是将n个样本按照特定的度量划分为k个簇(k≤n),使得每个簇至少包含一个对象,并且每个对象属于且仅属于一个簇,而且簇之间不存在层次关系。

基于划分的方法大多数是基于距离来划分的,首先对样本进行初始化分,然后计算样本间的距离,重新对数据集中的样本进行划分,将样本划分到距离更近的簇中,得到一个新的样本划分,迭代计算直到聚类结果满足用户指定的要求。

要想得到最优的聚类结果,算法需要穷举数据集所有可能的划分情况,但是在实际应用中数据量都比较大,利用穷举方法聚类显然是不现实的,因此大部分基于划分的聚类方法采用贪心策略,即在每一次划分过程中寻求最优解,然后基于最优解进行迭代计算,逐步提高聚类结果的质量。虽然这种方式有可能得到局部最优结果,但是结合效率方面考虑,也是可以接受的。

算法:

举例:
有一个二维空间的一些点,我们要将它们分成3个类,即K=3。

我们首先随机选择3个初始质心,每一个质心为一类:

然后我们计算每一个不是质心的点到这三个质心的距离:

将这些点归类于距离最近的那个质心的一类:

重新计算这三个分类的质心:

不断重复上述两步,更新三个类:

当稳定以后,迭代停止,这时候的三个类就是我们得到的最后的三个:

最著名的是k-means聚类算法和K-medoids算法(中心点聚类)

处理“大海中的若干孤岛”,以密度来区分岛

大部分基于密度的方法(Density-based Method)采用距离度量来对数据集进行划分,在球状的数据集中能够正确划分,但是在非球状的数据集中则无法对样本进行正确聚类,并且受到数据集中的噪声数据影响较大。基于密度的方法可以克服这两个弱点。

基于密度的方法提出“密度”的思想,即给定邻域中样本点的数量,当邻域中密度达到或超过密度阈值时,将邻域内的样本包含到当前的簇中。若邻域的密度不满足阈值要求,则当前的簇划分完成,对下一个簇进行划分。基于密度的方法可以对数据集中的离群点进行检测和过滤。

算法

基于网格的方法(Grid-based Method)将数据集空间划分为有限个网格单元,形成一个网络结构,在后续的聚类过程中,以网格单元为基本单位进行聚类,而不是以样本为单位。由于算法处理时间与样本数量无关,只与网格单元数量有关,因此这种方法在处理大数据集时效率很高。基于网格的方法可以在网格单元划分的基础上,与基于密度的方法、基于层次的方法等结合使用。

基于模型的方法(Model-based Method)假定数据集满足一定的分布模型,找到这样的分布模型,就可以对数据集进行聚类。基于模型的方法主要包括基于统计和基于神经网络两大类,前者以高斯混合模型(Gaussian Mixture Models,GMM)为代表,后者以自组织映射网络(Self Organizing Map,SOM)为代表。目前以基于统计模型的方法为主。

以下内容后续补充:

数据示例:

数据示例:

为了有效利用聚类算法, 首先需要度量观测值见的距离,在R中常通过stats包里的dist函数来实现:
dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
dist 函数计算对象(矩阵或数据框)中两两间的距离,返回的是距离矩阵(dist类对象)。dist函数的参数描述如下。

另一个计算点之间的距离的方法是cluster包里面的daisy函数:

daisy函数计算数据集中每对观测值的不相似度。daisy函数的参数描述如下:

k-means聚类是最简单的聚类算法之一。R中可以通过stats包里面的kmeans函数实现k-means聚类:
kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"), trace=FALSE)
kmeans函数的参数描述如下:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式