跳到主要内容

R聚类分析

聚类分析是一种无监督学习方法,用于将数据集中的对象分组,使得同一组(称为簇)中的对象彼此相似,而不同组中的对象差异较大。聚类分析在数据挖掘、模式识别、图像分析等领域有广泛应用。本文将介绍如何在R中实现聚类分析,并通过实际案例帮助初学者理解其应用。

什么是聚类分析?

聚类分析的目标是将数据集划分为若干个簇,每个簇内的数据点具有较高的相似性,而不同簇之间的数据点差异较大。常见的聚类算法包括K均值聚类(K-means)、层次聚类(Hierarchical Clustering)和DBSCAN等。

K均值聚类(K-means)

K均值聚类是最常用的聚类算法之一。其基本思想是通过迭代将数据点分配到K个簇中,使得每个数据点与其所属簇的中心(质心)之间的距离最小化。

算法步骤

  1. 随机选择K个初始质心。
  2. 将每个数据点分配到最近的质心所在的簇。
  3. 重新计算每个簇的质心。
  4. 重复步骤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均值聚类和层次聚类,我们可以将数据点分组,从而更好地理解数据的分布和模式。在实际应用中,聚类分析可以用于客户细分、图像分割、异常检测等多个领域。

附加资源

练习

  1. 使用R内置的iris数据集,尝试使用K均值聚类将鸢尾花分为3类,并可视化结果。
  2. 使用层次聚类对mtcars数据集进行聚类,并绘制树状图。
提示

在练习中,尝试调整聚类的参数(如K值或距离度量方法),观察结果的变化。