【问题标题】:How do I find the parameters used in kmeans to create clusters?如何找到 kmeans 中用于创建集群的参数?
【发布时间】:2011-07-14 22:47:22
【问题描述】:

从 R-list 上的先前question 中,我看到了两种检查加载的包的方法:

ls("package:ts") 
lsf.str("package:ts")

就我而言,我想检查kmeans 的输出是什么,这是stats 包中的一个函数,所以我使用了:

lsf.str("package:stats")

但是,我不知道如何检查此命令返回的内容。我想识别以前聚类中使用的参数,以便可以将它们应用于另一个数据集。在哪里可以找到作为该函数的一部分存储的参数?

【问题讨论】:

  • 如果你想知道一个函数做什么以及它返回什么,看看它的帮助页面?kmeans。如果您想查看源代码,只需在提示符处运行kmeans(不带括号) - 这将显示代码的版本(无 cmets 等)。如果要检查kmeans() 返回的对象,请运行示例:example(kmeans),然后执行str(cl)names(cl)。但从它的声音来看,我认为这不会有任何帮助 - 你似乎建议你想预测新数据集将落入哪些集群,而你不能使用 kmeans() 来做到这一点是你想要的吗?做什么?
  • 啊,我明白了;谢谢你的解释。用 cmets 怎么看源码?
  • 如果有的话,那么它将在 R 源代码压缩包或 svn 存储库中 svn.r-project.org/R 例如:svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R 但在这种情况下,没有任何注释可以解释什么代码确实...

标签: r statistics cluster-analysis


【解决方案1】:

如果您输入kmeans,您将获得该方法的源代码,可在http://pastebin.com/6VnnhU7J 的pastebin 中找到。我不确定您对参数的含义是什么,因为这些参数作为参数传入(x,centers,iter.max = 10,nstart = 1,algorithm = c(“Hartigan-Wong”,“Lloyd”,“Forgy” , "MacQueen") 并且您可以轻松访问它们(您最初用什么来称呼 kmeans?)

【讨论】:

  • 我原来叫kmeans如下:fit <- kmeans(mydata, 3)。我希望我可以将相同的标准应用于另一个数据集以产生更多的集群(例如,如果这是一个树排序算法,我可以说所有
  • 我猜您可以采用拟合的centers 分量,计算新数据点与已识别聚类中心之间的欧几里得距离,并将每个数据点分配给最近的聚类中心?但请注意,如果您首先将所有数据(旧的和新的)聚集在一起,这不一定是相同的结果。
  • 也许我正带着这条评论进入新问题领域,但这是一个好方法吗?一般来说,我对集群很陌生,不确定最好的方法是什么。
  • @celenius 这是一种实用的方法,至少在一个 CRAN 包 (cclust) 中采用了这种方法 - 因此您可以使用 @987654327 运行 k-means @ 函数并使用其predict() 方法,因此避免手动执行此操作。这有多大用处以及是否有更好的方法取决于你想做什么,这里不是讨论的地方。试试stats.stackexchange.com你似乎想要同时进行聚类分类。
  • @celenius,如果您想评论不是答案的原始发布者的评论,请确保您以 @foo 开始评论,其中 foo 是用户名字,例如要回复我,请从@Gavin 开始。这样,写评论的人会在收件箱中收到一条便条 --- 如果我没有再次浏览答案,我会错过你的评论。
【解决方案2】:

kmeans 帮助页面的 Value 部分列出了该函数返回的对象的格式:

“kmeans”类的一个对象,它有一个“print”方法并且是一个 组件列表:

cluster:整数向量(来自 ‘1:k’) 指示集群 每个点是分配的。

centers:聚类中心矩阵。

withinss:集群内的总和 每个集群的正方形。

totss:集群内总和 正方形。

tot.withinss:集群内总和 的正方形,即 “总和(withinss)”。

betweenss:集群间的总和 正方形。

size:每个簇中的点数。

通常,您还可以使用 names 函数直接从您的 kmeans 对象中列出这些值:

R> names(km)
[1] "cluster"      "centers"      "totss"        "withinss"    
[5] "tot.withinss" "betweenss"    "size"      

从帮助页面中对值的描述中,我会说用于聚类的参数没有存储在结果对象中。因此,如果您只能访问生成的 kmeans 对象而不能访问原始函数调用,我会说这些参数丢失了,很遗憾...

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 2019-11-27
    • 2017-06-01
    • 2011-01-20
    • 2016-11-09
    • 2019-04-04
    • 2014-04-18
    • 2017-05-25
    • 2019-09-02
    相关资源
    最近更新 更多