K-Means算法那对iris数据集聚类的过程分析
时间: 2023-11-25 09:08:32 浏览: 101
聚类分析中的k-means算法
5星 · 资源好评率100%
好的,下面我将为您介绍一下K-Means算法在Iris数据集上的聚类过程。
Iris数据集是一个非常常用的数据集,用于分类和聚类算法的性能评估。该数据集包含3种鸢尾花的4个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度),每个类别有50个样本。我们将使用K-Means算法对该数据集进行聚类。
首先,我们需要确定要分成几个簇。通常可以通过手肘法(Elbow Method)来确定最佳的聚类数。手肘法的基本思想是,随着聚类数的增加,簇内平方和(SSE)会逐渐减小,直到某个点后下降速度变缓。这个点对应的聚类数就是最佳的聚类数。下面是使用手肘法确定聚类数的代码:
```python
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
sse = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(X)
sse.append(kmeans.inertia_)
plt.plot(range(1, 11), sse)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.show()
```
运行上述代码可以得到下图:
![elbow_method](https://i.imgur.com/WnJlUkI.png)
从上图可以看出,当聚类数为3时,SSE的下降速度变缓,因此我们选择聚类数为3。
接下来,我们使用K-Means算法对Iris数据集进行聚类。代码如下:
```python
kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10, random_state=0)
y_kmeans = kmeans.fit_predict(X)
```
运行上述代码可以得到聚类结果y_kmeans,这个结果是一个长度为150的数组,每个元素表示对应样本所属的簇编号(0、1或2)。我们可以将聚类结果可视化,代码如下:
```python
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'yellow', label = 'Centroids')
plt.title('Clusters of Iris dataset')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.legend()
plt.show()
```
运行上述代码可以得到下图:
![iris_clusters](https://i.imgur.com/cJQ9dX6.png)
从上图可以看出,K-Means算法成功将Iris数据集中的样本分成了3个簇,并且不同簇之间的特征存在差异。
阅读全文