double ClassificationTree::calc_entropy_gain(const TrainingSet &train_set, const TrainingSet &left_set, const TrainingSet &right_set, const RandomizedTreeParameter ¶m) const { double entropy_gain = 0; entropy_gain = train_set.compute_label_entropy() - left_set.size() / (float)train_set.size() * left_set.compute_label_entropy() - right_set.size() / (float)train_set.size() * right_set.compute_label_entropy(); return entropy_gain; }
void ClassificationTree::print_train_log(const TreeNode::PtrLeafNodeBase leaf, const TrainingSet &train_set) const { cv::Mat_<double> label_dist; train_set.compute_target_mean(label_dist); printf("leaf dist\n"); for (unsigned ii = 0; ii < label_dist.total(); ++ii) { printf("\tlabel%d:%f\n", ii, label_dist.at<double>(ii) / std::max<double>((double)train_set.size(), 1.0)); } }
bool ClassificationTree::is_end_growth(const TrainingSet &train_set, const cvpr::RandomizedTreeParameter ¶m, unsigned tree_height) const { if (param.max_height <= tree_height) { return true; } if (train_set.size() <= param.min_samples) { return true; } return false; }