<jupyter_start><jupyter_text>代码说明：（1）第1至3行：生成样本量N=10的聚类模拟数据。该数据包含3个小类，各小类的类中心依次为：(1,1),(-1,-1),(1,-1)。后续将验证系统聚类是否可以将数据正确聚成3个小类。（2）第4至9行：绘制模拟聚类数据的散点图，如图11.8左图所示。（3）第11行：指定系统聚类中的连通性度量，将依次采用ward方法，组间平均连锁法和最近邻法。（4）第12至19行：利用for循环分别采用三种联通性度量，对模拟数据进行系统聚类并绘制聚类树形图。<jupyter_code>AC = AgglomerativeClustering(linkage='ward',n_clusters =3)
AC.fit(X)
AC.children_
N=3000
centers = [[1, 1], [-1, -1], [1, -1]]
X, lables_true = make_blobs(n_samples=N, centers= centers, cluster_std=0.6,random_state=0)
fig=plt.figure(figsize=(16,4))
clusters=[15,10,5,3]
for i,n_clusters_ in enumerate(clusters):
    AC = AgglomerativeClustering(linkage='ward',n_clusters = n_clusters_)
    AC.fit(X)
    lables = AC.labels_
    plt.subplot(1,4,i+1) 
    colors = cycle('bgrcmyk')
    for k, col in zip(range(n_clusters_), colors):
        plt.plot(X[lables == k, 0], X[lables == k,1], col + '.')
    plt.title('系统聚类(聚类数目:%d)' % n_clusters_)
plt.show()
tmp=sch.linkage(X, method='ward')
gData=list(tmp[:,2])
gData.reverse()
fig=plt.figure(figsize=(6,4))
plt.scatter(gData ,range(1,N),c='r',s=1)
plt.xlabel("小类间距离")
plt.ylabel("聚类数目K")
plt.title("碎石图")<jupyter_output><empty_output><jupyter_text>代码说明：（1）第1行：利用函数linkage()得到所有聚类数目K下的所有聚类解。（2）第2行：聚类解的第3列存储着“凝聚”成K=1,2,…N-1时的类间距离。距离越小“凝聚”在一起越合理。（3）第3行：将第2行的距离结果反转成“凝聚”成K=N-1,N-2,…1时的类间距离，为绘制碎石图做准备。（4）第4至8行：绘制碎石图，横坐标为距离，纵坐标为聚类数目K<jupyter_code>outs=[[-20,3],[-20,2.8],[-20.5,3]]
T=np.vstack((X,outs))  #探索异常点
K=6
AC = AgglomerativeClustering(linkage='ward',n_clusters = K)
AC.fit(T)
lables = AC.labels_
fig=plt.figure(figsize=(6,4))
colors = cycle('bgrcmyk')
for k, col in zip(range(K),colors):
    plt.plot(T[lables == k, 0], T[lables == k,1], col + '.')
plt.title('系统聚类(聚类数目:%d)' % K)
plt.xlabel("X1")
plt.ylabel("X2")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.21246458923512748, 'fraction_numerical': 0.053824362606232294, 'mean_word_length': 8.24607329842932, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '471014', 'license': 'MIT', 'n_tokens_mistral': 1059, 'n_tokens_neox': 1112, 'n_words': 86, 'path': 'chapter11-2.ipynb', 'repo_name': 'cutelittletiantian/python-ML-principles-and-practice', 'size': '1765'}