各类聚类(clustering)算法初探

您所在的位置:网站首页 hann是什么意思 各类聚类(clustering)算法初探

各类聚类(clustering)算法初探

2023-09-19 03:30| 来源: 网络整理| 查看: 265

1. 聚类简介 0x1:聚类是什么?

聚类是一种运用广泛的探索性数据分析技术,人们对数据产生的第一直觉往往是通过对数据进行有意义的分组,通过对对象进行分组,使相似的对象归为一类,不相似的对象归为不同类。

0x2:聚类的悖论

在研究聚类算法原理以及应用聚类算法的时候,我们自己首先要明白,聚类算法并不总是有效,甚至是完全不合理的。我们称其为”聚类的悖论“,之所以会出现悖论,主要的原因是:

”相似对象归为一类,不相似对象归为不同类“这两个目标在很多情况下是互相冲突的。从数学上讲,虽然聚类共享具有等价关系甚至传递关系,但是相似性(或距离)不具有传递关系。具体而言,假定有一对象序列,X1,....,Xm,所有相邻元素(Xi-1、Xi+1)两两都非常相似,但是X1和Xm非常不相似。这种情况常常发生在cluster超过一定尺寸的时候,元素之间的传递性假设在这些场景下不一定100%成立。 聚类是一种无监督学习,即我们不能预测label,因此对于聚类,我们没有明确的成功评估过程。当然也不是完全没有任何的聚类效果评价指标,分类效用(category utility)就是一个理论上的评价指标。 对于一个给定的对象集合,可以有多种有意义的划分方式,这可能是因为对象间的距离(或相似性)有多种隐式的定义,例如将演讲者的录音根据演讲者的口音聚类或根据内容聚类。所以,给定一个数据集,有多种不同的聚类解决方案 0x3:聚类的公理化描述

对于各种各样的聚类算法,有没有一些基本性质是独立于具体算法或任务的呢?很多人尝试对聚类提出一个公理化的定义,让我们讨论Kleninberg(2003)提出的尝试方法:

考虑一个聚类函数F,将任意有限域X及不相似函数d作为输入,返回X的一个划分

1. 尺度不变性(SI)

对任意的域集 X,不相似函数 d,以及任意的 a > 0,下式成立:

尺度不变性是一种非常自然的要求,因为如果聚类函数输出的结果依赖于测量点之间的距离测度单元,那将显得十分奇怪和不合理。

2. 丰富性(Ri)

对任意的有限集 X 和划分 C = (C1,C2,....,Ck)(划分到非空子集),存在多种不相似函数 d 使得下式成立:

丰富性要求主要想说明聚类函数的输出是由函数 d 全权决定,也是一种十分直观的特征。

3. 一致性(Co)

如果 d 和 d' 都是 X 上的不相似函数,对任一,根据 F(X,d):

如果 x,y 属于同一类,则 如果 x,y 属于不同类,则

一致性要求是和聚类基本定义相关的要求,我们希望相似的点聚到一类,不相似的点分属不同类,因此共享同类的点更相似,已经分离的点不相似,聚类函数应当对之前的聚类决策有很强的“支撑”作用。

值得注意的是,Kleinberg在2003已经给出了下述“不可能”结论!

不存在一个函数F同时满足上述三种属性:尺度不变性,丰富性,一致性

但是,Kleninberg的“不可能”结论可以通过改变属性的限制范围来规避。即不用100%满足上述三条件

例如,如果讨论含固定数量参数的聚类函数,很自然地将丰富性改为 k-丰富性(即,将域划分到k个子集,这个限制比丰富性RI原则更松散一些)。k-均值聚类满足k-丰富性、尺度不变性和一致性,因此能够达到一致。或者可以放松一致性属性。

笔者思考:

给定一项任务,聚类函数的选取必须考虑该任务的特定属性(是否可以放松要求,又是否有一些地方是需要强要求)。没有统一的聚类解决方案,就像没有一种分类算法能够对每一项可学习任务都能学习(no free lunch定理)。和其他分类预测一样,聚类必须考虑特定任务的先验知识。

0x4:数据挖掘对聚类的典型泛化要求

不同的算法有着不同的应用背景,有的适合大数据集,可以发现任意形状的聚类;有的算法思想简单直观,适用于小数据集。总的来说,算法都试图从不同途径实现对数据集进行高效、可靠的聚类。数据挖掘对聚类的典型要求包括:

1. 可伸缩性:

