簡體   English   中英

K 表示 R 中的聚類函數

[英]K means clustering function in R

我正在嘗試編寫我自己的 k 均值聚類函數,以應用於 (n x p 矩陣) 的矩陣。 該函數應該能夠接受四個輸入:

  1. 數據點:包含所有數據點的 n × p 矩陣,
  2. ncluster:K,集群的數量,
  3. initialClusters:一個長度為 n 的向量(即 n 是區域的數量。Zonal 可以被認為是某種加權平均值)。 其元素 i 對應於最初分配給觀察 i 的集群。
  4. maxiter:停止算法前的最大迭代次數。

預期輸出:長度為 2 的列表,其第一個元素是包含通過應用 K 均值算法獲得的最終聚類質心的 K × p 矩陣,其第二個元素是長度為 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM