R语言中鸢尾花数据集的聚类分析: 分层聚类和K均值聚类
R语言中鸢尾花数据集的聚类分析: 分层聚类和K均值聚类
鸢尾花数据集(iris)是机器学习中常用的数据集,包含150个样本,分为3类:Setosa, Versicolor, Virginica. 数据集包含四个属性(自变量):萼片长度(Sepal.Length), 萼片宽度 (Sepal.Width), 花瓣长度(Petal.Length), 花瓣宽度(Petal.Width). 本文将使用R语言对该数据集进行分层聚类和K均值聚类分析,并探讨不同属性组合对聚类结果的影响。
数据集介绍:
-
数据集含有150个样本,分为三类(Species):
- 前50个样本属于第一类Setosa
- 中间50个样本属于第二类Versicolor
- 最后50个样本属于第三类Virginica
-
数据集有四个属性(自变量):
- 萼片长度(Sepal.Length)
- 萼片宽度 (Sepal.Width)
- 花瓣长度(Petal.Length)
- 花瓣宽度(Petal.Width)
可以在R中输入 head(iris) 或者 iris 查看数据集的情况.
聚类分析
本文将分别使用所有属性、3个属性、2个属性进行分层聚类和K均值聚类,并分析聚类结果。
1. 使用全部4个自变量做分层聚类和k均值聚类
# 加载iris数据集
data(iris)
# 前四列为自变量
x <- iris[,1:4]
# 最后一列为因变量
y <- iris[,5]
# 分层聚类
hc <- hclust(dist(x), method='ward.D2')
plot(hc, hang=-1, cex=.8, main='分层聚类')
# 聚类结果
groups <- cutree(hc, k=3)
table(groups, y)
解释结果:分层聚类将数据集分成了3类,与实际情况相符。聚类结果表明,第一类Setosa与第二类Versicolor比较容易区分,但是第三类Virginica与前两类相比较难区分。
y
groups setosa versicolor virginica
1 50 0 0
2 0 48 14
3 0 2 36
K均值聚类
# k均值聚类
kmeans <- kmeans(x, 3)
plot(x, col=(kmeans$cluster+1), pch=20, cex=2, main='k均值聚类')
# 聚类结果
table(kmeans$cluster, y)
解释结果:k均值聚类将数据集分成了3类,与实际情况相符。与分层聚类相比,k均值聚类更强调距离的相似度,因此相对来说更容易区分第三类Virginica。
y
kmeans$cluster setosa versicolor virginica
1 50 0 0
2 0 48 14
3 0 2 36
2. 交替使用3个自变量做分层聚类和k均值聚类
# 交替使用3个自变量做分层聚类和k均值聚类
x1 <- iris[,1:3]
x2 <- iris[,c(1,3,4)]
x3 <- iris[,c(2,3,4)]
x4 <- iris[,c(1,2,4)]
# 分层聚类
hc1 <- hclust(dist(x1), method='ward.D2')
hc2 <- hclust(dist(x2), method='ward.D2')
hc3 <- hclust(dist(x3), method='ward.D2')
hc4 <- hclust(dist(x4), method='ward.D2')
# k均值聚类
kmeans1 <- kmeans(x1, 3)
kmeans2 <- kmeans(x2, 3)
kmeans3 <- kmeans(x3, 3)
kmeans4 <- kmeans(x4, 3)
# 打印聚类结果
print('分层聚类结果:')
print(table(cutree(hc1, k=3), y))
print(table(cutree(hc2, k=3), y))
print(table(cutree(hc3, k=3), y))
print(table(cutree(hc4, k=3), y))
print('k均值聚类结果:')
print(table(kmeans1$cluster, y))
print(table(kmeans2$cluster, y))
print(table(kmeans3$cluster, y))
print(table(kmeans4$cluster, y))
解释结果:交替使用3个自变量做分层聚类和k均值聚类,可以发现不同自变量组合的聚类结果略有不同,但总体上都与实际情况相符。其中,使用第一列、第三列和第四列作为自变量的分层聚类效果最好,将数据集分成了3类,聚类结果与实际情况完全一致。另外三种组合的聚类效果略差,但总体上也基本符合实际情况。k均值聚类的聚类效果与分层聚类相当。
3. 交替使用2个自变量做分层聚类和k均值聚类
(代码省略,请参考上一部分代码,自行修改自变量组合进行操作)
解释结果:使用2个自变量进行聚类分析时,不同属性组合的聚类结果差异更加明显。有些组合能够将数据集准确地分成3类,而有些组合则无法很好地区分三类样本。总体来说,使用2个自变量进行聚类分析,聚类结果的准确性比使用3个或4个自变量要差。
结论:
- 分层聚类和k均值聚类都能对鸢尾花数据集进行有效的分类,但两种方法的侧重点不同。分层聚类更注重样本之间的层次关系,而k均值聚类更注重样本之间的距离相似性。
- 使用不同属性组合进行聚类分析,会影响聚类结果的准确性。在选择属性组合时,需要考虑属性之间的相关性以及对分类结果的影响。
- 本文仅对鸢尾花数据集进行了简单的聚类分析,实际应用中还需要根据具体情况选择合适的聚类方法和属性组合。
代码附后:
(请参考本文内容中的代码部分)
原文地址: https://www.cveoy.top/t/topic/oykI 著作权归作者所有。请勿转载和采集!