2.3. 聚类#
Clustering 可以使用模块执行未标记数据 sklearn.cluster
.
每个集群算法有两个变体:一个类,它实现 fit
学习火车数据上的集群的方法,以及一个函数,在给定火车数据时,该函数返回与不同集群相对应的整组标签。对于班级,训练数据上的标签可以在 labels_
属性
2.3.1. 集群方法概述#

scikit-learn中聚类算法的比较#
方法名称 |
参数 |
扩展性 |
用例 |
几何形状(使用公制) |
---|---|---|---|---|
聚类数 |
非常大 |
通用,均匀的簇大小,扁平的几何形状,不太多的簇,感应 |
点之间的距离 |
|
衰减、样本偏好 |
无法使用n_samples进行扩展 |
集群多、集群大小不均匀、几何形状不平坦、感性 |
图距离(例如最近邻图) |
|
带宽 |
不可扩展 |
集群多、集群大小不均匀、几何形状不平坦、感性 |
点之间的距离 |
|
聚类数 |
介质 |
很少的集群,甚至集群大小,非平坦的几何形状,可转换的 |
图距离(例如最近邻图) |
|
集群数量或距离阈值 |
大 |
许多集群,可能是连接性限制,可转换的 |
点之间的距离 |
|
聚类数或距离阈值、链接类型、距离 |
大 |
许多聚类,可能是连接性约束,非欧几里德距离, |
任何成对距离 |
|
邻域大小 |
非常大 |
非平坦几何形状、不均匀的集群大小、离群值去除、转换 |
最近点之间的距离 |
|
最小聚类成员,最小点邻居 |
大 |
非平坦几何结构、不均匀的集群大小、离群点去除、转换、分层、可变的集群密度 |
最近点之间的距离 |
|
最小聚类成员数 |
非常大 |
非平坦几何形状、不均匀的集群大小、可变的集群密度、离群值去除、转换 |
点之间的距离 |
|
许多 |
不可扩展 |
扁平几何形状,适合密度估计,感性 |
马哈拉诺比斯与中心的距离 |
|
分支因子、阈值、可选的全局集群。 |
大 |
大型数据集、离群值删除、数据简化、归纳 |
点之间的欧几里得距离 |
|
聚类数 |
非常大 |
通用、均匀的集群大小、平坦的几何形状、没有空集群、归纳、分层 |
点之间的距离 |
当集群具有特定形状(即非平坦多管)并且标准欧几里得距离不是正确的度量时,非平坦几何集群很有用。这种情况出现在上图的顶部两行。
中描述了用于聚类的高斯混合模型, another chapter of the documentation 致力于混合模型。KMeans可以被视为高斯混合模型的特例,每个分量的协方差相等。
Transductive 集群方法(与 inductive 集群方法)并不是为了应用于新的、不可见的数据而设计的。
示例
归纳集群 :用于处理新数据的归纳集群模型的示例。
2.3.2. K-means#
的 KMeans
算法通过尝试将样本分成n个方差相等的组来聚类数据,最小化称为 inertia 或群内平方和(见下文)。此算法需要指定集群的数量。它可以很好地扩展到大量样本,并已用于许多不同领域的广泛应用领域。
k-means算法划分一组 \(N\) 样品 \(X\) 成 \(K\) 不相交的聚类 \(C\) ,每个都用平均值来描述 \(\mu_j\) 集群中样本的数量。这些平均值通常被称为集群“重心”;请注意,一般来说,它们不是来自 \(X\) ,尽管他们生活在同一个空间。
K-means算法旨在选择最小化 inertia ,或者 within-cluster sum-of-squares criterion :
惯性可以被认为是衡量集群内部一致性程度的指标。它存在各种缺点:
惯性假设集群是凸的且各向同性的,但事实并非总是如此。它对细长的集群或形状不规则的多管齐反应较差。
惯性不是一个标准化指标:我们只知道越小的值越好,零是最佳的。但在非常高维度的空间中,欧几里得距离往往会变得膨胀(这是所谓的“维度诅咒”的一个例子)。运行降维算法,例如 主成分分析(PCA) 在k均值集群之前可以缓解这个问题并加速计算。

有关上述问题以及如何解决这些问题的更详细描述,请参阅示例 k均值假设的证明 和 在KMeans聚类中使用轮廓分析选择聚类数 .
K均值通常被称为劳埃德算法。基本上,该算法有三个步骤。第一步选择初始重心,最基本的方法是选择 \(k\) 数据集中的样本 \(X\) .初始化后,K-means包括在其他两个步骤之间循环。第一步将每个样本分配到其最近的重心。第二步通过取分配给每个先前重心的所有样本的平均值来创建新的重心。计算旧的和新的重心之间的差,算法重复这最后两个步骤,直到该值小于阈值。换句话说,它重复直到质心不显著移动。

K-means相当于具有小的、完全相等的对角协方差矩阵的期望最大化算法。
该算法也可以通过以下概念来理解 Voronoi diagrams .首先,使用当前重心计算点的Voronoi图。沃罗诺伊图中的每个段都成为一个单独的集群。其次,将重心更新为每个分段的平均值。然后算法重复此操作,直到满足停止标准。通常,当迭代之间目标函数的相对减少小于给定容差值时,算法就会停止。在此实现中情况并非如此:当重心移动小于容差时,迭代就会停止。
如果有足够的时间,K均值将始终收敛,但这可能是局部最小值。这高度依赖于重心的初始化。因此,计算通常要进行多次,并对重心进行不同的初始化。帮助解决此问题的一种方法是k-means++初始化方案,该方案已在scikit-learn中实现(使用 init='k-means++'
参数)。这会使重心(通常)彼此远离,从而可能比随机初始化更好的结果,如参考文献中所示。有关比较不同初始化方案的详细示例,请参阅 手写数字数据上的K-Means集群演示 和 k均值初始化影响的实证评估 .
K-means++也可以独立调用来为其他集群算法选择种子,请参阅 sklearn.cluster.kmeans_plusplus
了解详细信息和示例使用。
该算法支持样本权重,可以通过参数给出 sample_weight
.这允许在计算集群中心和惯性值时为某些样本分配更多权重。例如,为样本指定权重2相当于将该样本的副本添加到数据集 \(X\) .
示例
基于k-means的文本聚类 :使用文档集群
KMeans
和MiniBatchKMeans
基于稀疏数据K-Means++初始化的示例 :使用K-means++为其他集群算法选择种子。
2.3.2.1. 低级并行#
KMeans
通过Cython从基于BEP的并行性中受益。小块数据(256个样本)是并行处理的,此外还可以减少内存占用。有关如何控制线程数的更多详细信息,请参阅我们的 并行性 notes.
示例
k均值假设的证明 :演示k-means何时直观地执行以及何时不执行
手写数字数据上的K-Means集群演示 :聚集手写数字
引用#
"k-means++: The advantages of careful seeding" 亚瑟、大卫和谢尔盖·瓦西维茨基, Proceedings of the eighteenth annual ACM-SIAM symposium on Discrete algorithms ,工业与应用数学学会(2007年)
2.3.2.2. 小批量K均值#
的 MiniBatchKMeans
是 KMeans
该算法使用小批量来减少计算时间,同时仍试图优化相同的目标函数。小批量是输入数据的子集,在每次训练迭代中随机采样。这些小批量极大地减少了收敛到本地解决方案所需的计算量。与缩短k均值收敛时间的其他算法相比,迷你批量k均值产生的结果通常只比标准算法稍差。
该算法在两个主要步骤之间迭代,类似于vanilla k-means。第一步, \(b\) 从数据集中随机抽取样本,形成迷你批次。然后将这些分配给最近的重心。在第二步中,更新重心。与k均值相反,这是基于每个样本进行的。对于迷你批次中的每个样本,通过获取样本和分配给该重心的所有之前样本的流平均值来更新分配的重心。这具有降低重心随时间变化率的效果。执行这些步骤,直到达到收敛或预定的迭代次数。
MiniBatchKMeans
收敛得比 KMeans
,但结果的质量降低了。实际上,这种质量差异可能相当小,如示例和引用的参考文献所示。

