在哪里切割树状图?


60

层次聚类可以用树状图表示。在一定水平上切割树状图可得到一组簇。切割到另一个级别将提供另一组群集。您将如何选择在哪里切割树状图?有什么可以考虑的最佳点吗?如果我查看随时间变化的树状图,是否应该在同一时间剪切?


我也想知道这个问题,但是(不幸的是)尚未找到任何令人信服的答案。我认为没有解决办法。有一些R / BioC软件包hopack(和其他软件包)可以估计群集的数量,但是并不能回答您的问题。
suncoolsu

pvclustR有,给自举p值的树状集群功能,使您能够识别组:is.titech.ac.jp/~shimo/prog/pvclust

Answers:


45

由于聚类分析本质上是一种探索性方法,因此没有明确的答案。最终的层次结构的解释取决于上下文,并且从理论的角度来看,通常有几种解决方案同样好。

在一个相关的问题中给出了一些线索,在实践中使用了哪些聚集准则的停止标准?我通常使用视觉标准(例如轮廓图)和某种数字标准,例如Dunn的有效性指数,Hubert的伽玛,G2 / G3系数或校正的Rand指数。基本上,我们想知道原始距离矩阵在聚类空间中的近似程度,因此,对相关关系的度量也很有用。我还使用了具有多个起始值的k均值和间隙统计量mirror)来确定使SS内最小化的簇数。与Ward分层集群的一致性给出了集群解决方案稳定性的想法(您可以使用matchClasses()e1071软件包中)。

您将在CRAN Task View Cluster中找到有用的资源,包括pvclustfpcclv等。同样值得一试的是clValid软件包(在Journal of Statistics Software中进行了描述)。

现在,如果您的集群随时间而变化,这将更加棘手。为什么选择第一个群集解决方案而不是另一个?您是否期望随着时间的流逝,一些人从一个集群迁移到另一个集群?

有一些方法可以尝试匹配具有最大绝对或相对重叠的聚类,如上一个问题中向您建议的。查看比较聚类 -Wagner和Wagner 的概述


12

真的没有答案。在1到N之间。

但是,您可以从利润的角度考虑它。

例如,在市场营销中,人们使用细分,这非常类似于聚类。

为每个人量身定制的消息(例如广告或信件)将具有最高的响应率。为平均值量身定制的通用消息将具有最低的响应率。说了适合三个细分市场的三个消息将介于两者之间。这是收入方面。

针对每个人量身定制的消息的成本最高。为平均值量身定制的通用消息将具有最低的成本。为三个细分量身定制的三个消息将介于两者之间。

假设支付给编写者编写自定义消息的费用为1000,两次费用为2000,依此类推。

用一条消息说,您的收入将是5000。如果将客户划分为2个细分市场,并针对每个细分市场编写量身定制的消息,您的响应率将会更高。假设收入现在为7500。通过三个细分,响应率稍高,您的收入为9000。再细分一个,则您的收入为9500。

为了使利润最大化,请保持细分,直到细分产生的边际收益等于细分的边际成本。在此示例中,您将使用三个细分来最大化利润。

Segments  Revenue  Cost  Profit
1         5000     1000  4000
2         7500     2000  5500
3         9000     3000  6000
4         9500     4000  5500

这是一个有趣的观点!
AndyF

5

也许最简单的方法之一是图形表示,其中x轴是组数,y轴是距离或相似度的任何评估指标。在该图中,通常可以观察到两个不同的区域,即线的“拐点”处的x轴值是“最佳”簇数。

也有一些统计数据可以帮助完成这项任务:休伯特伽马,伪t²,伪F或三次聚类标准(CCC)等。


我同意chl。聚类分析是一种探索性方法,对结果的解释(在这种情况下,聚类的最佳数量)取决于您的情况。例如,在我的工作中,通常使用聚类分析基于几个特征对个体进行分类,并且有时会预设聚类的数量。在这种情况下,我们的目标是找到最能区分属于不同集群的个体的一组分类变量。
曼努埃尔·拉蒙(ManuelRamón)2010年


3

在分层聚类中,输出分区的数量不仅是水平分割,而且还包括决定最终聚类的非水平分割。因此,这可以看作是除了1.距离度量2.链接准则之外的第三个准则http://en.wikipedia.org/wiki/Hierarchical_clustering

您提到的标准是第三类,它是对层次结构中的分区集的一种优化约束。本文正式介绍了这一点,并给出了分割示例!

http://www.esiee.fr/~kiranr/ClimbingECCV2012_Preprint.pdf


1

正如其他答案所说,这绝对是主观的,并且取决于您要研究的粒度类型。对于一般方法,我将其裁剪为2个聚类和1个离群值。然后,我将重点放在两个群集上,以查看它们之间是否有重要的区别。

# Init
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

# Load data
from sklearn.datasets import load_diabetes

# Clustering
from scipy.cluster.hierarchy import dendrogram, fcluster, leaves_list
from scipy.spatial import distance
from fastcluster import linkage # You can use SciPy one too

%matplotlib inline

# Dataset
A_data = load_diabetes().data
DF_diabetes = pd.DataFrame(A_data, columns = ["attr_%d" % j for j in range(A_data.shape[1])])

# Absolute value of correlation matrix, then subtract from 1 for disimilarity
DF_dism = 1 - np.abs(DF_diabetes.corr())

# Compute average linkage
A_dist = distance.squareform(DF_dism.as_matrix())
Z = linkage(A_dist,method="average")

# Dendrogram
D = dendrogram(Z=Z, labels=DF_dism.index, color_threshold=0.7, leaf_font_size=12, leaf_rotation=45)

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.