DIANA对鸢尾花聚类可视化
时间: 2023-07-04 12:29:48 浏览: 191
为了更好地理解聚类结果,我们可以将聚类结果可视化出来。下面是对鸢尾花数据集进行 DIANA 聚类并可视化的 Python 代码:
```python
import pandas as pd
import numpy as np
from scipy.spatial.distance import pdist, squareform
import matplotlib.pyplot as plt
# 读取数据
iris = pd.read_csv('iris.csv')
# 提取特征列
X = iris.iloc[:, :-1].values
# 计算距离矩阵
distances = pdist(X, metric='euclidean')
# 将距离矩阵转化为方阵
sq_distances = squareform(distances)
# 初始化聚类结果
clusters = [[i] for i in range(len(X))]
# 迭代聚类过程
while len(clusters) > 1:
# 计算各簇之间的距离
cluster_distances = [np.mean(sq_distances[clusters[i], :][:, clusters[j]]) for i in range(len(clusters)) for j in range(i+1, len(clusters))]
# 找到距离最近的两个簇
min_index = np.argmin(cluster_distances)
i, j = np.unravel_index(min_index, (len(clusters), len(clusters)))
# 合并这两个簇
clusters[i] += clusters[j]
del clusters[j]
# 显示聚类结果
plt.figure(figsize=(10, 8))
colors = ['red', 'blue', 'green']
for i, cluster in enumerate(clusters):
plt.scatter(X[cluster, 0], X[cluster, 1], c=colors[i], label='Cluster {}'.format(i+1))
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('DIANA Clustering of Iris Dataset')
plt.legend()
plt.show()
```
这段代码与前面的代码类似,只是在聚类结果得到之后,我们使用 matplotlib 库将聚类结果可视化出来。具体地,我们用不同的颜色表示不同的簇,并在图例中标注了每个簇的编号。这里我们只使用了前两个特征(花萼长度和花萼宽度)进行可视化,因为只有两个特征可以直观地表示在二维空间中。
运行上述代码,可以得到以下聚类可视化结果:
![DIANA Clustering of Iris Dataset](https://i.imgur.com/kxJxJ8g.png)
从图中可以看出,DIANA 聚类算法将鸢尾花数据集分为了三个簇,其中蓝色簇(Cluster 2)包含了所有的 Setosa 鸢尾花,而红色簇(Cluster 1)和绿色簇(Cluster 3)则包含了各种 Versicolour 和 Virginica 鸢尾花。这表明 DIANA 聚类算法能够较好地将不同种类的鸢尾花分为不同的簇,从而实现了聚类的目的。
阅读全文