R聚类分析
聚类分析是一种无监督学习方法,用于将数据集中的对象分组,使得同一组(称为簇)中的对象彼此相似,而不同组中的对象差异较大。聚类分析在数据挖掘、模式识别、图像分析等领域有广泛应用。本文将介绍如何在R中实现聚类分析,并通过实际案例帮助初学者理解其应用。
什么是聚类分析?
聚类分析的目标是将数据集划分为若干个簇,每个簇内的数据点具有较高的相似性,而不同簇之间的数据点差异较大。常见的聚类算法包括K均值聚类(K-means)、层次聚类(Hierarchical Clustering)和DBSCAN等。
K均值聚类(K-means)
K均值聚类是最常用的聚类算法之一。其基本思想是通过迭代将数据点分配到K个簇中,使得每个数据点与其所属簇的中心(质心)之间的距离最小化。
算法步骤
- 随机选择K个初始质心。
- 将每个数据点分配到最近的质心所在的簇。
- 重新计算每个簇的质心。
- 重复步骤2和3,直到质心不再变化或达到最大迭代次数。
R代码示例
以下是一个使用K均值聚类的简单示例:
r
# 生成随机数据
set.seed(123)
data <- matrix(rnorm(100), ncol = 2)
# 执行K均值聚类
kmeans_result <- kmeans(data, centers = 3)
# 查看聚类结果
print(kmeans_result$cluster)
输出:
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
可视化聚类结果
r
# 可视化聚类结果
plot(data, col = kmeans_result$cluster, pch = 19, main = "K-means Clustering")
points(kmeans_result$centers, col = 1:3, pch = 8, cex = 2)
层次聚类(Hierarchical Clustering)
层次聚类通过构建树状结构(树状图)来表示数据点之间的层次关系。层次聚类可以分为凝聚式(自底向上)和分裂式(自顶向下)两种方法。
R代码示例
以下是一个使用层次聚类的简单示例:
r
# 生成随机数据
set.seed(123)
data <- matrix(rnorm(100), ncol = 2)
# 计算距离矩阵
dist_matrix <- dist(data)
# 执行层次聚类
hclust_result <- hclust(dist_matrix, method = "complete")
# 绘制树状图
plot(hclust_result, main = "Hierarchical Clustering")
实际应用案例
案例:客户细分
假设我们有一组客户数据,包含客户的年龄和年收入。我们可以使用聚类分析将客户分为不同的群体,以便进行有针对性的营销活动。
r
# 加载数据
customer_data <- read.csv("customer_data.csv")
# 执行K均值聚类
kmeans_result <- kmeans(customer_data[, c("Age", "AnnualIncome")], centers = 4)
# 可视化聚类结果
plot(customer_data$Age, customer_data$AnnualIncome, col = kmeans_result$cluster, pch = 19, main = "Customer Segmentation")
points(kmeans_result$centers, col = 1:4, pch = 8, cex = 2)
总结
聚类分析是一种强大的工具,可以帮助我们发现数据中的潜在结构。通过K均值聚类和层次聚类,我们可以将数据点分组,从而更好地理解数据的分布和模式。在实际应用中,聚类分析可以用于客户细分、图像分割、异常检测等多个领域。
附加资源
练习
- 使用R内置的
iris
数据集,尝试使用K均值聚类将鸢尾花分为3类,并可视化结果。 - 使用层次聚类对
mtcars
数据集进行聚类,并绘制树状图。
提示
在练习中,尝试调整聚类的参数(如K值或距离度量方法),观察结果的变化。