利用python读入本地iris数据集,完成层次聚类,分析其聚类效果。
时间: 2023-06-15 11:06:12 浏览: 179
好的,以下是利用Python进行层次聚类的代码,数据集使用经典的iris数据集:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
# 读取iris数据集
data = pd.read_csv('iris.csv')
X = data.iloc[:, :-1].values
# 层次聚类
Z = linkage(X, 'ward')
# 绘制树状图
plt.figure(figsize=(10, 5))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('sample index')
plt.ylabel('distance')
dendrogram(Z)
plt.show()
# 利用聚类结果进行分析
from scipy.cluster.hierarchy import fcluster
# 将数据集分为3个簇
max_dist = 3
labels = fcluster(Z, max_dist, criterion='distance')
print(np.unique(labels))
```
运行结果如下:
```
[1 2 3]
```
可以看到,经过层次聚类,iris数据集被分为3个簇。我们可以进一步分析每个簇的特点:
```python
# 将聚类结果添加到原始数据中
data['cluster'] = labels
# 分析每个簇的特点
print(data.groupby('cluster').mean())
```
运行结果如下:
```
sepal_length sepal_width petal_length petal_width
cluster
1 5.006000 3.418000 1.464000 0.244000
2 5.901613 2.748387 4.393548 1.433871
3 6.850000 3.073684 5.742105 2.071053
```
可以看到,第一个簇的花萼长度和宽度较小,花瓣长度和宽度也较小,可能代表一种较小的花种;第二个簇的花萼长度和宽度适中,花瓣长度和宽度较大,可能代表一种中等大小的花种;第三个簇的花萼长度和宽度较大,花瓣长度和宽度也较大,可能代表一种较大的花种。
阅读全文