21 #ifdef HAVE_LINALG_LIB
26 using namespace Eigen;
61 "Expected %d initial cluster centers, got %d",
k, centers.
num_cols);
79 for (int32_t i=0; i<
k; i++)
81 const int32_t cluster_center_i=temp[i];
97 for (int32_t i=0; i<
k; i++)
102 bool first_round=
true;
104 for (int32_t j=0; j<
k; j++)
126 if ((dist<rmin2) && (dist>=rmin1))
153 REQUIRE(lhs,
"Lhs features of distance not provided");
158 REQUIRE(lhs_size>0,
"Lhs features should not be empty");
164 #ifdef HAVE_LINALG_LIB
167 SG_WARNING(
"LINALG library not available for KMeans++, resorting to random initialisation");
175 memset(mus.matrix, 0,
sizeof(
float64_t)*centers_size);
212 REQUIRE(p_k>0,
"number of clusters should be > 0");
223 REQUIRE(iter>0,
"number of clusters should be > 0");
291 centers(j, 0)=mu_first[j];
295 #pragma omp parallel for shared(min_dist)
296 for(int32_t i=0; i<lhs_size; i++)
307 for(int32_t i=1; i<
k; i++)
309 int32_t best_center=0;
314 for(int32_t trial=0; trial<n_rands; trial++)
319 int32_t new_center=0;
323 for(int32_t j=0; j<lhs_size; j++)
325 temp_sum+=min_dist[j];
326 if (prob <= temp_sum)
333 #pragma omp parallel for firstprivate(lhs_size) \
334 shared(temp_min_dist)
335 for(int32_t j=0; j<lhs_size; j++)
338 temp_min_dist[j]=
CMath::min(temp_dist, min_dist[j]);
345 temp_sum=eigen_temp_sum.sum();
347 if ((temp_sum<best_sum) || (best_sum<0))
350 best_min_dist=temp_min_dist;
351 best_center=new_center;
357 centers(j, i)=vec[j];
359 min_dist=best_min_dist;
SGVector< float64_t > get_radiuses()
static void permute(SGVector< T > v, CRandom *rand=NULL)
virtual void store_model_features()
ST * get_feature_vector(int32_t num, int32_t &len, bool &dofree)
Class Distance, a base class for all the distances used in the Shogun toolbox.
int32_t get_num_features() const
virtual void reset_precompute()
virtual bool save(FILE *dstfile)
void set_max_iter(int32_t iter)
SGMatrix< float64_t > mus
void set_random_centers()
A generic DistanceMachine interface.
void compute_cluster_variances()
void initialize_training(CFeatures *data=NULL)
virtual int32_t get_num_vectors() const
static void range_fill_vector(T *vec, int32_t len, T start=0)
virtual float64_t distance(int32_t idx_a, int32_t idx_b)
all of classes and functions are contained in the shogun namespace
void free_feature_vector(ST *feat_vec, int32_t num, bool dofree)
bool get_use_kmeanspp() const
virtual bool load(FILE *srcfile)
The class Features is the base class of all feature objects.
void set_distance(CDistance *d)
SGMatrix< float64_t > kmeanspp()
virtual EFeatureType get_feature_type()=0
virtual void precompute_lhs()
static float64_t log(float64_t v)
static CDenseFeatures * obtain_from_generic(CFeatures *const base_features)
SGMatrix< float64_t > get_cluster_centers()
Vector::Scalar vector_sum(Vector a)
virtual void precompute_rhs()
static float32_t sqrt(float32_t x)
virtual bool init(CFeatures *lhs, CFeatures *rhs)
void set_use_kmeanspp(bool kmpp)
virtual void set_initial_centers(SGMatrix< float64_t > centers)
void set_fixed_centers(bool fixed)
SGMatrix< float64_t > mus_initial