import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.cluster import KMeans # 加载鸢尾花数据集 iris = load_iris() X = iris.data[:, :2] # 取前两个特征作为萼片长和宽 # 进行Kmeans聚类划分 kmeans = KMeans(n_clusters=3, random_state=0).fit(X) labels = kmeans.labels_ # 绘制散点图 plt.scatter(X[labels == 0, 0], X[labels == 0, 1], c='red', label='Cluster 1') plt.scatter(X[labels == 1, 0], X[labels == 1, 1], c='blue', label='Cluster 2') plt.scatter(X[labels == 2, 0], X[labels == 2, 1], c='green', label='Cluster 3') plt.xlabel('Sepal Length') plt.ylabel('Sepal Width') plt.title('Kmeans Clustering of Iris Dataset') plt.legend() plt.show()改进此代码
时间: 2024-01-26 12:04:42 浏览: 90
这段代码已经完成了 KMeans 聚类算法对鸢尾花数据集的分类,但是可以对其进行以下改进:
1. 使用更多的特征进行聚类,以提高聚类效果。
2. 对聚类结果进行评估,以确定最佳的聚类数。
3. 对聚类结果进行可视化,以更直观地展现聚类效果。
以下是改进后的代码:
```
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data # 取所有特征
# 进行PCA降维
pca = PCA(n_components=2)
X = pca.fit_transform(X)
# 确定最佳聚类数
inertias = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=0).fit(X)
inertias.append(kmeans.inertia_)
plt.plot(range(1, 11), inertias, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()
# 进行Kmeans聚类划分
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
labels = kmeans.labels_
# 绘制散点图
plt.scatter(X[labels == 0, 0], X[labels == 0, 1], c='red', label='Cluster 1')
plt.scatter(X[labels == 1, 0], X[labels == 1, 1], c='blue', label='Cluster 2')
plt.scatter(X[labels == 2, 0], X[labels == 2, 1], c='green', label='Cluster 3')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.title('Kmeans Clustering of Iris Dataset')
plt.legend()
plt.show()
```
改进后的代码使用了所有特征进行聚类,并对数据进行了 PCA 降维,以便在二维平面上进行可视化。同时,代码还使用了肘部法则确定最佳聚类数,并在可视化结果中添加了标题和图例,以更好地展现聚类效果。
阅读全文