K означает функцию кластеризации в R - PullRequest
2 голосов
/ 24 марта 2020

Я пытаюсь написать свою собственную функцию кластеризации k-средних для применения к матрице (матрица n на p). Функция должна иметь возможность принимать четыре входа:

  1. Точки данных: матрица n by p, содержащая все точки данных,
  2. ncluster: K, количество кластеров,
  3. initialClusters: вектор длины n (т. Е. N - количество зон. Зону можно рассматривать как некоторое средневзвешенное значение). элемент i которого соответствует кластеру, изначально назначенному наблюдению i.
  4. maxiter: максимальное количество итераций до остановки алгоритма.

Ожидаемый результат: список длиной 2, первый элемент которого представляет собой матрицу K by 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) 
}

Спасибо.

1 Ответ

1 голос
/ 24 марта 2020

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...