K-聚类(K-means Clustering)是一种无监督学习算法,用于将数据集划分为K个不同的簇(clusters)。每个簇由其内部数据点的均值表示,即簇中心(centroid)。算法的目标是最小化每个数据点到其所属簇中心的距离之和。
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加载Iris数据集
iris = load_iris()
X = iris.data
# 应用K-means算法
kmeans = KMeans(n_clusters=3, random_state=0)
kmeans.fit(X)
# 预测每个样本的簇标签
labels = kmeans.predict(X)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', marker='x')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('K-means Clustering on Iris Dataset')
plt.show()
问题1:选择合适的K值
from sklearn.metrics import silhouette_score
# 肘部法则示例
inertia = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(X)
inertia.append(kmeans.inertia_)
plt.plot(range(1, 11), inertia, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.title('Elbow Method For Optimal k')
plt.show()
# 轮廓系数示例
silhouette_scores = []
for k in range(2, 11):
kmeans = KMeans(n_clusters=k, random_state=0)
labels = kmeans.fit_predict(X)
score = silhouette_score(X, labels)
silhouette_scores.append(score)
plt.plot(range(2, 11), silhouette_scores, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Silhouette Score')
plt.title('Silhouette Score For Optimal k')
plt.show()
问题2:初始簇中心的选择
kmeans = KMeans(n_clusters=3, init='k-means++', random_state=0)
kmeans.fit(X)
通过这些方法和示例代码,你可以有效地应用K-means聚类算法来处理Iris数据集,并解决常见的聚类问题。
领取专属 10元无门槛券
手把手带您无忧上云