45 std::default_random_engine
rng_;
76 void set(std::vector<cmp::PolynomialExpansion> *polynomials,
const double &gamma = 0,
const double &seed = 42) {
85 void condition(
const Eigen::Ref<const Eigen::MatrixXd> &xObs,
const Eigen::Ref<const Eigen::VectorXd> &yObs,
const Eigen::Ref<const Eigen::VectorXs> &labels) {
93 throw std::runtime_error(
"The number of unique labels in the labels vector does not match the number of clusters.");
96 throw std::runtime_error(
"The number of observations in xObs, yObs and labels must be the same.");
101 std::cout <<
"Remapping labels to be in the range [0, " <<
nClusters_ - 1 <<
"]" << std::endl;
136 #pragma omp parallel for
321 std::vector<std::pair<size_t, size_t>>
switches;
326 std::vector<double> weights;
332 std::discrete_distribution<size_t>
dist(weights.begin(), weights.end());
355 std::vector<std::pair<double, std::pair<size_t, size_t>>>
allSwitches;
397 std::sort(
allSwitches.begin(),
allSwitches.end(), [](std::pair<
double, std::pair<size_t, size_t>>
a, std::pair<
double, std::pair<size_t, size_t>>
b) {
398 return a.first > b.first;
427 std::pair<size_t, double>
chosenCluster = std::make_pair(-1, std::numeric_limits<double>::infinity());
519 if(
sum < 1
e-12 || std::isnan(
sum) || std::isinf(
sum)) {
577 std::vector<std::pair<size_t, size_t>>
switches;
Manages a clustered set of Polynomial Chaos Expansion (PCE) models for localized regression.
Definition model_cluster_poly.h:42
double computeScore(size_t globalIndex) const
Definition model_cluster_poly.h:278
std::vector< cmp::PolynomialExpansion > * polynomials_
Polynomial expansions representing local models.
Definition model_cluster_poly.h:63
double gamma_
Regularization blending parameter gamma.
Definition model_cluster_poly.h:69
void set(std::vector< cmp::PolynomialExpansion > *polynomials, const double &gamma=0, const double &seed=42)
Definition model_cluster_poly.h:76
~ModelClusterPoly()=default
size_t getMembership(size_t i) const
Definition model_cluster_poly.h:157
std::vector< std::pair< size_t, size_t > > deterministicSwitchStep(cmp::classifier::Classifier *cls, const size_t &maxAllowedSwitches, const double &minProb)
Definition model_cluster_poly.h:353
const Eigen::VectorXd & centroid(size_t i) const
Definition model_cluster_poly.h:173
double computeScore(size_t model, size_t globalIndex) const
Definition model_cluster_poly.h:287
size_t nObs_
Number of training observations.
Definition model_cluster_poly.h:51
const Eigen::VectorXs & getLabels() const
Definition model_cluster_poly.h:161
size_t dimX_
Dimension of input features.
Definition model_cluster_poly.h:52
void performSwitches(const std::vector< std::pair< size_t, size_t > > &newOwners)
Definition model_cluster_poly.h:238
std::vector< size_t > clusterSize_
Number of points assigned to each cluster.
Definition model_cluster_poly.h:66
void fit()
Definition model_cluster_poly.h:135
size_t nClusters() const
Definition model_cluster_poly.h:131
std::vector< std::pair< size_t, size_t > > switchStep(cmp::classifier::Classifier *classifier, const double &T=1.0, const size_t &maxAllowedSwitches=10, const double &minProb=0.1)
Definition model_cluster_poly.h:293
Eigen::VectorXs localIndexTable_
Local coordinate lookup index mapping.
Definition model_cluster_poly.h:58
size_t nClusters_
Number of active clusters.
Definition model_cluster_poly.h:50
Eigen::MatrixXd xObs_
Training input matrix of observations.
Definition model_cluster_poly.h:47
void condition(const Eigen::Ref< const Eigen::MatrixXd > &xObs, const Eigen::Ref< const Eigen::VectorXd > &yObs, const Eigen::Ref< const Eigen::VectorXs > &labels)
Definition model_cluster_poly.h:85
size_t nPoints() const
Definition model_cluster_poly.h:149
std::default_random_engine rng_
Pseudo-random number generator.
Definition model_cluster_poly.h:45
Eigen::VectorXd yObs_
Training target response vector.
Definition model_cluster_poly.h:48
void setFit(const size_t &clusterIndex, const bool &fit)
Definition model_cluster_poly.h:271
void purgeStep(const size_t &clusterIndex)
Definition model_cluster_poly.h:416
std::vector< bool > fit_
Cluster fit/convergence status flag vector.
Definition model_cluster_poly.h:61
std::vector< Eigen::VectorXd > centroids_
Coordinates for each cluster's centroid.
Definition model_cluster_poly.h:62
size_t dim() const
Definition model_cluster_poly.h:153
cmp::PolynomialExpansion & operator[](size_t i)
Definition model_cluster_poly.h:169
void mergeClusters(const size_t &clusterIndex1, const size_t &clusterIndex2, bool hparGuess=false)
Definition model_cluster_poly.h:568
void updateModel(const std::vector< bool > &affectedClusters)
Definition model_cluster_poly.h:189
std::vector< std::vector< double > > computeProbabilities(const double &T, cmp::classifier::Classifier *classifier, const double &minProb=0.1) const
Definition model_cluster_poly.h:470
size_t getClusterSize(size_t i) const
Definition model_cluster_poly.h:165
Eigen::VectorXs labels_
Cluster assignments label vector.
Definition model_cluster_poly.h:55
bool isFit(const size_t &clusterIndex) const
Definition model_cluster_poly.h:267
Eigen::VectorXs getIndices(size_t clusterIndex) const
Definition model_cluster_poly.h:177
Eigen::MatrixXd confusionMatrix(std::vector< std::vector< double > > switchingProbability) const
Definition model_cluster_poly.h:535
ModelClusterPoly()=default
Implements multi-dimensional Polynomial Chaos Expansion (PCE) for spectral surrogate modeling.
Definition poly.h:301
Abstract base class for all classifiers.
Definition classifier.h:41
virtual std::vector< double > predictProbabilities(const Eigen::Ref< const Eigen::VectorXd > &x) const =0
Matrix< size_t, Eigen::Dynamic, 1 > VectorXs
Definition cmp_defines.h:20
Definition classifier.h:17