当聚类对象由几百上升到几百万,我们希望最后的聚类结果的准确度能保持一致

2. 处理不同类型属性的能力:

有些聚类算法,其处理对象的属性的数据类型只能是数值类型,但是在实际应用场景中,我们往往会遇到其他类型的数据(例如二元数据),分类数据等等,虽然我们也可以在预处理数据时将这些其他类型的数据转换成数值型数据,但是在聚类效率上或者聚类准确度上往往会有折损

3. 发现任意形状的类簇:

因为许多聚类算法是基于距离(例如欧式距离或曼哈顿距离)来量化实例对象之间的相似度的,基于这种方式,我们往往只能发现相似尺寸和密度的球状类簇或者凸形类簇。但是在很多场景下,类簇的形状可能是任意的

4. 对聚类算法初始化参数的知识需求的最小化:

很多算法在分析过程中需要开发者提供一定的参数(例如期望的类簇K个数、类簇初始质心),这导致了聚类结果对这些参数是十分敏感的,这不仅加重了开发者的负担,也非常影响聚类结果的准确性

5. 处理噪声数据的能力:

所谓的噪声数据,可以理解为影响聚类结果的干扰数据,这些噪声数据的存在会造成聚类结果的“畸变”,最终导致低质量的聚类

6. 增量聚类和对输入次序的不敏感:

一些聚类算法不能将新加入的数据插入到已有的聚类结果,输入次序的敏感是指,对于给定的数据对象集合,以不同的次序提供输入对象时,最终产生的聚类结果的差异会比较大

7. 高维性:

有些算法只适合处理2维或者3维的数据,而对高维数据的处理能力很弱,因为在高维空间中数据的分布可能十分稀疏,而且高度倾斜。

8. 基于约束的聚类:

在实际应用中可能需要在各种条件下进行聚类,因为同一个聚类算法,在不同的应用场景中所带来的聚类结果也是各异的,因此找到满足“特定约束”的具有良好聚类特性的数据分组是十分有挑战的。这里最困难的问题就在于如何是识别我们要解决的问题中隐含的“特定约束”具体是什么,以及该使用什么算法来最好的“适配”这种约束

9. 可解释性和可用性:

我么希望得到的聚类结果都能用特定的语义、知识进行解释,和实际的应用场景相联系

0x5:聚类的大致分类

聚类是将数据对象的集合分成相似的对象类的过程,使得同一个簇(或类)中的对象之间具有较高的相似性,而不同簇中的对象具有较高的相异性。

按照聚类的尺度,聚类方法可被分为以下三种:

基于距离的聚类算法:基于距离的聚类算法是用各式各样的距离来衡量数据对象之间的相似度 基于密度的聚类方法:基于密度的聚类算法主要是依据合适的密度函数进行类间聚类 基于互连性的聚类算法:基于互连性的聚类算法通常基于图或超图模型,将高度连通的对象聚为一类 0x6:信息瓶颈 - 信息论视角下的聚类算法理解

信息瓶颈是由 Tishby,Pereira和 Bialek 提出的聚类技术,其概念来源于信息论。

用一个文本聚类的问题来解释这个概念,假设我们将每个文本表示为一个词袋,即,每个文档都是一个向量

其中 n 是字典的长度,当且仅当第 i 个词在文档中出现。给定一个有 m 个文档的集合,我们可以将 m 个文档的词袋表示理解为随机变量 x 的联合概率分布,指示文档的身份,以及一个随机变量 y,指示单词在词典中的身份。

根据这种解释,信息瓶颈是指:将聚类属性表示为另一个随机变量C(归纳到具体的类别 k 中)(其中 k 同样由方法确定)。一旦将 x,y,C 表述为随机变量,我们可以使用信息论中的方法来表示聚类目标。

信息瓶颈的目标是:

其中是两个随机变量的互信息,在每个点分属聚类的所有可能概率分布中求取极小值。

直观上讲,我们希望达到两个矛盾的目标。

一方面,我们希望文档属性和聚类属性的互信息尽可能小,这反映了我们希望对原始数据进行强压缩。 另一方面,我们希望聚类变量和词属性的互信息尽可能大,这反映了保留文档信息(用词在文档中出现来表示)的目标。将参数统计中的最小充分统计量推广到了任意分布。

解信息瓶颈准则下的最优化问题通常是非常困难的,解决方案思路上类似EM准则。

0x7:分类效用(category utility) - 聚类效果评价指标

