We provide an R interface to the high-performance implementation of banditpam, a \(k\)-medoids clustering algorithm.
If you use this software, please cite:
Mo Tiwari, Martin Jinye Zhang, James Mayclin, Sebastian Thrun, Chris Piech, Ilan Shomorony. “banditpam: Almost Linear Time k-medoids Clustering via Multi-Armed Bandits” Advances in Neural Information Processing Systems (NeurIPS) 2020.
Here’s a BibTeX entry:
@inproceedings{banditpam,
title={banditpam: Almost Linear Time k-medoids Clustering via Multi-Armed Bandits},
author={Tiwari, Mo and Zhang, Martin J and Mayclin, James and Thrun, Sebastian and Piech, Chris and Shomorony, Ilan},
booktitle={Advances in Neural Information Processing Systems},
pages={368--374},
year={2020}
}
banditpam
can be installed from CRAN like any other
package.
This is a basic example which shows you how to solve a common problem:
library(banditpam)
## Generate data from a Gaussian Mixture Model with the given means:
set.seed(10)
<- 40
n_per_cluster <- list(c(0, 0), c(-5, 5), c(5, 5))
means <- do.call(rbind, lapply(means, MASS::mvrnorm, n = n_per_cluster, Sigma = diag(2)))
X ## Create KMediods object
<- KMedoids$new(k = 3)
obj ## Fit data
$fit(data = X, loss = "l2")
obj## Retrieve medoid indices
<- obj$get_medoids_final()
meds ## Plot the results
plot(X[, 1], X[, 2])
points(X[meds, 1], X[meds, 2], col = "red", pch = 19)
##
## One can query some statistics too; see help("KMedoids")
##
$get_statistic("dist_computations")
obj$get_statistic("dist_computations_and_misc")
obj$get_statistic("cache_misses") obj