22 using namespace Eigen;
57 "Expected %d initial cluster centers, got %d",
k, centers.
num_cols);
75 for (int32_t i=0; i<
k; i++)
77 const int32_t cluster_center_i=temp[i];
93 for (int32_t i=0; i<
k; i++)
98 bool first_round=
true;
100 for (int32_t j=0; j<
k; j++)
122 if ((dist<rmin2) && (dist>=rmin1))
149 REQUIRE(lhs,
"Lhs features of distance not provided");
154 REQUIRE(lhs_size>0,
"Lhs features should not be empty");
165 memset(mus.matrix, 0,
sizeof(
float64_t)*centers_size);
202 REQUIRE(p_k>0,
"number of clusters should be > 0");
213 REQUIRE(iter>0,
"number of clusters should be > 0");
281 centers(j, 0)=mu_first[j];
285 #pragma omp parallel for \ 286 default(none) shared(min_dist, mu, lhs_size) \ 287 schedule(static, CPU_CACHE_LINE_SIZE_BYTES) 288 for(int32_t i=0; i<lhs_size; i++)
299 for(int32_t i=1; i<
k; i++)
301 int32_t best_center=0;
306 for(int32_t trial=0; trial<n_rands; trial++)
311 int32_t new_center=0;
315 for(int32_t j=0; j<lhs_size; j++)
317 temp_sum+=min_dist[j];
318 if (prob <= temp_sum)
325 #pragma omp parallel for default(none) \ 326 private(temp_dist) shared(temp_min_dist, min_dist, lhs_size, new_center) \ 327 schedule(static, CPU_CACHE_LINE_SIZE_BYTES) 328 for(int32_t j=0; j<lhs_size; j++)
331 temp_min_dist[j]=
CMath::min(temp_dist, min_dist[j]);
335 temp_sum=linalg::vector_sum(temp_min_dist);
338 temp_sum=eigen_temp_sum.sum();
340 if ((temp_sum<best_sum) || (best_sum<0))
343 best_min_dist=temp_min_dist;
344 best_center=new_center;
350 centers(j, i)=vec[j];
352 min_dist=best_min_dist;
SGVector< float64_t > get_radiuses()
static void range_fill_vector(T *vec, int32_t len, T start=0)
static void permute(SGVector< T > v, CRandom *rand=NULL)
virtual void store_model_features()
Class Distance, a base class for all the distances used in the Shogun toolbox.
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.
ST * get_feature_vector(int32_t num, int32_t &len, bool &dofree)
void compute_cluster_variances()
void initialize_training(CFeatures *data=NULL)
void free_feature_vector(ST *feat_vec, int32_t num, bool dofree)
int32_t get_num_features() const
virtual float64_t distance(int32_t idx_a, int32_t idx_b)
virtual int32_t get_num_vectors() const
all of classes and functions are contained in the shogun namespace
static CDenseFeatures * obtain_from_generic(CFeatures *const base_features)
T sum(const Container< T > &a, bool no_diag=false)
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)
SGMatrix< float64_t > get_cluster_centers()
bool get_use_kmeanspp() const
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