分类效用度量的是聚类算法将实例集分隔成聚类的总体质量。需要注意的是,分类效用不是以MDL为基础的,而是一个类似于定义在条件概率上的二次损失函数,它借助了信息论中互信息的一些思想理念。

C1,C2,...,Ck 是 k 个聚类,外层的求和是针对每一个聚类的 内层两个求和分别是针对每个属性和每个实例的 ai 代表第 i 个属性,它的值有 vi1,vi2,....,vij,一共要处理 j 个

我们来分析一下上面这个分类效用CU公式。

聚类的意义不仅仅在于分类就完了,而更多是聚类后的结果对数据集的结构的发掘,对后续分类的帮助,即有利于更好地预测聚类中实例的属性值。 对于聚类结果 Cl 中的某个实例,属性 ai 的值为 vij 的概率是 Pr[ai=vij | Cl],相对于概率 Pr[ai=vij]来说,是一个更好的估计,因为实例所在的聚类起到降低不确定性的作用,换句话说,聚类结果提供了有价值的信息,提高了分类结果的精确度。公式用两个概率的平方差来度量。 外部的 Pr[Cl] 以及除以 k 是考量整个聚类结果的复杂性,防止过度拟合。否与,由于概率是累计所有适当的实例获得的,每个实例单独作为一个聚类是数学上最好的结果。

Relevant Link:

《深入理解机器学习 - 从原理到算法》 http://blog.csdn.net/itplus/article/details/10087581 http://www.sohu.com/a/193777221_473283

 

2. K-Means算法(K-means clustering K均值聚类算法) - 基于硬划分的聚类 0x1:K-means算法模型

一种流行的聚类算法是首先对可能的聚类定义一个代价函数,聚类算法的目标是寻找一种使代价最小的划分。

在这类范例中,聚类任务转化为一个优化问题,目标函数是一个从输入(X,d)和聚类方案 C = (C1,C2,....,Ck)映射到正实数(即损失值)的函数。

给定这样一个目标函数,我们将其表示为 G,对于给定的一个输入(X,d),聚类算法的目标被定义为寻找一种聚类 C 使 G((X,d),C) 最小。

其中,Ci 中心点被定义为:

所以上式也可以写成如下形式:

上述定义的损失函数,将聚类问题转换为了一个优化问题,但是要注意的是,理论和实际的工程化是存在一定的差距的。

k均值目标函数在实际的聚类应用中很常见。然而,事实证明寻找k均值(k-means)算法的最优解通常是计算不可行的(NP问题)。所以通常会用下面这种简单的迭代算法作为替代算法

因此,多数情况下,k均值聚类值得是这种算法的结果而不是最小化 k 均值目标函数的结果。

在学习具体的 K-means 算法细节之前,我们需要了解 K-means 原生存在的一些问题:

k均值算法的目标函数优化过程是单调非增的(也就是每次的迭代至少不会让结果更糟),但是 k均值算法本身对达到收敛的迭代次数并没有给出理论保证。 算法给出的 k均值目标函数输出值和目标函数的最小可能值之差,并没有平凡下界,实际上,k均值可能会收敛到局部最小值。为了提高 k均值的结果,通常使用不同的随机初始化中心点,将该程序运行多次,并选取最优的结果。除此之外,有一些无监督的算法可以作为 k均值算法的前置算法,用来选取初始化中心。 在训练集上根据距离平方总和标准得到的”最佳“聚类,将不可避免地选择与数据点一样多的聚类!因为此时损失为0,为了抑制这种倾向,需要应用MDL准则进行模型结构复杂性惩罚,在模型复杂度和损失目标最优化之间寻求一个平衡。 0x2:K-means算法过程

kMeans聚类算法是数据挖掘十大算法之一,算法需要接受参数 k(k 个初始聚类中心)(也可由算法随机产生指定),即将数据集进行聚类的数目和k个簇的初始聚类“中心”,结果是同一类簇中的对象相似度最高,不同类簇中的数据相似度最低,其聚类过程可以用下图表示

如图所示,数据样本用圆点表示,每个簇的中心点用叉叉表示

1. 聚类中心个数K

聚类中心的个数K需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。有几种可能的策略可以缓解这种问题。

1)遍历尝试所有k值

这个过程会是一个漫长的调试过程,我们通过设置一个[k, k+n]范围的K类值,然后逐个观察聚类结果,最终决定该使用什么K值对当前数据集是最佳的

