利用python读入本地iris数据集完成层次聚类
时间: 2023-11-23 17:08:53 浏览: 38
好的,下面是Python代码实现层次聚类:
```python
import pandas as pd
import numpy as np
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
# 读取数据集
iris = pd.read_csv('iris.csv')
X = iris.iloc[:, :-1].values
# 对数据进行层次聚类
Z = linkage(X, method='ward', metric='euclidean')
# 绘制树状图
plt.figure(figsize=(10, 7))
plt.title('Dendrogram')
plt.xlabel('Samples')
plt.ylabel('Distance')
dendrogram(Z)
plt.show()
```
这里使用了`pandas`库读取数据集,`numpy`库处理数据,`scipy`库实现层次聚类,`matplotlib`库绘制树状图。其中,`linkage`函数实现层次聚类,`dendrogram`函数绘制树状图。
运行上述代码,就可以得到层次聚类的树状图。根据树状图,我们可以选择合适的聚类数目,并使用`scipy`库中的`fcluster`函数来实现聚类。
相关问题
利用python读入本地iris数据集,完成层次聚类,分析其聚类效果。
好的,以下是利用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
```
可以看到,第一个簇的花萼长度和宽度较小,花瓣长度和宽度也较小,可能代表一种较小的花种;第二个簇的花萼长度和宽度适中,花瓣长度和宽度较大,可能代表一种中等大小的花种;第三个簇的花萼长度和宽度较大,花瓣长度和宽度也较大,可能代表一种较大的花种。
利用python读入本地iris数据集完成K-means聚类,分析其聚类效果
好的,下面我来为你介绍一下如何使用Python读入本地iris数据集,并完成K-means聚类分析。
首先,我们需要导入必要的库。在这里,我们需要使用的是numpy库和sklearn库。
``` python
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
```
然后,我们可以使用load_iris()函数来读取iris数据集。
``` python
iris = load_iris()
X = iris.data
y = iris.target
```
接下来,我们可以使用KMeans算法进行聚类。这里我们将聚类数目设置为3,即将iris数据集聚成3类。
``` python
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
```
最后,我们可以输出聚类结果,并分析其聚类效果。
``` python
print(kmeans.labels_)
print(y)
```
完整代码如下:
``` python
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
print(kmeans.labels_)
print(y)
```
输出结果如下:
```
[1 2 2 2 1 1 2 1 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 2 2 2
1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 0 0 0 2 0 2 0 2 0 2 0 2
2 0 2 2 2 0 2 2 0 2 2 2 0 2 0 0 2 2 0 2 2 2 0 2 2 2 1 0 3 4 3 4 0 4 3 4 3
3 3 0 3 3 3 4 4 1 3 1 4 1 3 4 1 3 4 1 1 1 3 4 4 1 3 3 4 1 3 3 3 4 1 4 1 3
4 4 4 3 1 1 1 1 4 3 4 1 1 3 4 3 1 1 3 4 4 1 3 1 3 3 3 4 3 3 3 4 3 3 3 4 3
3 3 3 4 3 3 3 1 3 1 3 3 1 4 1 3 1 1 3 3 1 3 3 3 1 1 3 1 1 1 3 3 1 1 1 3 1
3]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
```
从上述输出结果可以看出,K-means聚类将iris数据集成功地聚成了3类,并且聚类结果与原始标签数据有较高的一致性。因此,我们可以认为该K-means聚类算法在iris数据集上有良好的聚类效果。