美文网首页
第十七天 凝聚聚类

第十七天 凝聚聚类

作者: 未不明不知不觉 | 来源:发表于2019-01-03 19:37 被阅读3次

凝聚聚类是许多基于相同原则构建的聚类算法,基本流程是:首先声明每个点是自己的簇,然后合并两个最相似的簇,知道满足某种停止准则为止。scikit-learn中的停止准则是簇的个数。对于两个簇的相似度度量sklearn提供了以下三个选项。

  1. ward:默认选项,挑选与现有簇方差最小的两个簇合并
  2. average:将簇中所有点之间平均距离最小的两个簇合并
  3. complete:将簇中点之间最大距离最小的两个簇合并

下面是在一个二维数据集上凝聚聚类寻找三个簇的过程

import mglearn
mglearn.plots.plot_agglomerative_algorithm()

最开始各自点成一个簇,然后每次迭代距离最近的两个簇会被合并

sklearn实现凝聚聚类

我们来看一下凝聚聚类对我们这里使用的简单三簇数据的效果如何。由于算法的工作原理,凝聚算法不能对新数据点做出预测。因此 AgglomerativeClustering 没有 predict 方法。为了构造模型并得到训练集上簇的成员关系,可以改用 fit_predict 方法

from sklearn.cluster import AgglomerativeClustering
X, y = make_blobs(random_state=1)
agg = AgglomerativeClustering(n_clusters=3)
assignment = agg.fit_predict(X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], assignment)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")

簇的个数的指定

层次聚类与树状图
凝聚聚类生成了所谓的层次聚类(hierarchical clustering)。聚类过程迭代进行,每个点都从一个单点簇变为属于最终的某个簇。每个中间步骤都提供了数据的一种聚类(簇的个数也不相同)。有时候,同时查看所有可能的聚类是有帮助的。下图中的叠加显示了图中所有可能的聚类,有助于深入了解每个簇如何分解为较小的簇:

虽然这种可视化为层次聚类提供了非常详细的视图,但它依赖于数据的二维性质,因此不能用于具有两个以上特征的数据集。但还有另一个将层次聚类可视化的工具,叫作树状图(dendrogram),它可以处理多维数据集

# 从SciPy中导入dendrogram函数和ward聚类函数
from scipy.cluster.hierarchy import dendrogram, ward
X, y = make_blobs(random_state=0, n_samples=12)
# 将ward聚类应用于数据数组X
# SciPy的ward函数返回一个数组,指定执行凝聚聚类时跨越的距离
linkage_array = ward(X)
# 现在为包含簇之间距离的linkage_array绘制树状图
dendrogram(linkage_array)
# 在树中标记划分成两个簇或三个簇的位置
ax = plt.gca()
bounds = ax.get_xbound()
ax.plot(bounds, [7.25, 7.25], '--', c='k')
ax.plot(bounds, [4, 4], '--', c='k')
ax.text(bounds[1], 7.25, ' two clusters', va='center', fontdict={'size': 15})
ax.text(bounds[1], 4, ' three clusters', va='center', fontdict={'size': 15})
plt.xlabel("Sample index")
plt.ylabel("Cluster distance")

树状图在底部显示数据点(编号从 0 到 11)。然后以这些点(表示单点簇)作为叶节点绘制一棵树,每合并两个簇就添加一个新的父节点。从下往上看,数据点 1 和 4 首先被合并(正如你在图 3-33 中所见)。接下来,点 6 和 9 被合并为一个簇,以此类推。在顶层有两个分支,一个由点 11、 0、 5、 10、 7、 6 和 9 组成,另一个由点 1、 4、 3、 2 和 8 组成。这对应于图中左侧两个最大的簇。树状图的 y 轴不仅说明凝聚算法中两个簇何时合并,每个分支的长度还表示被合并的簇之间的距离。在这张树状图中,最长的分支是用标记为“three clusters”(三个簇)的虚线表示的三条线。它们是最长的分支,这表示从三个簇到两个簇的过程中合并了一些距离非常远的点。我们在图像上方再次看到这一点,将剩下的两个簇合并为一个簇也需要跨越相对较大的距离。不幸的是,凝聚聚类仍然无法分离像 two_moons 数据集这样复杂的形状

相关文章

网友评论

      本文标题:第十七天 凝聚聚类

      本文链接:https://www.haomeiwen.com/subject/oqmqrqtx.html