当前位置: 首页 > news >正文

R语言确定聚类的最佳簇数:3种聚类优化方法

确定数据集中最佳的簇数是分区聚类(例如k均值聚类)中的一个基本问题,它要求用户指定要生成的簇数k。

 最近我们被客户要求撰写关于聚类的研究报告,包括一些图形和统计输出。
一个简单且流行的解决方案包括检查使用分层聚类生成的树状图,以查看其是否暗示特定数量的聚类。不幸的是,这种方法也是主观的。

 

  【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福质量系数可视化实例

KMEANS均值聚类和层次聚类:R语言分析生活幸福质量系数可视化实例

,时长06:05

 我们将介绍用于确定k均值,k medoids(PAM)和层次聚类的最佳聚类数的不同方法。

这些方法包括直接方法和统计测试方法:

  1. 直接方法:包括优化准则,例如簇内平方和或平均轮廓之和。相应的方法分别称为弯头方法和轮廓方法。
  2. 统计检验方法:包括将证据与无效假设进行比较。 

除了肘部轮廓间隙统计方法外,还有三十多种其他指标和方法已经发布,用于识别最佳簇数。我们将提供用于计算所有这30个索引的R代码,以便使用“多数规则”确定最佳聚类数。

对于以下每种方法:

  • 我们将描述基本思想和算法
  • 我们将提供易于使用的R代码,并提供许多示例,用于确定最佳簇数并可视化输出。

肘法

回想一下,诸如k-均值聚类之类的分区方法背后的基本思想是定义聚类,以使总集群内变化[或总集群内平方和(WSS)]最小化。总的WSS衡量了群集的紧凑性,我们希望它尽可能小。

Elbow方法将总WSS视为群集数量的函数:应该选择多个群集,以便添加另一个群集不会改善总WSS。

最佳群集数可以定义如下:

  1. 针对k的不同值计算聚类算法(例如,k均值聚类)。例如,通过将k从1个群集更改为10个群集。
  2. 对于每个k,计算群集内的总平方和(wss)。
  3. 根据聚类数k绘制wss曲线。
  4. 曲线中拐点(膝盖)的位置通常被视为适当簇数的指标。

平均轮廓法

平均轮廓法计算不同k值的观测值的平均轮廓。聚类的最佳数目k是在k的可能值范围内最大化平均轮廓的数目(Kaufman和Rousseeuw 1990)。

差距统计法

 该方法可以应用于任何聚类方法。

间隙统计量将k的不同值在集群内部变化中的总和与数据空引用分布下的期望值进行比较。最佳聚类的估计将是使差距统计最大化的值(即,产生最大差距统计的值)。 

资料准备

我们将使用USArrests数据作为演示数据集。我们首先将数据标准化以使变量具有可比性。


head(df)
##            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
## Arkansas   0.2323   0.231   -1.074 -0.18492
## California 0.2783   1.263    1.759  2.06782
## Colorado   0.0257   0.399    0.861  1.86497
 

  Silhouhette和Gap统计方法

简化格式如下: 

下面的R代码确定k均值聚类的最佳聚类数:

# Elbow method
fviz_nbclust(df, kmeans, method = "wss") +
    geom_vline(xintercept = 4, linetype = 2)+
  labs(subtitle = "Elbow method")

# Silhouette method

# Gap statistic

## Clustering k = 1,2,..., K.max (= 10): .. done
## Bootstrapping, b = 1,2,..., B (= 50)  [one "." per sample]:
## .................................................. 50

 

根据这些观察,有可能将k = 4定义为数据中的最佳簇数。

30个索引,用于选择最佳数目的群集

数据:矩阵

  • diss:要使用的相异矩阵。默认情况下,diss = NULL,但是如果将其替换为差异矩阵,则距离应为“ NULL”
  • distance:用于计算差异矩阵的距离度量。可能的值包括“ euclidean”,“ manhattan”或“ NULL”。
  • min.nc,max.nc:分别为最小和最大簇数
  • 要为kmeans 计算NbClust(),请使用method =“ kmeans”。
  • 要计算用于层次聚类的NbClust(),方法应为c(“ ward.D”,“ ward.D2”,“ single”,“ complete”,“ average”)之一。

下面的R代码为k均值计算

## Among all indices: 
## ===================
## * 2 proposed  0 as the best number of clusters
## * 10 proposed  2 as the best number of clusters
## * 2 proposed  3 as the best number of clusters
## * 8 proposed  4 as the best number of clusters
## * 1 proposed  5 as the best number of clusters
## * 1 proposed  8 as the best number of clusters
## * 2 proposed  10 as the best number of clusters
## 
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is  2 .

根据多数规则,最佳群集数为2。


最受欢迎的见解

相关文章:

  • b站视频推广他人视频/网站的建设流程
  • 做电影网站怎么盈利/网络推广工作好吗
  • 门户网站分类/如何做好营销
  • 康保县城乡建设委员会网站/网站模板购买
  • 石家庄网站建设公司哪家好/免费推广论坛
  • wordpress 后台忘了/怎么样在百度上推广自己的产品
  • 威伦触摸屏TK6060IP简单例子
  • 力扣(LeetCode)134. 加油站(C++)
  • 【Python】《Python编程:从入门到实践 (第2版) 》笔记-Chapter1-起步
  • JAVA毕业设计课堂考勤系统计算机源码+lw文档+系统+调试部署+数据库
  • 用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (6)-在线调试
  • 基于java+ssm+vue+mysql的旅游管理系统
  • 在 MySQL 中优化分页的 3 种方法
  • [阶段4 企业开发进阶] 3. 消息队列--RabbitMQ
  • Zygote在Framework中起什么作用?
  • 07 信息不等式
  • php后端+JQuery+Ajax简单表单提交
  • Python 高级函数map、reduce、filter与sorted