【发布时间】:2015-01-03 19:42:50
【问题描述】:
我正在实施一些聚类分析算法,尤其是聚类验证。交叉验证、外部索引、内部索引、相对索引等方法很少。我正在尝试实现一个内部索引下的算法。
内部索引 - 基于数据的内在内容。它用于在不考虑外部信息的情况下衡量聚类结构的好坏。 我的兴趣是Silhouette Coefficient
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)
我们看到有两个集群,截止标记在 68 左右。这里没有标签数据,因此没有基础事实来进行交叉验证(无监督)。所以我们需要一种机制来评估集群。在这种情况下,我们从可视化中知道有两个集群,但是我们如何清楚地表明两个分布实际上属于集群。根据我在维基百科上红色的内容,Silhouette 为我们提供了验证。
我想实现一个方法(它实现了 Silhouette),以便在我的示例中它的等待值的 ar 列表,在这种情况下为 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
问题是我认为现有的库不接受这种类型的数据结构。
【问题讨论】:
-
是的,尝试按照示例进行操作,但没有成功
-
好吧,显示您尝试的代码并准确描述它是如何失败的会更容易。
-
@MrFlick 我有数字列表,但 api 需要一个 data.frame
-
所以你不知道如何将列表变成data.frame?那是你的问题吗?你的意思是“列表”还是“向量”(它们在 R 中是不同的)?再次,准确显示您尝试过的代码。
标签: r algorithm machine-learning cluster-analysis