示例
基于k-means的文本聚类 :使用文档集群
KMeans
和MiniBatchKMeans
基于稀疏数据
引用#
"Web Scale K-Means clustering" D.斯卡利, Proceedings of the 19th international conference on World wide web (2010年)
2.3.3. 仿射传播#
AffinityPropagation
通过在样本对之间发送消息直到收敛来创建集群。然后使用少量样本来描述数据集,这些样本被识别为最能代表其他样本的样本。在对之间发送的消息表示一个样本是否适合成为另一个样本的样本,该样本会根据其他对的值进行更新。这种更新迭代地发生,直到收敛,此时选择最终的样本,从而给出最终的集群。

Affinity Propagation可能很有趣,因为它根据提供的数据选择集群的数量。为此,两个重要参数是 preference ,它控制使用的样本数量,以及 damping factor 这会抑制责任和可用性消息,以避免更新这些消息时的数字振荡。
亲和力传播的主要缺点是其复杂性。该算法具有数量级的时间复杂度 \(O(N^2 T)\) ,在哪里 \(N\) 是样本数量和 \(T\) 是收敛之前的迭代次数。此外,内存复杂性达到了 \(O(N^2)\) 如果使用密集相似性矩阵,但如果使用稀疏相似性矩阵,则可简化。这使得亲和力传播最适合中小规模的数据集。
算法描述#
点之间发送的消息属于两种类别之一。首先是责任 \(r(i, k)\) ,这是样本的积累证据 \(k\) 应该作为样本的样本 \(i\) .其次是可用性 \(a(i, k)\) 这是收集到的证据 \(i\) 应该选择样品 \(k\) 作为其示例,并考虑所有其他样本的值 \(k\) 应该是一个典范。通过这种方式,如果样本(1)与许多样本足够相似并且(2)被许多样本选择以代表其自身,则由样本选择样本。
更正式地说,样本的责任 \(k\) 成为样本的典范 \(i\) 给出者:
哪里 \(s(i, k)\) 是样本之间的相似性 \(i\) 和 \(k\) .样品的可用性 \(k\) 成为样本的典范 \(i\) 给出者:
首先,所有价值观 \(r\) 和 \(a\) 被设置为零,并且每次的计算都会迭代直到收敛。如上所述,为了避免更新消息时的数字振荡,衰减因子 \(\lambda\) 引入迭代过程:
哪里 \(t\) 指示迭代次数。
示例
亲和力传播分簇算法演示 :具有3个类别的合成2D数据集上的亲和力传播
股票市场结构可视化 在金融时间序列上进行亲和传播以找到公司组
2.3.4. 均值漂移#
MeanShift
集群旨在发现 blobs 样本密度平稳。这是一种基于重心的算法,其工作原理是将重心候选更新为给定区域内点的平均值。然后在后处理阶段对这些候选项进行过滤,以消除近乎重复的,以形成最终的一组重心。
数学细节#
使用一种称为爬山的技术来迭代调整重心候选的位置,该技术可以找到估计概率密度的局部最大值。给定候选重心 \(x\) 对于迭代 \(t\) ,根据以下等式更新候选项:
哪里 \(m\) 是 mean shift 为每个重心计算的、指向点密度增加最大区域的一个动量。计算 \(m\) 我们定义 \(N(x)\) 作为给定距离内的样本的邻域, \(x\) .然后 \(m\) 使用以下等式计算,有效地将重心更新为其邻近区域内样本的平均值:
一般来说,方程 \(m\) 取决于用于密度估计的核。通用公式是:
在我们的实施中, \(K(x)\) 如果 \(x\) 足够小,否则等于0。有效 \(K(y - x)\) 指示是否 \(y\) 位于附近 \(x\) .
该算法自动设置聚类的数量,而不是依赖于参数 bandwidth
,它规定了要搜索的区域的大小。此参数可以手动设置,但可以使用提供的 estimate_bandwidth
函数,如果未设置带宽,则调用该函数。
该算法的可扩展性不高,因为它需要在算法执行期间进行多个最近邻搜索。算法保证收敛,但当重心变化很小时,算法将停止迭代。
通过寻找给定样本的最近重心来执行新样本的标记。