2)小数据集抽样试验

在实际情况中,往往是对特定的数据集有对应一个最佳的K值,而换一个数据集,可能原来的K值效果就会下降。但是同一个项目中的一类数据,总体上来说,通过一个抽样小数据集确定一个最佳K值后,对之后的所有K值都能获得较好的效果。

3)启发式分裂探索策略

另一种可能的方法是开始先找出很少几个聚类,然后决定是否值得将它们分裂。

我们可以选择k=2,执行k均值聚类直到它终止,然后考虑分裂每个聚类。

分裂聚类的一种方法是在变化最大的方向、距离聚类中心一个标准差的位置产生一个新的种子,随后在反方向、等距建立第二个种子。然后基于这两个新的种子,对聚类中的点进行k均值聚类。

聚类分裂暂时完成时,是否值得保留分裂,或者原来的聚类也是合理的?查看所有点离聚类中心距离的平方和是不合理的,因为量子子聚类的和一定是较小的。这个时候需要引入MDL原则,为每新建一个聚类引入惩罚。在分裂与聚类效果之间寻求最佳平衡。

2. 初始聚类中心(质心)的选择

刚开始时是原始数据,杂乱无章,没有label,看起来都一样,都是绿色的

Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。在实际使用中我们往往不知道我们的待聚类样本中哪些是我们关注的label,人工事先指定质心基本上是不现实的,在大多数情况下我们采取随机产生聚类质心这种策略

假设数据集可以分为两类,令K = 2,随机在坐标上选两个点,作为两个类的中心点(聚类质心)

3. 确定了本轮迭代的质心后,将余下的样本点根据距离度量标准进行归类

这一步也非常直观,计算样本点和所有质心的“距离”,选取“距离”最小(argmin)的那个质心作为该样本所属的类别。

这里要注意的是,特征空间中两个实例点的距离是两个实例点相似程度的反映,高维向量空间点的距离求解,可以泛化为Lp距离公式,它在不同的阶次数中分为不同的形式

p = 1:Manhattan Distance距离(曼哈顿距离): p = 2:Euclidean Distance距离(欧拉距离): p = λ( 3 (x1,x2,...,xm),邻域参数(ϵ,MinPts), 样本距离度量方式

输出: 簇划分C. 

可以看到,DBSCAN在不断发现新的核心点的同时,还通过直接密度可达,发现核心点邻域内的核心点,并把这些邻域内的核心点都归纳到第 k 个聚类中。而噪音点没每轮 k 聚类中会被全局过滤不会参与下一轮启发式发现中,只有边界点在下一次跌打中会被再次尝试检验是否能够成为新聚类的核心点

0x3:hello world!DBSCAN # -*- coding:utf-8 -*- import numpy as np from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.datasets.samples_generator import make_blobs from sklearn.preprocessing import StandardScaler # ############################################################################# # Generate sample data centers = [[1, 1], [-1, -1], [1, -1]] X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4, random_state=0) X = StandardScaler().fit_transform(X) # ############################################################################# # Compute DBSCAN db = DBSCAN(eps=0.3, min_samples=10).fit(X) print db.labels_ core_samples_mask = np.zeros_like(db.labels_, dtype=bool) print core_samples_mask core_samples_mask[db.core_sample_indices_] = True labels = db.labels_ # Number of clusters in labels, ignoring noise if present. n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) print('Estimated number of clusters: %d' % n_clusters_) print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels)) print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels)) print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels)) print("Adjusted Rand Index: %0.3f" % metrics.adjusted_rand_score(labels_true, labels)) print("Adjusted Mutual Information: %0.3f" % metrics.adjusted_mutual_info_score(labels_true, labels)) print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, labels)) # ############################################################################# # Plot result import matplotlib.pyplot as plt # Black removed and is used for noise instead. unique_labels = set(labels) colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))] for k, col in zip(unique_labels, colors): if k == -1: # Black used for noise. col = [0, 0, 0, 1] class_member_mask = (labels == k) xy = X[class_member_mask & core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=14) xy = X[class_member_mask & ~core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=6) plt.title('Estimated number of clusters: %d' % n_clusters_) plt.show()

Relevant Link: 

http://shiyanjun.cn/archives/1288.html https://en.wikipedia.org/wiki/DBSCAN https://www.cnblogs.com/hdu-2010/p/4621258.html http://blog.csdn.net/itplus/article/details/10088625 https://www.cnblogs.com/pinard/p/6208966.html http://blog.csdn.net/xieruopeng/article/details/53675906 http://www.cnblogs.com/aijianiula/p/4339960.html http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

 

6. Clustering by fast search and find of density peaks(CFSFDP聚类)- 基于密度(Density)的聚类

该算法是Alex Rodriguez和Alessandro Laio在Science上发表的《Clustering by fast search and find of density peaks》所提出的一种新型的基于密度的聚类算法。

0x1:算法思想

该聚类算法的核心思想在于对聚类中心(cluster centers)的刻画上,算法认为聚类中心同时具有以下两个特点:

1. 聚类中心本身密度大,即它被密度均不超过它的邻居包围,或者说聚类中心是整个簇中密度最大的点; 2. 聚类中心与其他密度更大的数据点之间的“距离”相对更大; 0x2:算法模型

该算法的假设类簇(cluster centers)的中心由一些局部密度比较低的点围绕,并且这些点距离其他有高局部密度的点的距离都比较大。

对于样本集中的任何数据点s,可以定义两个值:局部密度ρi以及到高局部密度点的距离δi,这两个值仅仅取决于两点之间的距离dij。

1. 局部密度ρi

包括 Cut-off kernel 和 Gaussian kernel 两种计算方式:

1)Cut-off kernel:阶跃统计函数,只关注数据点是否在dc阈值范围内

