K表示R中的聚类功能

米卡·昂迪瓦(Micah Ondiwa)

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

  1. 数据点:包含所有数据点的n×p矩阵,
  2. ncluster:K,簇数,
  3. initialClusters:长度为n的向量(即n是区域数。区域可以看作是一些加权平均值)。其元素i对应于最初分配给观测i的聚类。
  4. maxiter:停止算法之前的最大迭代次数。

预期的输出:一个长度为2的列表,其第一个元素为K×p矩阵,其中包含通过应用K Mean算法获得的最终聚类质心,并且其第二个元素为长度为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) 
}

谢谢。

笨狼

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章