R语言鸢尾花数据集iris聚类分析:分层聚类与k均值聚类
R语言鸢尾花数据集iris聚类分析:分层聚类与k均值聚类
鸢尾花数据集iris是机器学习中的经典数据集,包含了150个样本,每个样本有四个属性(自变量):萼片长度(Sepal.Length),萼片宽度(Sepal.Width),花瓣长度(Petal.Length),花瓣宽度(Petal.Width)。数据集被分为三类(Species):前50个样本属于第一类Setosa,中间50个样本属于第二类Versicolor,最后50个样本属于第三类Virginica。
在R中,可以使用head(iris)或iris查看数据集的情况。
本篇文章将使用R语言对鸢尾花数据集iris进行聚类分析,分别使用分层聚类和k均值聚类方法,并比较不同自变量组合对聚类结果的影响。
(1) 使用全部4个自变量做分层聚类和k均值聚类
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,1:4]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,1:4], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 48 14
3 0 2 36
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
(2) 交替使用3个自变量(共有4种可能搭配)做分层聚类和k均值聚类
萼片长度、萼片宽度、花瓣长度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(1,2,3)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,2,3)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 11 36
3 0 39 14
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
萼片长度、萼片宽度、花瓣宽度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(1,2,4)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,2,4)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 47 14
3 0 3 36
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
萼片长度、花瓣长度、花瓣宽度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(1,3,4)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,3,4)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 47 1
3 0 3 49
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
(3) 交替使用2个自变量(共有6种可能搭配)做分层聚类和k均值聚类
萼片长度、萼片宽度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(1,2)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,2)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 47 14
3 0 3 36
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
萼片长度、花瓣长度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(1,3)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,3)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 16 33
3 0 34 17
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
萼片长度、花瓣宽度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(1,4)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,4)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 48 14
3 0 2 36
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
萼片宽度、花瓣长度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(2,3)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(2,3)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 6 37
3 0 44 13
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
萼片宽度、花瓣宽度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(2,4)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(2,4)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 47 14
3 0 3 36
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
花瓣长度、花瓣宽度
分层聚类
# 分层聚类
hc <- hclust(dist(iris[,c(3,4)]))
plot(hc)

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。
k均值聚类
# k均值聚类
kmeans_res <- kmeans(iris[,c(3,4)], 3)
table(kmeans_res$cluster, iris$Species)
结果如下:
setosa versicolor virginica
1 50 0 0
2 0 45 2
3 0 5 48
从结果可以看出,k均值聚类将数据分为了三类,与实际分类不完全相符合,但分类结果较为接近。
总结
通过对鸢尾花数据集iris进行分层聚类和k均值聚类分析,可以得出以下结论:
- 分层聚类能够将数据分成三类,与实际分类相符合。
- k均值聚类也能够将数据分成三类,但与实际分类不完全相符合。
- 使用不同的自变量组合对聚类结果会产生一定影响,但总体来说,分层聚类和k均值聚类都能在一定程度上反映数据的实际分类情况。
代码附后
# 加载数据集
data(iris)
# 使用全部4个自变量做分层聚类和k均值聚类
# 分层聚类
hc <- hclust(dist(iris[,1:4]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,1:4], 3)
table(kmeans_res$cluster, iris$Species)
# 交替使用3个自变量(共有4种可能搭配)做分层聚类和k均值聚类
# 萼片长度、萼片宽度、花瓣长度
# 分层聚类
hc <- hclust(dist(iris[,c(1,2,3)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,2,3)], 3)
table(kmeans_res$cluster, iris$Species)
# 萼片长度、萼片宽度、花瓣宽度
# 分层聚类
hc <- hclust(dist(iris[,c(1,2,4)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,2,4)], 3)
table(kmeans_res$cluster, iris$Species)
# 萼片长度、花瓣长度、花瓣宽度
# 分层聚类
hc <- hclust(dist(iris[,c(1,3,4)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,3,4)], 3)
table(kmeans_res$cluster, iris$Species)
# 交替使用2个自变量(共有6种可能搭配)做分层聚类和k均值聚类
# 萼片长度、萼片宽度
# 分层聚类
hc <- hclust(dist(iris[,c(1,2)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,2)], 3)
table(kmeans_res$cluster, iris$Species)
# 萼片长度、花瓣长度
# 分层聚类
hc <- hclust(dist(iris[,c(1,3)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,3)], 3)
table(kmeans_res$cluster, iris$Species)
# 萼片长度、花瓣宽度
# 分层聚类
hc <- hclust(dist(iris[,c(1,4)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(1,4)], 3)
table(kmeans_res$cluster, iris$Species)
# 萼片宽度、花瓣长度
# 分层聚类
hc <- hclust(dist(iris[,c(2,3)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(2,3)], 3)
table(kmeans_res$cluster, iris$Species)
# 萼片宽度、花瓣宽度
# 分层聚类
hc <- hclust(dist(iris[,c(2,4)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(2,4)], 3)
table(kmeans_res$cluster, iris$Species)
# 花瓣长度、花瓣宽度
# 分层聚类
hc <- hclust(dist(iris[,c(3,4)]))
plot(hc)
# k均值聚类
kmeans_res <- kmeans(iris[,c(3,4)], 3)
table(kmeans_res$cluster, iris$Species)
原文地址: https://www.cveoy.top/t/topic/ox2Z 著作权归作者所有。请勿转载和采集!