层次类聚算法python
时间: 2023-07-10 21:03:02 浏览: 107
层次聚类算法是一种基于距离的聚类方法,它的主要思想是将最相似的数据点组合成一个簇,然后逐步地将其他数据点加入到簇中,直到所有的数据点都被分配到某个簇中。Python中有很多库可以实现层次聚类算法,比如scikit-learn、SciPy等。
下面是一个使用SciPy库实现层次聚类算法的简单例子:
```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) # (150, 2)
# 计算距离矩阵
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()
```
在上面的代码中,我们首先生成了一个随机数据集,并利用`linkage`函数计算了距离矩阵。然后,我们使用`dendrogram`函数绘制了树状图。
运行上面的代码,你可以得到一个类似于下面这样的树状图:
![层次聚类树状图](https://img-blog.csdn.net/20180511123043737?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1aGFv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
从图中可以看出,不同颜色的线段代表不同的簇,簇之间的高度差表示它们的距离。你可以根据需要调整`linkage`函数中的参数,比如`method`参数可以设置聚类的方法,`metric`参数可以设置距离度量方式等等。
阅读全文