在数据挖掘和机器学习领域,聚类分析是一种重要的无监督学习方法,它能够将数据集中相似的数据点划分到不同的组或簇中。K means 聚类是最常用的聚类算法之一,它简单易懂、计算效率高,广泛应用于图像分割、客户细分、市场分析等众多领域。本文将详细介绍 K means 聚类的原理、实现步骤,并通过 R 语言代码进行演示。
K means 聚类的目标是将 $n$ 个样本点划分为 $k$ 个不同的簇,使得簇内的样本点相似度尽可能高,而簇间的相似度尽可能低。具体步骤如下:
我们使用 R 语言内置的 iris
数据集进行演示,该数据集包含了 150 个鸢尾花样本,每个样本有 4 个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度),以及对应的鸢尾花品种。
# 加载 iris 数据集
data(iris)
# 提取特征数据,去除品种标签
iris_features <- iris[, 1:4]
# 设置聚类的簇数,这里我们选择 3,因为 iris 数据集有 3 个品种
k <- 3
# 进行 K means 聚类
kmeans_result <- kmeans(iris_features, centers = k)
# 查看聚类结果
print(kmeans_result)
# 可视化聚类结果
library(cluster)
clusplot(iris_features, kmeans_result$cluster,
color = TRUE, shade = TRUE,
labels = 2, lines = 0)
data(iris)
加载 iris
数据集,并提取前 4 列作为特征数据。iris
数据集有 3 个品种。kmeans()
函数进行 K means 聚类,指定特征数据和簇数。clusplot()
函数绘制聚类结果的散点图,直观展示聚类效果。为了评估 K means 聚类的效果,我们可以使用一些指标,如轮廓系数(Silhouette Coefficient)。轮廓系数衡量了每个样本点与所在簇的紧密程度以及与其他簇的分离程度,取值范围为 $[-1, 1]$,值越接近 1 表示聚类效果越好。
# 计算轮廓系数
library(cluster)
silhouette_result <- silhouette(kmeans_result$cluster, dist(iris_features))
mean(silhouette_result[, 3])
在 K means 聚类中,$k$ 值的选择非常重要,它直接影响聚类的效果。常用的选择 $k$ 值的方法有手肘法(Elbow Method)和轮廓系数法。
手肘法通过绘制不同 $k$ 值下的簇内误差平方和(Within-cluster Sum of Squares, WSS)与 $k$ 的关系图,选择曲线的“手肘”位置作为最优的 $k$ 值。
# 计算不同 k 值下的 WSS
wss <- sapply(1:10, function(k) {
kmeans(iris_features, centers = k)$tot.withinss
})
# 绘制 WSS 与 k 的关系图
plot(1:10, wss, type = "b", xlab = "Number of clusters (k)", ylab = "Within-cluster sum of squares (WSS)")
轮廓系数法通过计算不同 $k$ 值下的平均轮廓系数,选择平均轮廓系数最大的 $k$ 值作为最优的 $k$ 值。
# 计算不同 k 值下的平均轮廓系数
silhouette_scores <- sapply(2:10, function(k) {
kmeans_result <- kmeans(iris_features, centers = k)
silhouette_result <- silhouette(kmeans_result$cluster, dist(iris_features))
mean(silhouette_result[, 3])
})
# 绘制平均轮廓系数与 k 的关系图
plot(2:10, silhouette_scores, type = "b", xlab = "Number of clusters (k)", ylab = "Average silhouette score")
K means 聚类是一种简单有效的聚类算法,通过不断迭代更新聚类中心,将数据点划分为不同的簇。在实际应用中,我们需要根据具体问题选择合适的 $k$ 值,并使用合适的评估指标来评估聚类效果。
方法 | 优点 | 缺点 |
---|---|---|
K means 聚类 | 简单易懂、计算效率高 | 对初始聚类中心敏感、需要预先指定 $k$ 值 |
手肘法 | 直观、易于理解 | 选择“手肘”位置存在主观性 |
轮廓系数法 | 客观、能够定量评估聚类效果 | 计算复杂度较高 |
希望本文能够帮助你理解 K means 聚类的原理和实现方法,并在实际项目中应用该算法。