示例
均值漂移集群算法的演示 :对具有3个类别的合成2D数据集进行Mean Change集群。
引用#
"Mean shift: A robust approach toward feature space analysis" D.科马尼丘和P·米尔, IEEE Transactions on Pattern Analysis and Machine Intelligence (2002)
2.3.5. 谱聚类#
SpectralClustering
执行样本之间的亲和力矩阵的低维嵌入,然后进行集群,例如,通过KMeans,计算低维空间中特征量的分量。如果亲和力矩阵是稀疏的并且 amg
solver is used for the eigenvalue problem (Note, the amg
solver requires that the pyamg 模块已安装。)
当前版本的SpectralFlowering要求提前指定集群数量。它对少数集群效果良好,但不建议对许多集群使用。
对于两个集群,SpectralFlowering解决了 normalized cuts 相似性图上的问题:将图切成两半,以便与每个集群内的边的权重相比,切割的边的权重较小。当处理图像时,这个标准特别有趣,其中图的顶点是像素,并且相似性图的边缘的权重是使用图像的梯度的函数计算的。
noise_IMG segmented_IMG
警告
将距离转化为行为良好的相似性
请注意,如果相似性矩阵的值分布不均匀,例如具有负值或具有距离矩阵而不是相似性,则谱问题将是奇异的,并且该问题无法解决。在这种情况下,建议对矩阵的条目应用转换。例如,在有符号距离矩阵的情况下,通常应用热核:
similarity = np.exp(-beta * distance / distance.std())
请参阅此类应用程序的示例。
示例
用于图像分割的光谱集群 :使用光谱集群将对象从嘈杂背景中分割出来。
按地区划分希腊硬币的图片 :光谱集群将硬币图像分割为区域。
2.3.5.1. 不同的标签分配策略#
可以使用不同的标签分配策略,对应于 assign_labels
参数 SpectralClustering
. "kmeans"
策略可以匹配更细的细节,但可能不稳定。特别是,除非你控制 random_state
,它可能无法逐运行重复,因为它依赖于随机初始化。替代 "discretize"
该策略是100%可重复的,但往往会创建相当均匀和几何形状的包裹。最近添加的 "cluster_qr"
选项是一种确定性替代方案,它倾向于在下面的示例应用程序上创建视觉上最佳的分区。
|
|
|
---|---|---|
引用#
"Multiclass spectral clustering" 斯特拉·X余,施建波,2003
"Simple, direct, and efficient multi-way spectral clustering" 阿尼尔·达姆勒(Anil Damle)、维克多·明登(Victor Minden)、乐兴·英(Lexing Ying)、2019
2.3.5.2. 谱聚集图#
谱集群还可以用于通过其谱嵌入来分区图。 在这种情况下,亲和力矩阵是图的邻近矩阵,SpectralFlowering初始化为 affinity='precomputed'
>>> from sklearn.cluster import SpectralClustering
>>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
... assign_labels='discretize')
>>> sc.fit_predict(adjacency_matrix)
引用#
"A Tutorial on Spectral Clustering" 乌尔里克·冯·卢克斯堡,2007年
"Normalized cuts and image segmentation" 施建波,吉滕德拉·马利克,2000
"A Random Walks View of Spectral Segmentation" 玛丽娜·梅拉,施建波,2001
"On Spectral Clustering: Analysis and an algorithm" 安德鲁·Y吴,迈克尔·I乔丹,耶尔·韦斯,2001年
"Preconditioned Spectral Clustering for Stochastic Block Partition Streaming Graph Challenge" 大卫·朱茹纳什维利、安德鲁·尼亚泽夫
2.3.6. 层次聚类#
分层集群是一个通用的集群算法家族,通过连续合并或分裂嵌套集群来构建嵌套集群。该集群层次结构被表示为树(或树图)。树根是收集所有样本的独特集群,叶子是只有一个样本的集群。看到 Wikipedia page 了解更多详细信息。
的 AgglomerativeClustering
对象使用自下而上的方法执行分层集群:每个观察从其自己的集群开始,然后集群被连续合并在一起。链接标准确定用于合并策略的指标:
Ward 最小化所有集群内的平方差和。这是一种方差最小化的方法,从这个意义上说,类似于k均值目标函数,但采用凝聚分层方法来处理。
Maximum 或 complete linkage 最小化成对集群的观察之间的最大距离。
Average linkage 最小化成对集群的所有观察之间的平均距离。
Single linkage 最小化成对集群的最近观察之间的距离。
AgglomerativeClustering
当与连接性矩阵联合使用时,它还可以扩展到大量样本,但当样本之间不添加连接性约束时,计算成本很高:它在每个步骤中都考虑所有可能的合并。
2.3.6.1. 不同的联动类型:病房联动、完全联动、平均联动和单一联动#
AgglomerativeClustering
支持沃德、单一、平均和完整联动策略。

集聚集群具有“富得越富”的行为,导致集群规模不均匀。在这方面,单一联动是最糟糕的策略,沃德给出了最常规的尺寸。然而,亲和力(或集群中使用的距离)不能随Ward而变化,因此对于非欧几里得指标,平均联系是一个很好的替代方案。单一链接虽然对有噪数据不鲁棒,但可以非常有效地计算,因此有助于提供更大数据集的分层集群。单一链接也可以在非球状数据上表现良好。
示例
2D数字嵌入上的各种聚集性聚集 :在一个真实的数据集中探索不同的联系策略。
在玩具数据集上比较不同的分层链接方法 :探索玩具数据集中的不同链接策略。
2.3.6.2. 集群层次结构的可视化#
可以将代表集群分层合并的树可视化为树图。目视检查通常对于了解数据结构很有用,尽管在小样本量的情况下尤其如此。

示例
2.3.6.3. 添加连接约束#
的一个有趣的方面 AgglomerativeClustering
可以通过连通性矩阵将连通性约束添加到该算法中(只有相邻的聚类可以合并在一起),该连通性矩阵为每个样本定义了遵循给定数据结构的相邻样本。例如,在下面的swiss-roll示例中,连接性约束禁止合并在swiss roll上不相邻的点,从而避免形成跨该卷的重叠折叠延伸的聚类。
结构化
这些约束对于强加某种局部结构很有用,但它们也使算法更快,尤其是当样本数量较多时。
连接性约束是通过连接性矩阵施加的:一个Scipy稀疏矩阵,仅在行和列的交叉点处具有元素,该矩阵具有应该连接的数据集的索引。该矩阵可以根据先验信息构建:例如,您可能希望仅通过合并具有指向另一个的链接的页面来对网页进行集群。也可以从数据中学习,例如使用 sklearn.neighbors.kneighbors_graph
限制合并到最近的邻居,如在 this example ,或使用 sklearn.feature_extraction.image.grid_to_graph
仅允许合并图像上的邻近像素,如 coin example.
警告
Connectivity constraints with single, average and complete linkage
Connectivity constraints and single, complete or average linkage can enhance
the 'rich getting richer' aspect of agglomerative clustering,
particularly so if they are built with
sklearn.neighbors.kneighbors_graph
. In the limit of a small
number of clusters, they tend to give a few macroscopically occupied
clusters and almost empty ones. (see the discussion in
有结构和不有结构的集聚).
Single linkage is the most brittle linkage option with regard to this issue.




示例
硬币图像上的结构化Ward分层集群演示 :Ward集群将硬币图像分割为区域。
分层集群:结构化与非结构化病房 :Swiss-roll上的Ward算法示例,结构化方法与非结构化方法的比较。
特征聚集与单变量选择 :基于Ward分层集群的特征聚集降维示例。
2.3.6.4. 改变指标#
Single, average and complete linkage can be used with a variety of distances (or affinities), in particular Euclidean distance (l2), Manhattan distance (or Cityblock, or l1), cosine distance, or any precomputed affinity matrix.
l1 距离通常对于稀疏特征或稀疏噪音有利:即许多特征都是零,就像使用罕见词出现的文本挖掘一样。
cosine 距离很有趣,因为它不受信号的全球缩放影响。
选择度量的准则是使用一个最大化不同类中样本之间的距离,并最小化每个类中的距离的度量。



