本文主要参考《Python机器学习经典实例》
在介绍凝聚层次聚类之前,我们需要先理解层次聚类(hierarchical clustering)。层次聚类是一组聚类算法,通过不断地分解或合并集群来构建树状集群(tree-like clusters)。层次聚类的结构可以用一颗树表示。层次聚类算法可以是自下而上的,也可以是自上而下的。具体是什么含义呢?在自下而上的算法中,每个数据点都被看作是一个单独的集群。这些集群不断地合并,直到所有的集群都合并成一个巨型集群。这被称为凝聚层次聚类。与之相反的是,自上而下层次的算法是从一个巨大的集群开始,不断地分解,直到所有的集群变成一个单独的数据点。
你可以在http://nlp.stanford.edu/IR-book/html/htmledition/hierarchical-agglomerative-clustering-1.html学习更多的内容。
详细步骤
(1) 首先建立agglomerative.py文件,然后导入一些需要用到的程序包:
import numpy as np
import matplotlib.pyplot as plt #用于画图工具
from sklearn.cluster import AgglomerativeClustering #层次聚类
from sklearn.neighbors import kneighbors_graph #最邻近搜索
(2) 定义一个实现凝聚层次聚类的函数:
def perform_clustering(X, connectivity, title, num_clusters=3, linkage='ward'):
plt.figure()
# 定义凝聚层次聚类模型
model = AgglomerativeClustering(linkage=linkage,connectivity=connectivity, n_clusters=num_clusters)
model.fit(X) # 训练模型
(3) 提取标记,然后指定不同聚类在图形中的标记:
labels = model.labels_