其中函数

参数称为截断距离(cutoff distance),需要在算法启动时显式指定。从该模型公式中可以看出,局部密度 ρi 表示的是样本集 S 中与数据点 xi 之间的的距离小于 dc 的数据点。

这里 dc 可以理解为一个边界阈值,dc 设置的越小,表示希望算法对聚类的敏感度越高,即在尽可能小的区域内发现聚类社区。

2)Gaussian kerne:柔性距离统计函数

和 cut-off kernel一样,与 x 的距离小于 dc 的数据点越多,pi 的值越大。

对比上面两式可以看出,cut-off kernel为离散值,Gaussian kernel为连续值,因此,相对来说,Gaussian产生冲突(即不同的数据点具有相同的局部密度值)的概率更小

2. 到高局部密度点的距离δi

表示数据点局部密度的一个降序排列下标序,即它满足:

则可以定义:

这个公式非常优美,它定义了:

1)当 Xi 具有最大局部密度时,δi 表示 S 中与 Xi 距离最大的数据点与 Xi 之间的距离; 2)否则,δi 表示在所有局部密度大于 Xi 的数据点中(即其他cluster centers),与 Xi 距离最小的那个(或那些)数据点与 Xi 之间的距离。 0x3:聚类过程

至此,对于 S 中的每一个数据点 Xi,可以通过进行抽象表征。考虑下图的例子,其中包含28个二维数据点,将二元对在平面上画出来。

我们看到,1号和10号数据点由于同时具有较大的局部密度和类间距离,于是从数据集中“脱颖而出(pop up)”了,而这两个数据点恰好是左图中数据集的两个聚类中心。

此外,26,27,28这三个数据点在原始数据集中是“离群点”,它们在右图中也很有特点:其局部密度很小,类间距离很大。

从直观上来理解,上面右图对确定聚类中心(cluster centers)有决定性作用,因此也将这种由对应的图称为决策图(decision graph)。

聚类中心确定之后,剩余点被分配给与其具有较高密度的最近邻居相同的类簇。与其他迭代优化的聚类算法不同,类簇分配在单个步骤中执行。

在聚类分析中, 通常需要确定每个点划分给某个类簇的可靠性。

在该算法中, 可以首先为每个类簇定义一个边界区域(border region), 亦即划分给该类簇但是距离其他类簇的点的距离小于dc的点,这个区域中的点集可以认为是圈出了聚类中心的整体。然后为每个类簇找到其边界区域的局部密度最大的点,该类簇中所有局部密度大于该点的局部密度的点被认为是类簇核心的一部分(亦即将该点划分给该类簇的可靠性很大),其余的点被认为是该类簇的光晕, 亦即可以认为是噪音(outlier)。

图A表示点分布,其中包含非球形点集和双峰点集。B和C分别表示4000和1000个点按照A中模式的分布,其中点根据其被分配的不同类簇着色,黑色的点属于类簇光晕。D和E是对应的决策图,而F表示的是不同点量下不正确聚类点的比率,误差线代表平均值的标准差。

