R语言鸢尾花数据集(iris)聚类分析:分层聚类和K均值聚类

鸢尾花数据集(iris)是一个经典的机器学习数据集,包含150个样本,分为三类:Setosa, Versicolor, Virginica。每个样本有四个属性(自变量):萼片长度(Sepal.Length)、萼片宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)。

本实验将使用R语言对该数据集进行分层聚类和K均值聚类分析,探索不同自变量组合对聚类结果的影响。

数据集情况:

在R中输入head(iris)iris可以查看数据集的情况。

实验目标:

  1. 使用全部4个自变量做分层聚类和k均值聚类,解释结果;
  2. 交替使用3个自变量(共有4种可能搭配)做分层聚类和k均值聚类,解释结果;
  3. 交替使用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)用于设置随机数种子,保证每次运行代码得到相同的结果。

本实验只是对鸢尾花数据集的一个简单聚类分析示例,实际应用中需要根据具体情况选择合适的聚类算法和参数。

R语言鸢尾花数据集(iris)聚类分析:分层聚类和K均值聚类

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

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