如何用Python的scikit-learn实现无标签数据层次聚类及结果解读
层次聚类树状图解读与参数验证指南
一、树状图(Dendrogram)解读要点
- 垂直轴高度:代表两类合并时的距离/相似度,高度越高,合并的两类差异越大;高度越低,两类相似度越高。
- 水平分支与聚类数量:从底部样本节点往上看,找树状图中最长的无垂直分支的水平空白段,画一条水平线穿过这段,水平线与多少条垂直分支相交,就对应合适的聚类数。
- 样本归属:底部的每个小节点对应单个样本,往上追溯,最终汇聚到同一分支的样本属于同一个聚类簇。
二、层次聚类参数验证方法
层次聚类的核心参数是距离度量和链接方法,可通过以下方式验证合理性:
1. 距离度量选择
- 连续型数值数据(如传感器数据、用户行为特征):优先用
euclidean(欧氏距离);数据含异常值时,换manhattan(曼哈顿距离)更稳健;高维稀疏数据(如文本向量)用cosine(余弦相似度)。 - 验证方式:用不同距离度量分别跑聚类,对比树状图的簇结构——如果某一种距离下的簇符合你对数据的领域认知(比如用户分群匹配消费习惯),即为更合适的选择。
2. 链接方法选择
ward:最小化簇内方差,适合簇大小相近、形状紧凑的数据集,是通用默认选项;single:最近邻链接,易形成链式簇,适合细长分布的数据;complete:最远邻链接,生成的簇更紧凑,但对异常值敏感;average:平均距离链接,平衡了single和complete的特性。- 验证方式:对比不同链接方法的树状图,看哪种得到的簇结构更符合数据逻辑。比如用户画像聚类中,
ward生成的簇应该是特征差异均匀的群体,这就是合理的结果。
三、无标签数据集的聚类效果评估
无标签场景下,用以下无监督指标评估聚类质量:
- 轮廓系数(Silhouette Score):范围[-1,1],越接近1说明簇内样本相似度越高、簇间差异越大,聚类效果越好。计算代码:
from sklearn.metrics import silhouette_score score = silhouette_score(标准化后的数据集, 聚类标签) - Calinski-Harabasz指数:比值越大,代表簇内方差越小、簇间方差越大,聚类效果越优。计算代码:
from sklearn.metrics import calinski_harabasz_score score = calinski_harabasz_score(标准化后的数据集, 聚类标签) - 肘部法则:绘制簇数量与簇内总方差的曲线,找到曲线的“肘部”点(簇数量增加到该点后,方差下降速度显著放缓),该点对应的簇数即为最优选择。
内容的提问来源于stack exchange,提问作者Damaris Aylín Lara Bustillos
相关产品推荐
相关产品推荐

