本文大部分内容来自于How to tune with hdbscan
简单的导言
Clustering is “strongly dependent on contexts, aims and decisions of the researcher” which adds fire to the argument that there is no such thing as a “universally optimal method that will just produce natural clusters”
Henning in What Are True Clusters? Henning 2015
聚类事实上非常的考验尝试与调试,以及本身聚类想要做出的事情和目的。并且,一个适用在某个dataset上的聚类,不一定会适用于另一个dataset。同时,聚类算法也是有no free lunch theorem,因此,如何搞清楚聚类的假设和思考变得比较重要。
之前碰到的一些错误
一般来说,我们判断一个聚类聚得好不好会用以下两种方法,一种是计算组内平方和(WCSS, within cluster sum of squares),另一种是计算Silhouette Score (BTW, Silhouette – KANA BOON确实很好听)。二者都是拿来展示聚类好坏的一种指标,当然我们必须牢记在心的是,这个标准好坏仅针对于某一个数据集与目的。
之前我碰到的错误主要是使用Silhouette Score来计算Density-Based的cluster method。例如HDBSCAN,还有些其他的基于密度聚类的方法,例如OPTICS、DENCLUE。实际上,这两类指标都在衡量聚类簇的凝聚力和分离度(cohensiveness and separation),是完全依靠于距离来计算的。但是这在Density-based的method中,是完全不可行的。基于密度的聚类不会过分的依赖于距离的计算,密度的聚类只根据距离来计算聚类结果将忽视了一些点,例如第一个点是被视为噪声的数据没有被考虑进去,以及第二个点在某一个非凸的聚类簇中,这个簇可能形成的形状比较奇怪,导致组内的凝聚力比较差,得到比较差的结果。
一些补充:如何计算WCSS (From GPT4)
# based on Euclidean distance wcss = sum([np.sum(np.linalg.norm(data[cluster_assignment == i]-centroid, axis=1)**2) for i, centroid in enumerate(centroids, 1)])
基于密度的聚类 Validation
DBCV(Density-Based Clustering Validation) 这篇论文的作者提出了Validity Index of a Clustering来解决这个问题
$$ DBCV(C) = \sum_{i=1}^{i=l}\frac{|C_i|}{|O|}V_C(C_i)$$
其中一个Cluster solution $C = \{C_i, 1\leq i\leq l\}$是一个weighted average of the Validity Index of all clusters in $C$。详细的细节可以见论文的definition部分。
关于基于密度的聚类Validity index的应用
首先是一个Amazon开发的一个包,用于设计Categorical+Numerical 的混合型data聚类问题。名称为Amacon-DenseClus
其次可以用来做Hyperparameter Tuning,具体的结果代码都可见原po。