【问题标题】:K means clustering function in RK 表示 R 中的聚类函数
【发布时间】:2020-07-04 19:38:48
【问题描述】:

我正在尝试编写自己的 k-means 聚类函数,以应用于(n x p 矩阵)的矩阵。该函数应该能够接受四个输入:

  1. 数据点:包含所有数据点的 n x p 矩阵,
  2. ncluster:K,簇数,
  3. initialClusters:长度为 n 的向量(即 n 是区域的数量。Zonal 可以被认为是某种加权平均值)。 其元素 i 对应于最初分配给观察 i 的集群。
  4. maxiter:算法停止前的最大迭代次数。

预期输出:一个长度为 2 的列表,其第一个元素是 K × p 矩阵 包含通过应用 K 获得的最终聚类质心 表示算法,其第二个元素是长度为 n 的向量 列出分配给每个观察的集群。

我已经尝试了以下代码但无法正常工作:

set.seed(345) 
KmeansClustering<-function(Datapoints, ncluster, initialClusters,maxiter) {  
   Datapoints<-LMPmatrix_t 
   ncluster<-2 
   initialClusters<-mean(LMPmatrix) 
   initialClusters 

   maxiter<-100 
   KmeansOut<-kmeans(Datapoints, ncluster, initialClusters,maxiter)  
   return(KmeansOut) 
}

谢谢。

【问题讨论】:

  • 我尝试了以下代码但没有工作: set.seed(345) KmeansClustering

标签: r


【解决方案1】:

kmeans 只能取簇或中心的数量,但不能同时取两者。在函数中,你不断地从环境中分配一些东西,这违背了函数的目的。试试这样的:

set.seed(345) 
KmeansClustering<-function(Datapoints,ncluster=NULL,initialClusters=NULL,maxiter) {  
   if(!is.null(ncluster) & !is.null(initialClusters)){
      stop("only provide ncluster or initialCluster, not both")
   }
   if(!is.null(ncluster)){
   KmeansOut<-kmeans(Datapoints, ncluster,maxiter) 
   }else{
   KmeansOut<-kmeans(Datapoints,initialClusters,maxiter)
   }
   return(KmeansOut) 
}

set.seed(100)
# use 3 observations as initial centers
ini_centers = iris[sample(nrow(iris),3),-5]

#works
KmeansClustering(iris[,-5],ncluster=3,maxiter=10)
#works
KmeansClustering(iris[,-5],initialClusters=ini_centers,maxiter=10)
#error
KmeansClustering(iris[,-5],ncluster=3,initialClusters=ini_centers,maxiter=10)

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2019-05-05
    • 2016-10-13
    • 1970-01-01
    • 2016-08-12
    • 2016-09-06
    相关资源
    最近更新 更多