我正在尝试编写自己的k-均值聚类函数以应用于(n x p矩阵)的矩阵。该函数应该能够接受四个输入:
预期的输出:一个长度为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] 删除。
我来说两句