R实现聚类分析

标签 r algorithm machine-learning cluster-analysis

我正在实现一些聚类分析算法,尤其是聚类验证算法。有交叉验证、外部索引、内部索引、相对索引等几种方式。我正在尝试实现内部索引下的算法。

内部索引 - 基于数据的内在内容。它用于在不考虑外部信息的情况下衡量聚类结构的优劣。 我的兴趣是Silhouette系数

s(i) = b(i) - a(i) / max{a(i), b(i)}

为了更清楚,我们假设我有以下多模型分布:

  library(mixtools)
  wait = faithful$waiting
  mixmdl = normalmixEM(wait)
  plot(mixmdl,which=2)
  lines(density(wait), lty=2, lwd=2)

enter image description here

我们看到有两个集群,截止标记在 68 左右。这里没有标签数据,所以没有基本事实来进行交叉验证(无监督)。所以我们需要一种机制来评估集群。在这种情况下,我们从可视化中知道有两个集群,但我们如何清楚地表明两个分布实际上属于集群。基于我在维基百科上的红色剪影给了我们验证。

我想实现一个方法(它实现了 Silhouette),在我的例子中它需要一个 r 值列表,它的等待,在这种情况下的集群数量 2,以及模型,它是模型并返回平均值 s(i) .

我已经开始了,但真的不知道如何前进

Silhouette = function(rList, num_clusters, model) {

}

我的列表摘要如下所示:

               Length Class  Mode   
clust_A         416014 -none- numeric
clust_B         72737 -none- numeric
clust_C          6078 -none- numeric

myList$clust_A 将返回属于该集群的点

    [1]   13  880  497 1864  392   55 1130  248  437   37   62  153   60  117
   [15]   22  106   71 1026  446 1558   23   56  287  402   46 1506  115 2700
   [29]   67  134   48  536   41  506 1098   33   30  280  225   16   25   17
   [43]   63 1762  477  174   98   76  157  698   47  312   40    3  198  621
   [57]   15   34  226  657   48  110   23  250   14   32  137  272   26  257
   [71]  270  133 1734   78  134    8    5  225  187  166   35   15   94 2825
   [85]    2    8   94   89   54   91   77   17  106 1397   16   25   16  103

问题是我认为现有的库不接受这种类型的数据结构。

最佳答案

Silhouette 假定所有聚类具有相同的方差。

恕我直言,将此度量与 EM 聚类一起使用没有意义。

关于R实现聚类分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794071/

相关文章:

algorithm - 从二进制数中提取奇数位的最佳方法

machine-learning - 检查输入 : expected conv2d_1_input to have 4 dimensions, 但获得形状为 (800, 1000) 的数组时出错

r - 如何在bagging中创建模型对象?

java - 快速复制 HashMap

r - 在 R 中使用 dplyr、tidyr、reshape2 进行复杂熔化

java - 将排序链表转换为平衡 BST

java - 我怎么知道我的神经网络正在被正确训练

machine-learning - 新闻文章多类分类算法

r - R 和 C 堆栈使用中允许的内存

python - 数据框中的匹配列基于其他数据框中的列中的值