登录
首页大数据时代如何使用R进行聚类分析?
如何使用R进行聚类分析?
2023-06-15
收藏

聚类分析是一种常用的无监督学习方法,旨在将样本数据划分为相似的群组或簇。在R中,有多种聚类分析方法可供选择,包括层次聚类和K均值聚类等。本文将介绍如何使用R进行聚类分析。

数据准备

在进行聚类分析之前,需要先准备好要分析的数据集。数据通常以矩阵或数据框的形式呈现,其中每行代表一个样本,每列代表一个特征。在这里,我们将使用UCI Machine Learning Repository上的Iris数据集作为示例。该数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。首先,我们需要从网络上下载数据集并导入到R中:

iris <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", header = FALSE)
colnames(iris) <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")

层次聚类

层次聚类是一种将样本逐步分组的方法,可以形成一个树形结构,称为树状图。在R中,可以使用hclust函数来执行层次聚类分析。hclust函数需要一个距离矩阵或相似性矩阵作为输入,因此我们需要首先计算样本之间的距离或相似性矩阵。在这里,我们将使用欧几里得距离来度量样本之间的距离:

dist_mat <- dist(iris[, 1:4], method = "euclidean")

接下来,我们可以使用hclust函数对距离矩阵进行聚类分析:

hc_res <- hclust(dist_mat, method = "ward.D2")

其中,method = "ward.D2"表示使用Ward方法进行聚类分析。Ward方法尝试最小化群组内方差的增加量,因此通常能够产生更紧密的群组。执行完聚类分析后,我们可以使用plot函数来绘制树状图

plot(hc_res)

Hierarchical Clustering

树状图中可以看出,Iris数据集可以被分成3个主要簇。我们还可以使用cutree函数将每个样本分配到不同的簇中:

cluster_labels <- cutree(hc_res, k = 3)

其中,k = 3表示我们期望将数据分为3个簇。可以通过以下方式查看每个样本所属的簇:

head(cluster_labels)
#> [1] 1 1 1 1 1 1

K均值聚类

K均值聚类是一种迭代方法,旨在将样本分为k个不同的簇,使得每个簇内部的样本之间的距离最小化。在R中,可以使用kmeans函数来执行K均值聚类分析。kmeans函数需要指定要分成的簇数,并且通常需要多次运行以避免收敛于局部最小值。

kmeans_res <- kmeans(iris[, 1:4], centers = 3, nstart = 20)

其中,centers = 3表示我们期望将数据分为3个簇,nstart = 20表示我们希

望执行20次随机初始化来避免局部最小值。

K均值聚类分析的输出包括每个样本所属的簇标签和每个簇的中心点。我们可以通过以下方式查看分配到每个簇的样本数量:

table(kmeans_res$cluster)
#> 
#>  1  2  3 
#> 38 50 62

从结果可以看出,Iris数据集被成功地分成了3个主要簇,每个簇都有相似的特征值。

可视化聚类结果

除了树状图之外,我们还可以使用其他方法来可视化聚类结果。例如,我们可以使用ggplot2包中的函数绘制散点图,并使用不同的颜色表示不同的簇:

library(ggplot2)

iris_clustered <- cbind(iris, cluster_labels)
ggplot(iris_clustered, aes(x = Sepal.Length, y = Petal.Width, color = factor(cluster_labels))) +
    geom_point()

Scatter plot with clusters

散点图可以看出,不同簇的样本在花萼长度和花瓣宽度之间存在明显的差异。

总结

聚类分析是一种有用的无监督学习方法,可以帮助我们发现数据中隐藏的结构。在R中,我们可以使用层次聚类和K均值聚类等多种方法进行聚类分析。在进行聚类分析之前,我们需要准备好要分析的数据集,并选择合适的聚类算法和参数。最后,我们可以通过树状图散点图等方式来可视化聚类结果。

数据分析咨询请扫描二维码

最新资讯
更多
客服在线
立即咨询