Label posterior(const Eigen::DenseBase<Derived>& observations, bool normalize = true) const { assert(observations.cols() == num_features()); Label result = prior_; for (std::size_t i = 0; i < num_features(); ++i) { result *= feature(i).restrict_head(observations.col(i)); if (normalize) { result.normalize(); } } return result; }
// The number of training examples should always be a positive integer. int DataNormalized::FeatureNormalize() { const int kNumFeatures = num_features(); assert(kNumFeatures >= 1); const int kNumTrainEx = num_train_ex(); assert(kNumTrainEx >= 1); // Does not include dummy feature when normalizing. const arma::mat kTrainingFeaturesNoDummy = \ training_features().cols(1,kNumFeatures); const arma::vec mu_vec = \ arma::mean(kTrainingFeaturesNoDummy.cols(0,kNumFeatures-1)).t(); set_mu_vec(mu_vec); const arma::vec sigma_vec = \ arma::stddev(kTrainingFeaturesNoDummy.cols(0,kNumFeatures-1)).t(); set_sigma_vec(sigma_vec); arma::mat kTrainingFeaturesNoDummyNormalized = \ arma::zeros<arma::mat>(kNumTrainEx,kNumFeatures); for(int row_index=0; row_index<kNumTrainEx;row_index++) { kTrainingFeaturesNoDummyNormalized.row(row_index) = \ (kTrainingFeaturesNoDummy.row(row_index)-mu_vec.t())/sigma_vec.t(); } // Appends dummy feature to normalized data, since normalized data will be // used for linear regression. const arma::mat kTrainingFeaturesNormalized = \ arma::join_horiz(arma::ones<arma::vec>(kNumTrainEx),\ kTrainingFeaturesNoDummyNormalized); set_training_features_normalized(kTrainingFeaturesNormalized); return 0; }
// The number of training features should always be a positive integer. // The number of training examples should always be a positive integer. int DataUnlabeledNormalized::FeatureNormalize() { const int kNumFeatures = num_features(); assert(kNumFeatures >= 1); const int kNumTrainEx = num_train_ex(); assert(kNumTrainEx >= 1); const arma::vec mu_vec = \ arma::mean(training_features().cols(0,kNumFeatures-1)).t(); set_mu_vec(mu_vec); const arma::vec sigma_vec = \ arma::stddev(training_features().cols(0,kNumFeatures-1)).t(); set_sigma_vec(sigma_vec); arma::mat kTrainingFeaturesNormalized = \ arma::zeros<arma::mat>(kNumTrainEx,kNumFeatures); for(int row_index=0; row_index<kNumTrainEx;row_index++) { kTrainingFeaturesNormalized.row(row_index) = \ (training_features().row(row_index)-mu_vec.t())/sigma_vec.t(); } set_training_features_normalized(kTrainingFeaturesNormalized); return 0; }