## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup, echo = FALSE------------------------------------------------------
library(banditpam)
library(ggplot2)

## -----------------------------------------------------------------------------
set.seed(10)
n_per_cluster <- 40
means <- list(c(0, 0), c(-5, 5), c(5, 5))
X <- do.call(rbind, lapply(means, MASS::mvrnorm, n = n_per_cluster, Sigma = diag(2)))

## -----------------------------------------------------------------------------
obj <- KMedoids$new(k = 3)

## -----------------------------------------------------------------------------
set.seed(198)
obj$fit(data = X, loss = "l2")

## -----------------------------------------------------------------------------
med_indices <- obj$get_medoids_final()

## ----fig.cap="Clustering with 3-mediods with L2 loss"-------------------------
d <- as.data.frame(X); names(d) <- c("x", "y")
dd <- d[med_indices, ]
ggplot(data = d) +
  geom_point(aes(x, y)) +
  geom_point(aes(x, y), data = dd, color = "red")

## -----------------------------------------------------------------------------
head(obj$get_labels())
tail(obj$get_labels())

## -----------------------------------------------------------------------------
obj$fit(data = X, loss = "l1")  # L1 loss
med_indices <- obj$get_medoids_final()

## ----echo = FALSE, fig.cap="Clustering with 3-mediods with L1 loss"-----------
d <- as.data.frame(X); names(d) <- c("x", "y")
dd <- d[med_indices, ]
ggplot(data = d) +
  geom_point(aes(x, y)) +
  geom_point(aes(x, y), data = dd, color = "red")

## -----------------------------------------------------------------------------
obj$get_statistic("dist_computations") # no of dist computations
obj$get_statistic("cache_misses") #  no of cache misses