kmeanspp.R
##
## k m e a n s p p . R K-means++ Clustering
##
kmeanspp <- function(X, k) {
stopifnot(is.numeric(X), is.numeric(k))
if (is.vector(X)) X <- as.matrix(X)
n <- nrow(X); m <- ncol(X)
if (floor(k) != ceiling(k) || k < 1 || k > nrow(X))
stop("Argument 'k' must be a natural number between 1 and nrow(X)")
C <- numeric(k)
C[1] <- sample(1:n, 1)
for (i in 2:k) {
dm <- distmat(X, X[C, ])
pr <- apply(dm, 1, min); pr[C] <- 0
C[i] <- sample(1:n, 1, prob = pr)
}
kmeans(X, X[C, ])
}