示例
2.3.6.5. 对分K均值#
的 BisectingKMeans
是的迭代变体 KMeans
,使用分裂的分层集群。不是一次创建所有重心,而是根据之前的集群逐步选择重心:一个集群被重复分成两个新集群,直到达到目标集群数量。
BisectingKMeans
效率高于 KMeans
当聚类的数量很大时,因为它只对每个二分处的数据的子集起作用, KMeans
始终适用于整个数据集。
虽然 BisectingKMeans
无法受益于 "k-means++"
通过设计初始化,它仍然会产生与之相当的结果 KMeans(init="k-means++")
就惯性而言,计算成本更低,并且可能会产生比 KMeans
具有随机初始化。
如果集群的数量与数据点的数量相比较小,则该变体对于聚集集群更有效。
该变体也不产生空簇。
- 选择要拆分的群集有两种策略:
bisecting_strategy="largest_cluster"
选择积分最多的集群bisecting_strategy="biggest_inertia"
选择具有最大惯性的聚类(具有最大误差平方和的聚类)
在大多数情况下,通过最大数量的数据点进行拾取会产生与通过惯性进行拾取一样准确的结果,而且速度更快(特别是对于大量的数据点,计算误差可能会很高)。
根据最大数量的数据点进行挑选也可能会产生相似大小的集群, KMeans
已知会产生不同大小的集群。
从示例中可以看出二分K均值和常规K均值之间的差异 二分K均值和常规K均值性能比较 .虽然常规的K-Means算法往往会创建不相关的集群,但来自Bitecting K-Means的集群排序良好,并创建了相当明显的层次结构。
引用#
"A Comparison of Document Clustering Techniques" Michael Steinbach、George Karypis和Vipin Kumar,明尼苏达大学计算机科学和Egspel系(2000年6月)
"Performance Analysis of K-Means and Bisecting K-Means Algorithms in Weblog Data" K.Abirami和P.Mayilvahanan博士,《国际工程研究新兴技术杂志》(IJETER)第4卷,第8期,(2016年8月)
"Bisecting K-means Algorithm Based on K-valued Self-determining and Clustering Center Optimization" 简迪,郭新月控制与计算机工程学院,中国河北保定(2017年8月)
2.3.7. DBSCAN#
的 DBSCAN
算法将集群视为被低密度区域分开的高密度区域。由于这种相当通用的观点,DBSCAN发现的集群可以是任何形状,而不是假设集群是凸面形状的k均值。DBSCAN的核心组件是 core samples ,它们是高密度区域的样本。因此,集群是一组核心样本,每个样本彼此靠近(通过某种距离测量),以及一组接近核心样本(但本身不是核心样本)的非核心样本。该算法有两个参数, min_samples
和 eps
,它正式定义了我们所说的意思 dense .更高 min_samples
或更低 eps
表示形成集群所需的更高密度。
更正式地,我们将核心样本定义为数据集中的样本,这样存在 min_samples
距离内的其他样本 eps
,其定义为 neighbors 核心样本的。这告诉我们,核心样本位于载体空间的密集区域。集群是一组核心样本,可以通过以下方式构建:以迭代方式获取核心样本,找到其所有邻居(即核心样本),找到所有 their 作为核心样本的邻居等等。集群还具有一组非核心样本,这些样本是集群中核心样本的邻居,但本身不是核心样本的样本。直觉上,这些样本位于星系团的边缘。
根据定义,任何核心样本都是集群的一部分。任何不是核心样本且至少是 eps
与任何核心样本的距离被算法视为离群值。
尽管参数 min_samples
主要控制算法对噪音的容忍程度(在有噪和大数据集上,可能需要增加此参数),参数 eps
是 crucial to choose appropriately 对于数据集和距离函数,通常不能保留为默认值。它控制点的本地邻近区域。当选择得太小时,大多数数据根本不会被聚集(并标记为 -1
代表“噪音”)。当选择得太大时,它会导致接近的集群合并到一个集群中,最终整个数据集作为单个集群返回。文献中已经讨论了选择该参数的一些启发式方法,例如基于最近邻距离图中的膝盖(如下参考文献中所讨论的)。
在下图中,颜色表示聚类成员,大圆圈表示算法找到的岩心样本。较小的圆圈是仍然是集群的一部分的非核心样本。此外,离群值由下面的黑点表示。
示例
执行#
DBSCAN算法是确定性的,当以相同的顺序给出相同的数据时,总是生成相同的集群。 然而,当数据以不同的顺序提供时,结果可能会有所不同。首先,即使核心样本始终被分配到相同的集群,但这些集群的标签将取决于这些样本在数据中遇到的顺序。其次也是更重要的是,分配非核心样本的集群可能会根据数据顺序而有所不同。 当非核心样本的距离低于 eps
两个核心样本在不同的集群。根据三角不等式,这两个核心样本必须比 eps
彼此之间的距离,或者它们将在同一集群中。非核心样本被分配给在数据传递中首先生成的任何集群,因此结果将取决于数据顺序。
当前的实现使用球树和kd树来确定点的邻域,这避免了计算完整的距离矩阵(就像scikit-learn 0.14之前的版本一样)。保留了使用自定义指标的可能性;有关详细信息,请参见 NearestNeighbors
.
大样本量的内存消耗#
默认情况下,此实现的内存效率不高,因为它在无法使用kd树或球树的情况下构建了完整的成对相似性矩阵(例如,具有稀疏矩阵)。这个矩阵将消耗 \(n^2\) 漂浮物。解决这个问题的几种机制是:
使用 OPTICS 与
extract_dbscan
法OPTICS集群还计算完整的成对矩阵,但一次只在内存中保留一行(内存复杂度n)。可以以内存高效的方式预先计算稀疏半径邻近图(其中缺失的条目被假设为超出eps),并且可以在此运行dbscan
metric='precomputed'
. 看到sklearn.neighbors.NearestNeighbors.radius_neighbors_graph
.可以通过删除准确的重复项(如果数据中出现这些重复项)或使用BIRCH来压缩数据集。那么大量的点只有相对较少的代表。然后您可以提供
sample_weight
安装DBSCAN时。
引用#
A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise 埃斯特,M.,H. P. Kriegel,J. Sander,and X. Xu,在第二届知识发现和数据挖掘国际会议论文集,波特兰,OR,AAAI出版社,pp. 226-231. 1996
DBSCAN revisited, revisited: why and how you should (still) use DBSCAN. 舒伯特,E.,桑德,J.,埃斯特,M.,克里格尔,H. P.,& Xu,X.(2017)。在ACN数据库系统交易(TODS)中,42(3),19。
2.3.8. HDBSCAN#
的 HDBSCAN
算法可以被视为 DBSCAN
和 OPTICS
.具体来说, DBSCAN
假设聚集标准(即密度要求)是 globally homogeneous .换句话说, DBSCAN
可能很难成功捕获不同密度的集群。 HDBSCAN
通过构建集群问题的替代表示来证实这一假设并探索所有可能的密度尺度。
备注
该实现改编自HDSCAN的原始实现, scikit-learn-contrib/hdbscan 基于 [LJ2017].
示例
2.3.8.1. 相互可达性图#
HDSCAN首先定义 \(d_c(x_p)\) , core distance 样品 \(x_p\) ,作为到其距离 min_samples
最近的邻居,数着自己。例如如果 min_samples=5
和 \(x_*\) 是的第五近邻 \(x_p\) 那么核心距离是:
Next it defines \(d_m(x_p, x_q)\), the mutual reachability distance of two points \(x_p, x_q\), as:
这两个概念使我们能够构建 mutual reachability graph \(G_{ms}\) 定义为固定的选择, min_samples
通过关联每个样本 \(x_p\) 具有图形的一个点,从而具有点之间的边 \(x_p, x_q\) 是相互可达性距离 \(d_m(x_p, x_q)\) 他们之间我们可以构建该图的子集,表示为 \(G_{ms,\varepsilon}\) ,方法是删除值大于 \(\varepsilon\) :来自原始图表。核心距离小于的任何点 \(\varepsilon\) :在这个阶段被标记为噪音。然后通过查找此修剪图的连接分量来对剩余点进行聚集。
备注
获取修剪图的连通分量 \(G_{ms,\varepsilon}\) 相当于运行DBSCAN * with min_samples
and \(\varepsilon\). DBSCAN* 是中提到的DBSCAN的稍微修改版本 [CM2013].
2.3.8.2. 层次聚类#
HDBSCAN可以被视为一种算法,可以在所有值上执行DBSCAN* 集群 \(\varepsilon\) .如前所述,这相当于为所有值找到相互可达性图的连接分量 \(\varepsilon\) .为了有效地做到这一点,HDSCAN首先从全连接的相互可达性图中提取最小生成树(MST),然后贪婪地切割具有最高权重的边。HDSCAN算法的概要如下:
提取的MST \(G_{ms}\) .
通过为每个点添加“自边”来扩展MST,权重等于基础样本的核心距离。
初始化MST的单个集群和标签。
从MST中移除具有最大重量的边缘(同时移除系杆)。
将集群标签分配给包含现已删除边的端点的连接组件。如果组件至少没有一条边,则会被分配一个“空”标签,将其标记为噪音。
重复4-5,直到不再有连接的组件。
因此,HDBSCAN能够获得DBSCAN* 可实现的所有可能分区, min_samples
以分层的方式。事实上,这允许HDSCAN跨多个密度执行集群,因此不再需要 \(\varepsilon\) 作为超参数给出。相反,它完全依赖于选择 min_samples
,这往往是一个更强大的超参数。
HDBSCAN可以使用额外的超参数进行平滑 min_cluster_size
它指定在分层集群期间,少于 minimum_cluster_size
许多样本被认为是噪音。在实践中,可以设置 minimum_cluster_size = min_samples
以耦合参数并简化超参数空间。
引用
Campello,R.J.G.B.,Moulavi,D.,Sander,J.(2013).基于层次密度估计的密度聚类。在:Pei,J.,曾,VS,Cao,L.,元田,H.,徐,G. (eds)知识发现和数据挖掘的进展。PAKDD 2013。计算机科学讲座笔记(),第7819卷。施普林格、柏林、海德堡。 Density-Based Clustering Based on Hierarchical Density Estimates
L. McInnes and J. Healy, (2017). Accelerated Hierarchical Density Based Clustering. In: IEEE International Conference on Data Mining Workshops (ICDMW), 2017, pp. 33-42. Accelerated Hierarchical Density Based Clustering
2.3.9. OPTICS#
的 OPTICS
算法与 DBSCAN
算法,并且可以被认为是DBSCAN的概括,它放松了 eps
从一个值到一个值范围的要求。DBSCAN和OPTICS之间的关键区别在于OPTICS算法构建了一个 reachability 图,它为每个样本分配一个 reachability_
距离,以及集群内的一个点 ordering_
属性;这两个属性是在模型匹配时分配的,并用于确定集群成员资格。如果OPTICS以默认值运行 inf 设置 max_eps
,则可以在线性时间内重复执行DBSCAN风格的集群提取 eps
使用 cluster_optics_dbscan
法设置 max_eps
较低的值将导致更短的运行时间,并且可以被认为是从每个点寻找其他潜在可达点的最大邻居半径。
的 reachability OPTICS生成的距离允许在单个数据集中进行可变密度的集群提取。如上图所示,结合 reachability 距离和数据集 ordering_
产生 reachability plot ,其中点密度在Y轴上表示,并且点的排序使得附近的点相邻。以单个值“切割”可达性图会产生类似DBSCAN的结果;“切割”上方的所有点都被归类为噪音,每次从左向右读取时出现中断都意味着一个新的集群。OPTICS的默认集群提取会查看图表中的陡坡以找到集群,用户可以使用参数定义什么算作陡坡 xi
.对图本身进行分析还有其他可能性,例如通过可达性图树图生成数据的分层表示,并且可以通过 cluster_hierarchy_
参数.上面的图已进行了颜色编码,以便平面空间中的聚类颜色与可达性图的线性分段聚类相匹配。请注意,蓝色和红色聚类在可达性图中相邻,可以分层表示为较大父聚类的子聚类。
示例
与DBSCAN的比较#
OPTICS的结果 cluster_optics_dbscan
方法和DBSCAN非常相似,但并不总是相同;特别是外围和噪音点的标记。这在一定程度上是因为OPTICS处理的每个密集区域的第一个样本具有很大的可达性值,同时靠近其区域中的其他点,因此有时会被标记为噪音而不是外围。当邻近点被视为标记为外围或噪音的候选点时,这会影响邻近点。
请注意,对于的任何单个值 eps
,DBSCAN的运行时间往往比OPTICS更短;然而,对于不同的重复运行, eps
值,OPTICS的单次运行可能比DBSCAN需要更少的累积运行时间。同样重要的是要注意,OPTICS的输出只有在以下情况下才接近DBSCAN eps
和 max_eps
很接近。
计算复杂度#
空间索引树用于避免计算全距离矩阵,并允许对大样本集高效使用内存。可以通过提供不同的距离指标 metric
关键字
对于大型数据集,可以通过以下方式获得类似(但不相同)的结果 HDBSCAN
. HDBSCAN实现是多线程的,并且具有比OPTICS更好的算法运行时复杂度,但代价是更差的内存扩展。对于使用HDBSCAN耗尽系统内存的超大数据集,OPTICS将维护 \(n\) (as反对 \(n^2\) )内存扩展;但是,调整 max_eps
可能需要使用参数来在合理的停顿时间内给出解决方案。
引用#
“OPTICS:排序点以识别集群结构。“Ankerst、Mihael、Markus M.布鲁尼格、汉斯-彼得·克里格尔和约尔格·桑德。在ACN SigmodRecord,第28卷,第2期,第2页。49-60. ACN,1999年。
2.3.10. BIRCH#
的 Birch
为给定数据构建一棵称为集群特征树(CFT)的树。数据本质上被有损压缩到一组集群特征节点(CF节点)。CF节点具有许多称为聚集特征子集群(CF子集群)的子集群,并且位于非终端CF节点中的这些CF子集群可以将CF节点作为子节点。
CF子集群保存集群所需的信息,从而避免需要将整个输入数据保存在内存中。此信息包括:
子集群中的样本数。
线性和-一个n维载体,保存所有样本的和
平方和-所有样本的L2模平方的和。
Centroids -为了避免重新计算线性总和/ n_samples。
重心的平方规范。
The BIRCH algorithm has two parameters, the threshold and the branching factor. The branching factor limits the number of subclusters in a node and the threshold limits the distance between the entering sample and the existing subclusters.
该算法可以被视为一个实例或数据简化方法,因为它将输入数据简化为直接从CFT的叶子中获得的一组子聚类。这种减少的数据可以通过将其馈送到全局聚类器中来进一步处理。该全局聚类器可以通过以下方式设置: n_clusters
.如果 n_clusters
设置为无,则直接读取叶子的子集群,否则全局集群步骤将这些子集群标记为全局集群(标签),并将样本映射到最近的子集群的全局标签。
算法描述#
将新示例插入CF树的根(CF节点)。然后,它与根的子集群合并,该子集群在合并后具有最小的半径,受阈值和分支因子条件的约束。如果子集群有任何子节点,则会重复执行这一操作,直到到达叶。在叶子中找到最近的子集群后,该子集群和父子集群的属性将被迭代更新。
如果将新样本与最近的子集群合并获得的子集群的半径大于阈值的平方,并且如果子集群的数量大于分支因子,则暂时为该新样本分配空间。取两个最远的子集群,并根据这些子集群之间的距离将子集群分为两组。
如果此拆分的节点具有父子集群并且有空间容纳新子集群,则父子集群将拆分为两个。如果没有空间,则该节点再次分裂为两个,并循环继续该过程,直到到达根。
BIRCH还是MiniBatchK意味着?#
如何使用partial_fit?#
为了避免全局集群的计算,对于的每次调用 partial_fit
建议用户:
设置
n_clusters=None
最初。通过多次调用partial_fit来训练所有数据。
设置
n_clusters
设置为所需值,使用brc.set_params(n_clusters=n_clusters)
.呼叫
partial_fit
最后没有争论,即brc.partial_fit()
它执行全局集群。
引用#
Tian Zhang、Raghu Ramakrishnan、Maron Livny BIRCH:大型数据库的高效数据集群方法。https://www.cs.sfu.ca/CourseCentral/459/han/papers/zhang96.pdf
Roberto Perdisci JBirch -BIRCH聚类算法的Java实现https://code.google.com/archive/p/jbirch
2.3.11. 集群绩效评估#
评估集群算法的性能并不像计算错误数量或监督分类算法的精确度和召回率那么简单。特别是,任何评估指标都不应考虑集群标签的绝对值,而是如果这种集群定义了类似于某些基本事实类集的数据分离或满足某些假设,使得属于同一类的成员比不同类的成员更相似根据一些相似性指标。
2.3.11.1. 兰德指数#
鉴于对基本真相课堂作业的了解 labels_true
以及我们对相同样本的聚集算法分配 labels_pred
, (adjusted or unadjusted) Rand index 是一个函数, similarity 在两个赋值中,忽略排列:
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.rand_score(labels_true, labels_pred)
0.66
兰德指数并不能确保随机标签获得接近0.0的值。调整后的兰德指数 corrects for chance 并将给出这样的基线。
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24
与所有集群指标一样,可以在预测标签中置换0和1,将2重命名为3,并获得相同的分数::
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score(labels_true, labels_pred)
0.66
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24
此外,两者 rand_score
和 adjusted_rand_score
是 symmetric :交换论点不会改变分数。因此,它们可以用作 consensus measures
>>> metrics.rand_score(labels_pred, labels_true)
0.66
>>> metrics.adjusted_rand_score(labels_pred, labels_true)
0.24
完美标签评分为1.0::
>>> labels_pred = labels_true[:]
>>> metrics.rand_score(labels_true, labels_pred)
1.0
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
1.0
一致性较差的标签(例如独立标签)的得分较低,并且对于调整后的兰德指数,得分将为负或接近零。然而,对于未经调整的兰德指数,分数虽然较低,但不一定接近零::
>>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1]
>>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6]
>>> metrics.rand_score(labels_true, labels_pred)
0.39
>>> metrics.adjusted_rand_score(labels_true, labels_pred)
-0.072
示例
集群绩效评估中的机会调整 分析数据集大小对随机分配的聚类度量值的影响。
数学公式#
如果C是基本事实类分配,而K是集群,那么让我们定义 \(a\) 和 \(b\) 作为:
\(a\) ,C中同一集中和K中同一集中的元素对的数量
\(b\) ,C中不同集合中和K中不同集合中的元素对的数量
未经调整的兰德指数则由下式给出:
哪里 \(C_2^{n_{samples}}\) 是数据集中可能对的总数。只要计算一致地执行,计算是对有序对还是无序对执行并不重要。
然而,兰德指数并不能保证随机标签分配将获得接近零的值(特别是如果集群数量与样本数量处于同一数量级)。
为了抵消这种影响,我们可以对预期的RI进行折扣 \(E[\text{RI}]\) 通过如下定义调整后的兰德指数来实现随机标签:
引用#
Comparing Partitions L.休伯特和P·阿拉比,《分类杂志》1985
Properties of the Hubert-Arabie adjusted Rand index D.斯坦利,心理方法2004
Wikipedia entry for the Rand index <https://en.wikipedia.org/wiki/Rand_index#Adjusted_Rand_index>
_
2.3.11.2. 基于互信息的分数#
鉴于对基本真相课堂作业的了解 labels_true
以及我们对相同样本的聚集算法分配 labels_pred
, Mutual Information 是一个函数, agreement 两个赋值,忽略排列。 该度量有两种不同的标准化版本, Normalized Mutual Information (NMI) 和 Adjusted Mutual Information (AMI) . NMI经常在文献中使用,而AMI是最近提出的, normalized against chance
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504
可以在预测标签中排列0和1,将2重命名为3并获得相同的分数::
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504
所有的, mutual_info_score
, adjusted_mutual_info_score
和 normalized_mutual_info_score
是对称的:交换参数不会改变分数。因此它们可以用作 consensus measure
>>> metrics.adjusted_mutual_info_score(labels_pred, labels_true)
0.22504
完美标签评分为1.0::
>>> labels_pred = labels_true[:]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
1.0
>>> metrics.normalized_mutual_info_score(labels_true, labels_pred)
1.0
这对于 mutual_info_score
,因此更难判断::
>>> metrics.mutual_info_score(labels_true, labels_pred)
0.69
不良(例如独立标签)的评分为非阳性::
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
-0.10526
示例
集群绩效评估中的机会调整 分析数据集大小对随机分配的聚类度量值的影响。此示例还包括调整后兰德指数。
数学公式#
假设两个标签分配(相同的N个对象), \(U\) 和 \(V\) .它们的熵是分区集的不确定性量,定义如下:
哪里 \(P(i) = |U_i| / N\) 是从 \(U\) 落入类 \(U_i\) .同样对于 \(V\) :
与 \(P'(j) = |V_j| / N\) .之间的互信息(MI) \(U\) 和 \(V\) 计算公式为:
哪里 \(P(i, j) = |U_i \cap V_j| / N\) 是随机选择的对象属于这两类的概率 \(U_i\) 和 \(V_j\) .
它也可以用集合基数公式表示:
归一化互信息被定义为:
互信息以及规范化变体的这个值不会根据偶然性进行调整,并且往往会随着不同标签(集群)数量的增加而增加,无论标签分配之间“互信息”的实际量如何。
The expected value for the mutual information can be calculated using the following equation [VEB2009]. In this equation, \(a_i = |U_i|\) (the number of elements in \(U_i\)) and \(b_j = |V_j|\) (the number of elements in \(V_j\)).
使用预期值,然后可以使用与调整后的兰德指数类似的形式来计算调整后的互信息:
对于规范化互信息和调整后互信息,规范化值通常为一些 generalized 每个聚类的熵的平均值。存在着各种各样的一般化手段,但没有明确的规则来规定哪一种手段优于另一种手段。 这个决定主要是一个领域一个领域的基础上,例如,在社区检测,算术平均值是最常见的。每种标准化方法都提供了“定性相似的行为” [YAT2016]. 在我们的实现中,这由 average_method
参数.
Vinh等人(2010)通过平均法命名了NMI和AMI的变体 [VEB2010]. 它们的“平方”和“总和”平均值是几何和算术平均值;我们使用这些更广泛的常用名称。
引用
Strehl、Alexander和Joydeep Ghosh(2002)。“集群集成-用于组合多个分区的知识重用框架”。机器学习研究杂志3:583-617。 doi:10.1162/153244303321897735 .
Wikipedia entry for the (normalized) Mutual Information <https://en.wikipedia.org/wiki/Mutual_Information>
_Wikipedia entry for the Adjusted Mutual Information <https://en.wikipedia.org/wiki/Adjusted_Mutual_Information>
_
Vinh、Epps和Bailey,(2009)。“集群比较的信息论测量”。第26届国际机器学习年度会议录- ICML ' 09。 doi:10.1145/1553374.1553511 . ISBN 9781605585161。
Vinh、Epps和Bailey,(2010)。“交叉比较的信息论测量:变体、性质、规范化和机会修正”。JMLR <https://jmlr.csail.mit.edu/papers/volume11/vinh10a/vinh10a.pdf>
Yang、Algesheimer和Tessone,(2016)。“人工网络上社区检测算法的比较分析”。科学报告6:30750。 doi:10.1038/srep30750 .
2.3.11.3. 齐性、完整性和V-测量#
考虑到样本的基本真值类分配的知识,可以使用条件熵分析定义一些直观的指标。
特别是Rosenberg和Hirschberg(2007)为任何集群分配定义了以下两个理想目标:
homogeneity :每个集群仅包含单个类的成员。
completeness :给定类别的所有成员都被分配到同一集群。
我们可以把这些概念作为分数 homogeneity_score
和 completeness_score
.两者的下限为0.0,上限为1.0(越高越好)::
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.homogeneity_score(labels_true, labels_pred)
0.66
>>> metrics.completeness_score(labels_true, labels_pred)
0.42
它们的和声平均值称为 V-measure 计算方法是 v_measure_score
>>> metrics.v_measure_score(labels_true, labels_pred)
0.516
该函数的公式如下:
beta
默认值为1.0,但对于Beta版使用小于1的值::
>>> metrics.v_measure_score(labels_true, labels_pred, beta=0.6)
0.547
更多的权重将归因于同质性,并使用大于1的值::
>>> metrics.v_measure_score(labels_true, labels_pred, beta=1.8)
0.48
将更重视完整性。
V-测量实际上相当于上面讨论的互信息(NMI),聚合函数是算术平均值 [B2011].
齐性、完整性和V-测量可以使用以下方法同时计算 homogeneity_completeness_v_measure
如下::
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)
(0.67, 0.42, 0.52)
下面的集群分配稍微好一点,因为它是同质的但不完整的::
>>> labels_pred = [0, 0, 0, 1, 2, 2]
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)
(1.0, 0.68, 0.81)
备注
v_measure_score
是 symmetric :它可以用于评估 agreement 同一数据集上的两个独立分配。
并非如此 completeness_score
和 homogeneity_score
:两者都受到关系的约束::
homogeneity_score(a, b) == completeness_score(b, a)
示例
集群绩效评估中的机会调整 分析数据集大小对随机分配的聚类度量值的影响。
数学公式#
均匀性和完整性分数正式给出:
哪里 \(H(C|K)\) 是 conditional entropy of the classes given the cluster assignments 并由:
和 \(H(C)\) 是 entropy of the classes 并由:
与 \(n\) 样本总数, \(n_c\) 和 \(n_k\) 分别属于类别的样本数量 \(c\) 和聚类 \(k\) ,最后 \(n_{c,k}\) 班级样本数量 \(c\) 分配给区群 \(k\) .
的 conditional entropy of clusters given class \(H(K|C)\) 和 entropy of clusters \(H(K)\) 以对称的方式定义。
罗森伯格和赫希伯格进一步定义 V-measure 为 harmonic mean of homogeneity and completeness :
引用
V-Measure: A conditional entropy-based external cluster evaluation measure 安德鲁·罗森伯格和朱莉娅·赫希伯格,2007年
Identification and Characterization of Events in Social Media <http://www.cs.columbia.edu/~hila/hila-thesis-distributed.pdf>
_,Hila Becker,博士论文。
2.3.11.4. 福克斯-马洛斯得分#
最初的Fowlkes-Malows指数(LDI)旨在衡量两个集群结果之间的相似性,这本质上是一种无监督比较。Fowlkes-Malows指数的监督适应(如在中实现的 sklearn.metrics.fowlkes_mallows_score
)可以在已知样本的基础真值类分配时使用。FMI定义为成对查准率和查全率的几何平均值:
在上面的公式中:
TP
( True Positive ):在真实标签和预测标签中聚集在一起的点对的数量。FP
( False Positive ):在预测标签中聚集在一起但不在真实标签中聚集在一起的点对的数量。FN
( False Negative ):在真实标签中聚集在一起但不在预测标签中聚集在一起的点对的数量。
分数范围为0到1。高值表示两个聚类之间具有良好的相似性。
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)
0.47140
可以在预测标签中排列0和1,将2重命名为3并获得相同的分数::
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)
0.47140
完美标签评分为1.0::
>>> labels_pred = labels_true[:]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)
1.0
不良(例如独立标签)得分为零::
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)
0.0
引用#
E. B. Fowkles and C. L. Mallows, 1983. "A method for comparing two hierarchical clusterings". Journal of the American Statistical Association. https://www.tandfonline.com/doi/abs/10.1080/01621459.1983.10478008
Wikipedia entry for the Fowlkes-Mallows Index <https://en.wikipedia.org/wiki/Fowlkes-Mallows_index>
_
2.3.11.5. Silhouette Coefficient#
如果基础事实标签未知,则必须使用模型本身执行评估。剪影系数 (sklearn.metrics.silhouette_score
)是此类评估的一个例子,其中较高的轮廓系数分数与具有更好定义的集群的模型相关。轮廓系数是为每个样本定义的,由两个分数组成:
a :样本与同一类中所有其他点之间的平均距离。
b :样本与中所有其他点之间的平均距离 next nearest cluster .
剪影系数 s 对于单个样本,则给出为:
一组样本的轮廓系数以每个样本的轮廓系数的平均值给出。
>>> from sklearn import metrics
>>> from sklearn.metrics import pairwise_distances
>>> from sklearn import datasets
>>> X, y = datasets.load_iris(return_X_y=True)
在正常使用中,轮廓系数应用于集群分析的结果。
>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.silhouette_score(X, labels, metric='euclidean')
0.55
示例
在KMeans聚类中使用轮廓分析选择聚类数 在这个例子中,轮廓分析用于选择n_clusters的最佳值。
引用#
彼得·J·马塞卢(1987年)。 "Silhouettes: a Graphical Aid to the Interpretation and Validation of Cluster Analysis" .计算与应用数学20:53-65。
2.3.11.6. 卡林斯基-哈拉巴斯指数#
如果地面真相标签未知,则使用Calinski-Harabasz指数 (sklearn.metrics.calinski_harabasz_score
)--也称为方差比标准--可用于评估模型,其中较高的Calinski-Harabasz分数与具有更好定义的集群的模型相关。
指数是所有集群的集群间分散度和集群内分散度之和的比率(其中分散度定义为距离平方的和):
>>> from sklearn import metrics
>>> from sklearn.metrics import pairwise_distances
>>> from sklearn import datasets
>>> X, y = datasets.load_iris(return_X_y=True)
在正常使用中,Calinski-Harabasz指数应用于集群分析的结果:
>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.calinski_harabasz_score(X, labels)
561.59
数学公式#
针对数据集 \(E\) 身型限重 \(n_E\) 它已被聚集在一起 \(k\) 集群,卡林斯基-哈拉巴斯得分 \(s\) 定义为群间分散平均值与群内分散值的比率:
哪里 \(\mathrm{tr}(B_k)\) 是群间分散矩阵的踪迹, \(\mathrm{tr}(W_k)\) 是由以下公式定义的簇内分散矩阵的踪迹:
与 \(C_q\) 集群中的点集 \(q\) , \(c_q\) 集群中心 \(q\) , \(c_E\) 的中心 \(E\) ,而且 \(n_q\) 群中的点数 \(q\) .
引用#
卡利亚斯基,T.,& Harabasz,J.(1974)。 "A Dendrite Method for Cluster Analysis" . Communications in Statistics-theory and Methods 3: 1-27 .
2.3.11.7. 戴维斯-布尔丁指数#
如果不知道基本真相标签,Davies-Bouldin指数 (sklearn.metrics.davies_bouldin_score
)可用于评估模型,其中较低的Davies-Bouldin指数与集群之间分离更好的模型相关。
该指数表示集群之间的平均“相似性”,其中相似性是将集群之间的距离与集群本身的大小进行比较的测量。
零是可能的最低分数。接近零的值表示更好的分区。
在正常使用中,Davies-Bouldin指数应用于如下集群分析的结果:
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> X = iris.data
>>> from sklearn.cluster import KMeans
>>> from sklearn.metrics import davies_bouldin_score
>>> kmeans = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans.labels_
>>> davies_bouldin_score(X, labels)
0.666
数学公式#
该指数定义为每个集群之间的平均相似度 \(C_i\) 为 \(i=1, ..., k\) 也是最相似的 \(C_j\) .在这个指数的上下文中,相似性被定义为一种衡量标准, \(R_{ij}\) 这权衡了:
\(s_i\) ,集群每个点之间的平均距离 \(i\) 以及该星系团的重心--也称为星系团直径。
\(d_{ij}\) ,聚类质心之间的距离 \(i\) 和 \(j\) .
构建的简单选择 \(R_{ij}\) 所以它是非负的对称的
Davies-Bouldin指数定义为:
引用#
大卫·L·戴维斯;唐纳德·W·布尔丁(1979)。 "A Cluster Separation Measure" IEEE模式分析和机器智能汇刊。PAMI-1(2):224-227。
Halkidi,Maria; Batistakis,Yannis; Vazirgiannis,Michalis(2001)。 "On Clustering Validation Techniques" 《智能信息系统杂志》,17(2-3),107-145。
Wikipedia entry for Davies-Bouldin index <https://en.wikipedia.org/wiki/Davies-Bouldin_index>
_.
2.3.11.8. 应急矩阵#
权宜矩阵 (sklearn.metrics.cluster.contingency_matrix
)报告每个真/预测聚类对的交集基数。列联矩阵为所有聚类度量提供了足够的统计数据,其中样本是独立和相同分布的,并且不需要考虑一些未被聚类的实例。
这是一个例子::
>>> from sklearn.metrics.cluster import contingency_matrix
>>> x = ["a", "a", "a", "b", "b", "b"]
>>> y = [0, 0, 1, 1, 2, 2]
>>> contingency_matrix(x, y)
array([[2, 1, 0],
[0, 1, 2]])
输出数组的第一行指示有三个样本的真实集群是“a”。其中,两个位于预测的集群0中,一个位于1中,没有一个位于2中。第二行指示有三个样本的真实集群是“b”。其中,没有一个在预测的集群0中,一个在1中,两个在2中。
A confusion matrix 分类是一个方形列联矩阵,其中行和列的顺序对应于类列表。
引用#
Wikipedia entry for contingency matrix <https://en.wikipedia.org/wiki/Contingency_table>
_
2.3.11.9. 配对混淆矩阵#
配对混淆矩阵 (sklearn.metrics.cluster.pair_confusion_matrix
)是2x 2相似性矩阵
通过考虑所有样本对并计数在真实和预测的集群下分配到相同或不同集群的对来计算两个集群之间。
它有以下条目:
\(C_{00}\) :具有两个聚类的对的数量,其中样本没有聚类在一起
\(C_{10}\) :具有将样本聚集在一起但另一个聚集不具有样本聚集在一起的真实标签聚集对的数量
\(C_{01}\) :具有真实标签集群的对数量,该真实标签集群没有将样本集群在一起,但另一个集群具有将样本集群在一起
\(C_{11}\) :两个集群将样本聚集在一起的对数
将聚集在一起的一对样本视为正对,那么在二进制分类中,真阴性的计数是 \(C_{00}\) ,假阴性是 \(C_{10}\) ,真正的积极因素是 \(C_{11}\) 假阳性是 \(C_{01}\) .
完美匹配的标签在对角线上具有所有非零条目,无论实际标签值如何::
>>> from sklearn.metrics.cluster import pair_confusion_matrix
>>> pair_confusion_matrix([0, 0, 1, 1], [0, 0, 1, 1])
array([[8, 0],
[0, 4]])
>>> pair_confusion_matrix([0, 0, 1, 1], [1, 1, 0, 0])
array([[8, 0],
[0, 4]])
将所有类成员分配到相同集群的标签是完整的,但可能不总是纯的,因此会受到惩罚,并且有一些非对角线非零条目::
>>> pair_confusion_matrix([0, 0, 1, 2], [0, 0, 1, 1])
array([[8, 2],
[0, 2]])
矩阵不对称::
>>> pair_confusion_matrix([0, 0, 1, 1], [0, 0, 1, 2])
array([[8, 0],
[2, 2]])
如果类成员完全分散在不同的集群中,则分配是完全不完整的,因此矩阵的对角线条目全部为零::
>>> pair_confusion_matrix([0, 0, 0, 0], [0, 1, 2, 3])
array([[ 0, 0],
[12, 0]])
引用#
"Comparing Partitions" L.休伯特和P·阿拉比,《分类杂志》1985