use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use super::kmeans::{KMeansInit, KMeansResult};
#[derive(Debug, Clone)]
pub struct MiniBatchKMeansOptions<R: Runtime<DType = DType>> {
pub n_clusters: usize,
pub batch_size: usize,
pub max_iter: usize,
pub tol: f64,
pub init: KMeansInit<R>,
pub max_no_improvement: usize,
}
impl<R: Runtime<DType = DType>> Default for MiniBatchKMeansOptions<R> {
fn default() -> Self {
Self {
n_clusters: 8,
batch_size: 1024,
max_iter: 100,
tol: 0.0,
init: KMeansInit::KMeansPlusPlus,
max_no_improvement: 10,
}
}
}
pub trait MiniBatchKMeansAlgorithms<R: Runtime<DType = DType>> {
fn mini_batch_kmeans(
&self,
data: &Tensor<R>,
options: &MiniBatchKMeansOptions<R>,
) -> Result<KMeansResult<R>>;
}