层次聚类算法的实例代码及解译
时间: 2023-11-26 22:53:24 浏览: 41
层次聚类是一种基于距离的聚类算法,可以将数据点分成不同的簇。它的主要思想是将最相似的数据点合并成一个簇,然后重复这个过程直到所有数据点都被归类到一个簇中为止。
下面是一个使用 Python 实现层次聚类的示例代码:
```python
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
# 生成随机数据
np.random.seed(4711)
a = np.random.multivariate_normal([10, 0], [[3, 1], [1, 4]], size=[100,])
b = np.random.multivariate_normal([0, 20], [[3, 1], [1, 4]], size=[50,])
X = np.concatenate((a, b),)
print(X.shape)
plt.scatter(X[:,0], X[:,1])
plt.show()
# 使用层次聚类算法
Z = linkage(X, 'ward')
# 绘制树状图
plt.figure(figsize=(25, 10))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('sample index')
plt.ylabel('distance')
dendrogram(Z, leaf_rotation=90., leaf_font_size=8.)
plt.show()
```
解释一下代码:
首先,我们生成了两个高斯分布的数据集,一个是均值为 [10, 0],协方差为 [[3, 1], [1, 4]] 的数据集,另一个是均值为 [0, 20],协方差为 [[3, 1], [1, 4]] 的数据集。然后将这两个数据集合并成一个数据集 X,并将其可视化。
接着,我们使用 `linkage` 函数计算数据集 X 中每个数据点之间的距离,并将距离矩阵存储在变量 Z 中。在这个例子中,我们使用了“ward”方法来计算距离。"ward"方法是一种基于方差的方法,它试图最小化在合并两个簇时的总方差增量。
最后,我们使用 `dendrogram` 函数绘制树状图。树状图的 x 轴是样本的索引,y 轴是距离。树状图的颜色表示不同的簇。在这个例子中,我们可以看到层次聚类算法将数据点分成了三个簇。
希望这个示例代码和解释能够帮助你理解层次聚类算法。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)