1#ifndef KMEANS_INITIALIZE_RANDOM_HPP
2#define KMEANS_INITIALIZE_RANDOM_HPP
8#include "sanisizer/sanisizer.hpp"
9#include "aarand/aarand.hpp"
12#include "copy_into_array.hpp"
34 typename InitializeRandomRng::result_type
seed = sanisizer::cap<InitializeRandomRng::result_type>(6523);
48template<
typename Index_,
typename Data_,
typename Cluster_,
typename Float_,
class Matrix_ = Matrix<Index_, Data_> >
77 Cluster_
run(
const Matrix_& data,
const Cluster_ ncenters, Float_*
const centers)
const {
79 const auto nobs = data.num_observations();
80 const decltype(I(nobs)) nchosen = sanisizer::min(nobs, ncenters);
81 auto chosen = sanisizer::create<std::vector<Index_> >(nchosen);
82 aarand::sample(nobs, nchosen, chosen.begin(), eng);
83 internal::copy_into_array(data, chosen, centers);
Interface for k-means initialization.
Initialize by sampling random observations without replacement.
Definition InitializeRandom.hpp:49
InitializeRandom()=default
InitializeRandom(InitializeRandomOptions options)
Definition InitializeRandom.hpp:57
InitializeRandomOptions & get_options()
Definition InitializeRandom.hpp:69
Interface for k-means initialization algorithms.
Definition Initialize.hpp:29
virtual Cluster_ run(const Matrix_ &data, Cluster_ num_centers, Float_ *centers) const =0
Perform k-means clustering.
Definition compute_wcss.hpp:16
std::mt19937_64 InitializeRandomRng
Definition InitializeRandom.hpp:25
Options for InitializeRandom.
Definition InitializeRandom.hpp:30
InitializeRandomRng::result_type seed
Definition InitializeRandom.hpp:34