使用K-means对sklearn自带数据集进行聚类,使用sklearn,并且对K值进行寻找最优 全部代码
时间: 2024-03-05 16:48:51 浏览: 209
好的,下面是使用K-means对sklearn自带数据集进行聚类的完整代码,包括了K值的寻找最优。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
# 生成数据
X, y = make_blobs(n_samples=1000, n_features=2, centers=4, random_state=42)
# 寻找最优K值
sse = []
silhouette_coef = []
for k in range(2, 11):
kmeans = KMeans(n_clusters=k, random_state=0).fit(X)
sse.append(kmeans.inertia_)
score = silhouette_score(X, kmeans.labels_, metric='euclidean')
silhouette_coef.append(score)
# 绘制SSE和轮廓系数曲线
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.plot(range(2, 11), sse, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.title('Elbow Method')
plt.subplot(122)
plt.plot(range(2, 11), silhouette_coef, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Silhouette Coefficient')
plt.title('Silhouette Method')
plt.show()
# 选取最优K值进行聚类
k = 4
kmeans = KMeans(n_clusters=k, random_state=0).fit(X)
# 可视化聚类结果
centers = kmeans.cluster_centers_
colors = ['r', 'g', 'b', 'y', 'c', 'm']
for i in range(k):
index = np.where(kmeans.labels_ == i)
plt.scatter(X[index, 0], X[index, 1], c=colors[i], label='Cluster {}'.format(i))
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#000000')
plt.legend()
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
```
在代码中,首先使用sklearn中的make_blobs函数生成了一个聚类数据集,然后使用循环遍历K值,通过KMeans算法进行聚类,并计算SSE和轮廓系数。最后,根据SSE和轮廓系数的曲线,选取最优K值进行聚类,并可视化聚类结果。
需要注意的是,由于该数据集是人为生成的,因此不同的数据集可能需要不同的K值才能得到最优聚类结果。因此,在实际应用中还需要根据具体数据集进行调整。
阅读全文