Appearance
第9章:聚类算法:K-Means
K-Means是一种广泛使用的聚类算法,它通过迭代地将数据点分配到K个聚类中心来组织数据。本章将详细介绍K-Means的原理、应用场景以及如何使用Scikit-Learn实现K-Means模型。
9.1 K-Means原理
9.1.1 聚类目标
K-Means的目标是将数据点分组,使得同一组内的数据点尽可能相似,不同组之间的数据点尽可能不同。
9.1.2 距离度量
K-Means通常使用欧氏距离作为距离度量,来计算数据点与聚类中心之间的距离。
9.1.3 迭代优化
算法通过迭代地更新聚类中心和重新分配数据点来最小化总内平方和(SSE)。
9.2 K-Means应用
9.2.1 数据探索
K-Means常用于数据探索,帮助理解数据的内在结构。
9.2.2 市场细分
在市场分析中,K-Means可以用于客户细分,识别不同的客户群体。
9.2.3 图像分割
在图像处理中,K-Means可以用于图像分割,将图像划分为不同的区域。
9.3 K-Means代码实现
9.3.1 数据准备
我们将使用Scikit-Learn的鸢尾花数据集来演示K-Means的实现。
python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
iris = load_iris()
X = iris.data
# 选择两个特征进行聚类,以便可视化
X = X[:, :2]9.3.2 模型训练
使用Scikit-Learn的KMeans类来训练K-Means模型。
python
from sklearn.cluster import KMeans
# 创建K-Means聚类器实例
kmeans = KMeans(n_clusters=3, random_state=42)
# 训练模型
kmeans.fit(X)9.3.3 模型评估
评估模型的性能,尽管聚类问题通常没有明确的“正确答案”。
python
# 预测聚类标签
labels = kmeans.predict(X)
# 计算轮廓系数,评估聚类效果
from sklearn.metrics import silhouette_score
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg:.2f}")9.3.4 可视化聚类结果
可视化聚类结果,展示数据点和聚类中心。
python
import matplotlib.pyplot as plt
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', edgecolor='k')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75) # 聚类中心
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Means Clustering")
plt.show()9.4 本章小结
本章介绍了K-Means聚类算法的基本原理、应用场景,并使用Scikit-Learn实现了一个简单的K-Means模型。通过数据准备、模型训练、评估和可视化聚类结果,我们可以看到K-Means在数据聚类中的有效性。理解K-Means的工作原理和代码实现对于深入学习聚类算法至关重要。