下图是分别利用点集和Olivetti脸部图片集的聚类结果

0x4:算法形式化描述

设待聚类数据集,其包含个cluster

值得注意的是,该聚类算法得到的聚类中心可以作为其他聚类算法(例如k-means)的初始聚类中心。

Relevant Link:

http://science.sciencemag.org/content/344/6191/1492 https://segmentfault.com/a/1190000011337432 https://blog.csdn.net/itplus/article/details/38926837

 

7. SOM(Self-organizing Maps)- 基于模型的聚类(model-based methods)

基于模型的方法给每个聚类假定一个模型(预先设定),然后寻找能够很好地满足这个模型的数据集。这样一个模型可能是数据点在空间中的密度分布函数或者其他。它的一个潜在的假定就是:

目标数据集是由一系列的概率分布所决定的

通常有两种尝试方向:统计方案;和神经网络方案

关于神经网络方案方面的讨论可以参阅我之前的一篇blog

Relevant Link:

http://www.cnblogs.com/LittleHann/p/7101992.html

 

8. GMM(Gaussian Mixture Model, 高斯混合模型)- 基于概率的聚类(probability-based methods) 0x1:传统硬分类(hard decision)聚类算法存在的挑战 以分类效用公式为驱动力的聚类算法,为了避免过度拟合必须选择除数k,即需要提供一个人为的聚类标准差最小值,以及为避免每个实例成为一个聚类的特定的截止值 增量启发式算法本身存在不确定性: 结果在多大程度上依赖于实例的输入顺序 合并、分裂等局部重建操作是否足以扭转由于不好的实例次序所带来的糟糕的初始决定 最终结构是否代表分类效用的局部最大值 无法知道最终的结果离全局最大值到底有多远 结果的层次性也不能回避哪个是最好的聚类这个问题 互斥的聚类划分引入了脆弱性,位于灰色地带的样本很可能会被错误地分到错误的聚类中。同时不小心引入的离群点可能会极大地破坏原本有效的聚类划分

为了缓解上述问题,一个更为理论性的统计学方法可以克服聚类问题的部分上述缺点。

从概率的角度看,聚类的目标是寻找给定数据的最有可能的集合。由于任何有限数量的证据都不足以对某件事做完全肯定的结论,所以实例甚至是训练实例也不能绝对地被分在这个聚类或那个聚类。而应当说实例都以一定的可能性分属于每个聚类。这有助于消除那些硬性而快速的判断方案引发的脆弱性。

0x2:概率聚类基本概念

统计聚类的基础是建立在一个称为有限混合(finite mixture)的统计模型上。

混合是指用k个概率分布代表k个聚类,控制聚类成员的属性值。换句话说,对某个具体实例,每个分布给出假设已知实例属于这个聚类,并且它有某组属性值集合的概率(即 P(v | C))。

每个聚类都有不同的分布,任何具体实例”实际上“属于且只属于一个聚类,但不知道是哪个。最后,各个聚类并不是等可能的,存在某种反映它们相对总体数量的概率分布。

以一维情况为例,最简单的有限混合情况是在一个一维坐标轴上的数值属性,每个聚类都是一个高斯分布,但有不同的均值和方差。我们的目标是计算每个聚类的平均值和方差,以及聚类之间的总体分布。混合模型将几个正态分布组合起来,它的概率密度函数看起来就像一组连绵的山脉,每座山峰代表一个高斯分布。

一个二类混合模型

上图中有两个聚类A和B,每个都呈正态分布,

聚类A的均值和标准差分别是μA和σA 聚类B的均值和标准差分别是μB和σB 从这些分布中抽样,聚类A的抽样概率为pA,聚类B的抽样概率为pB,pA+pB=1

现在,想象所给的数据集没有类值,只有数据,要求确定模型的5个参数:(μA,σA,μB,σB,pA),这就是有限混合问题。

0x3:概率聚类训练

关于使用EM算法训练GMM模型的相关讨论,可以参阅另一篇文章。

0x4:混合模型预测

如果5个参数一致,要找出某个给定实例来自每种分布的概率是很简单的。给定实例x,它属于聚类A的概率是:

这里,是聚类A的正态分布函数,即:

在做比较时,分母Pr[x]会被消除,只要比较分子大小即可。这和朴素贝叶斯分类是一样的,都是简单的贝叶斯定理的应用。

Relevant Link: 

https://baike.baidu.com/item/GMM/4258031?fr=aladdin

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3