利用python读入本地iris数据集,完成k-means聚类,分析其聚类效果
时间: 2024-06-09 09:06:12 浏览: 102
好的,以下是代码实现:
```python
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加载数据集
iris = load_iris()
data = pd.DataFrame(iris.data, columns=iris.feature_names)
# 聚类
kmeans = KMeans(n_clusters=3, random_state=0).fit(data)
# 可视化聚类结果
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
ax1.scatter(data.iloc[:, 0], data.iloc[:, 1], c=iris.target)
ax1.set_xlabel('Sepal length')
ax1.set_ylabel('Sepal width')
ax1.set_title('Ground Truth')
ax2.scatter(data.iloc[:, 0], data.iloc[:, 1], c=kmeans.labels_)
ax2.set_xlabel('Sepal length')
ax2.set_ylabel('Sepal width')
ax2.set_title('K-means Clustering')
plt.show()
```
解释一下代码:
1. 首先,我们加载了本地的 iris 数据集。数据集包含了四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
2. 我们使用 `KMeans` 算法进行聚类,将数据集分成三类。这里我们使用了 k-means++ 算法初始化聚类中心,并使用随机种子取得可重复的结果。
3. 最后,我们使用 matplotlib 可视化聚类结果,将原始数据集按照真实类别和 k-means 聚类结果分别绘制在两张图中。
运行代码后,我们可以得到以下的聚类结果:
![kmeans-clustering-iris](https://img-blog.csdnimg.cn/20210408195205857.png)
从图中我们可以看出,k-means 算法成功将 iris 数据集分成了三个簇。类别 0 包含了大多数的 setosa(绿色点),类别 1 包含了大多数的 versicolor(红色点),类别 2 包含了大多数的 virginica(蓝色点)。
阅读全文