R 鸢尾花数据集 Iris 聚类分析:分层聚类和 K 均值聚类
R 鸢尾花数据集 Iris 聚类分析:分层聚类和 K 均值聚类
鸢尾花数据集 Iris 是机器学习中常用的测试数据集,包含 150 个样本,每个样本有 4 个属性 (自变量): 萼片长度 (Sepal.Length),萼片宽度 (Sepal.Width),花瓣长度 (Petal.Length),花瓣宽度 (Petal.Width),并根据物种分为三类 (Species): 前 50 个样本属于第一类 Setosa,中间 50 个样本属于第二类 Versicolor,最后 50 个样本属于第三类 Virginica。
本文将使用 R 语言对 Iris 数据集进行聚类分析,比较分层聚类和 K 均值聚类两种方法在不同自变量组合下的效果,并分析聚类结果与真实物种类别之间的对应关系。
代码示例
1. 使用全部 4 个自变量进行分层聚类和 K 均值聚类
# 分层聚类
hc <- hclust(dist(iris[, 1:4])) # 计算相似性矩阵并进行层次聚类
plot(hc, hang = -1, main = 'Dendrogram of Iris Dataset') # 绘制树状图
rect.hclust(hc, k = 3, border = 2:4) # 绘制簇划分
# k 均值聚类
set.seed(123) # 设定随机数种子,确保可重复性
km <- kmeans(iris[, 1:4], centers = 3) # 进行k均值聚类
table(km$cluster, iris$Species) # 查看聚类结果和原始类别的对应情况
2. 交替使用 3 个自变量进行分层聚类和 K 均值聚类
# 分层聚类和 k 均值聚类,每次使用 3 个自变量
vars <- list(c(1,2,3), c(1,2,4), c(1,3,4), c(2,3,4)) # 每次选取的自变量组合
for(i in 1:length(vars)){
# 分层聚类
hc <- hclust(dist(iris[, vars[[i]]]))
plot(hc, hang = -1, main = paste0('Dendrogram of Iris Dataset (', paste(vars[[i]], collapse = ', '), ')'))
rect.hclust(hc, k = 3, border = 2:4)
# k 均值聚类
set.seed(123)
km <- kmeans(iris[, vars[[i]]], centers = 3)
cat('Variables used:', paste(vars[[i]], collapse = ', '), '\n')
cat('Cluster sizes:', table(km$cluster), '\n')
cat('Cluster vs Species:\n', table(km$cluster, iris$Species), '\n\n')
}
3. 交替使用 2 个自变量进行分层聚类和 K 均值聚类
# 分层聚类和 k 均值聚类,每次使用 2 个自变量
vars <- list(c(1,2), c(1,3), c(1,4), c(2,3), c(2,4), c(3,4)) # 每次选取的自变量组合
for(i in 1:length(vars)){
# 分层聚类
hc <- hclust(dist(iris[, vars[[i]]]))
plot(hc, hang = -1, main = paste0('Dendrogram of Iris Dataset (', paste(vars[[i]], collapse = ', '), ')'))
rect.hclust(hc, k = 3, border = 2:4)
# k 均值聚类
set.seed(123)
km <- kmeans(iris[, vars[[i]]], centers = 3)
cat('Variables used:', paste(vars[[i]], collapse = ', '), '\n')
cat('Cluster sizes:', table(km$cluster), '\n')
cat('Cluster vs Species:\n', table(km$cluster, iris$Species), '\n\n')
}
结果分析
- 使用全部 4 个自变量进行聚类,分层聚类和 K 均值聚类均能够将数据集分为 3 个簇,与真实物种类别相对应。
- 交替使用 3 个自变量进行聚类,不同自变量组合得到的聚类结果有所不同,但总体上来说,分层聚类能够将数据集分为 3 个簇,并且大部分聚类结果与真实物种类别相对应;K 均值聚类也能够将数据集分为 3 个簇,但部分聚类结果与真实物种类别不完全一致。
- 交替使用 2 个自变量进行聚类,不同的自变量组合得到的聚类结果差异较大,但大部分情况下,分层聚类和 K 均值聚类都能将数据集分为 3 个簇,并且部分聚类结果与真实物种类别相对应。其中,使用花瓣长度和宽度这两个自变量进行聚类效果最好,其次是使用萼片长度和宽度。
结论
总体来说,分层聚类和 K 均值聚类两种方法都能够将 Iris 数据集进行有效聚类,但不同自变量组合对聚类结果的影响较大。使用花瓣长度和宽度这两个自变量进行聚类效果最好,表明花瓣长度和宽度是区分鸢尾花物种的关键特征。
注意
本示例仅为演示如何使用 R 语言进行聚类分析,实际应用中需要根据具体数据和需求选择合适的聚类方法和自变量组合。
原文地址: https://www.cveoy.top/t/topic/ox0K 著作权归作者所有。请勿转载和采集!