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)

image-20211028152627129

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028153156679

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028155149134

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028155424143

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028160223857

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028160534134

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028160850320

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028161131068

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028161419889

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)

image-20211028161652422

从图中可以看出,聚类结果将数据分为了三类,与实际分类相符合。

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)
R语言鸢尾花数据集iris聚类分析:分层聚类与k均值聚类

原文地址: https://www.cveoy.top/t/topic/ox2Z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录