R语言中不同类型的聚类方法比较

作者: 拓端tecdat | 来源:发表于2020-04-07 11:27 被阅读0次

原文链接:http://tecdat.cn/?p=6454

聚类方法用于识别从营销,生物医学和地理空间等领域收集的多变量数据集中的相似对象。它们是不同类型的聚类方法,包括:

划分方法

分层聚类

模糊聚类

基于密度的聚类

基于模型的聚类

数据准备

演示数据集:名为USArrest的内置R数据集

删除丢失的数据

缩放变量以使它们具有可比性

# Load and prepare the data my_data <- USArrests %>% na.omit() %>% # Remove missing values (NA) scale() # Scale variables # View the firt 3 rows head(my_data, n = 3)

## Murder Assault UrbanPop Rape ## Alabama 1.2426 0.783 -0.521 -0.00342 ## Alaska 0.5079 1.107 -1.212 2.48420 ## Arizona 0.0716 1.479 0.999 1.04288

need-to-insert-img

距离

get_dist():用于计算数据矩阵的行之间的距离矩阵。与标准dist()功能相比,它支持基于相关的距离测量,包括“皮尔逊”,“肯德尔”和“斯皮尔曼”方法。

fviz_dist():用于可视化距离矩阵

res.dist <- get_dist(U gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

need-to-insert-img

划分聚类

、算法是将数据集细分为一组k个组的聚类技术,其中k是分析人员预先指定的组的数量。

k-means聚类的替代方案是K-medoids聚类或PAM(Partitioning Around Medoids,Kaufman和Rousseeuw,1990),与k-means相比,它对异常值不太敏感。

以下R代码显示如何确定最佳簇数以及如何在R中计算k-means和PAM聚类。

确定最佳簇数

fviz_nbclust(my_data, kmeans, method = "gap_stat")

need-to-insert-img

计算并可视化k均值聚类

set.seed(123) # Visualize fviz_cluster(km.res, data = my_data, ellipse.type = "convex", palette = "jco", ggtheme = theme_minimal())

need-to-insert-img

# Compute PAM pam.res <- pam(my_data, 3) # Visualize fviz_cluster(pam.res)

分层聚类

分层聚类是一种分区聚类的替代方法,用于识别数据集中的组。它不需要预先指定要生成的簇的数量。

# Compute hierarchical clustering res.hc <- USArrests %>% scale() %>% # Scale the data hclust(method = "ward.D2") # Compute hierachical clustering # Visualize using factoextra # Cut in 4 groups and color by groups fviz_dend(res.hc, k = 4, # Cut in four groups color_labels_by_k = TRUE, # color labels by groups rect = TRUE # Add rectangle around groups )

need-to-insert-img

评估聚类倾向

为了评估聚类倾向,可以使用Hopkins的统计量和视觉方法。

Hopkins统计:如果Hopkins统计量的值接近1(远高于0.5),那么我们可以得出结论,数据集是显着可聚类的。

视觉方法:视觉方法通过计算有序相异度图像中沿对角线的方形黑暗(或彩色)块的数量来检测聚类趋势。

R代码:

iris[, -5] %>% # Remove column 5 (Species) scale() %>% # Scale variables get_clust_tendency(n = 50, gradient = gradient.color)

## $hopkins_stat ## [1] 0.8 ## ## $plot

need-to-insert-img

need-to-insert-img

确定最佳簇数

set.seed(123) # Compute res.nbclust <- USArrests %>% scale() %>% (distance = "euclidean", min.nc = 2, max.nc = 10, method = "complete", index ="all")

# Visualize fviz_nbclust(res.nbclust, ggtheme = theme_minimal())

相关文章

  • R语言中不同类型的聚类方法比较

    原文链接:http://tecdat.cn/?p=6454 聚类方法用于识别从营销,生物医学和地理空间等领域收集的...

  • 技术 | 聚类分析中的各种相似度计算

    目录 一、聚类的基本数据结构二、不同数据类型的相异度计算方法三、R相异(似)度计算总结 一、聚类的基本数据结构 假...

  • SPSS-聚类分析

    根据聚类对象的不同可分为以下两种: 样本聚类,又称Q型聚类 变量聚类,又称R型聚类 SPSS的Classify子菜...

  • 三种聚类方法:层次、K均值、密度

    一、层次聚类 1)距离和相似系数 r语言中使用dist(x, method = "euclidean",diag ...

  • R语言中的向量和标量

    R语言中最基本的数据类型是向量,与C语言家族不同,R语言中,单个数据(标量)没有单独的数据类型,它只是向量的一种特...

  • R语言中的划分聚类模型

    原文链接:http://tecdat.cn/?p=6443 划分聚类是用于基于数据集的相似性将数据集分类为多个组的...

  • iOS - Runtime 的常用方法

    基本参数类型 SEL:类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地址,但SEL只是方法...

  • R语言中实现层次聚类模型

    原文链接:http://tecdat.cn/?p=5305 大家好!在这篇文章中,我将向你展示如何在R中进行层次聚...

  • go入门(五) 2018-07-19

    方法和接口 方法 Go语言中没有类,但是可以在结构类型上定义方法,实际上可以对包中的任意类型定义任意方法,但是不能...

  • R programming - WEEK4

    参考文献 R语言实例-数据过滤grep正则表达式R 语言中,数据框依据不同列进行排序R语言rank函数详细解析R语...

网友评论

    本文标题:R语言中不同类型的聚类方法比较

    本文链接:https://www.haomeiwen.com/subject/nowiphtx.html