用鸢尾花iris数据集前2列进行K-means实验,用python分别设置2个聚类、3个聚类、4个聚类,并可视化。
时间: 2024-09-18 20:08:19 浏览: 30
在Python中,我们可以使用sklearn库来进行K-means聚类实验,尤其是用Iris数据集的前两列作为输入特征。这里是一个简化的步骤:
首先,确保安装了必要的库:
```bash
pip install numpy pandas matplotlib scikit-learn
```
然后,导入所需的模块并加载数据集(假设已经有一个名为`iris`的数据集):
```python
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 取前两列
y = iris.target # 原始标签
```
接下来,针对不同的聚类数k进行K-means:
1. **两个聚类(K=2)**:
```python
kmeans_2 = KMeans(n_clusters=2)
kmeans_2.fit(X)
labels_2 = kmeans_2.labels_
```
2. **三个聚类(K=3)**:
```python
kmeans_3 = KMeans(n_clusters=3)
kmeans_3.fit(X)
labels_3 = kmeans_3.labels_
```
3. **四个聚类(K=4)**:
```python
kmeans_4 = KMeans(n_clusters=4)
kmeans_4.fit(X)
labels_4 = kmeans_4.labels_
```
最后,我们用matplotlib将结果可视化:
```python
for i, (name, labels) in enumerate(zip(('K=2', 'K=3', 'K=4'), [labels_2, labels_3, labels_4])):
plt.figure(figsize=(8, 6))
colors = ['navy', 'turquoise', 'darkorange']
for color, label in zip(colors, range(k)):
plt.scatter(X[labels == label, 0], X[labels == label, 1], color=color, alpha=.8, lw=2, marker='o')
plt.title(name)
plt.legend(list(map(str, range(1, len(colors)+1))))
plt.show()
```
上述代码会分别生成三个图,每个图表示不同聚类数下的聚类结果。