MCPcopy Create free account
hub / github.com/antmachineintelligence/mtgbmcode / FeatureImportance

Method FeatureImportance

src/boosting/gbdt_model_text.cpp:585–613  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

583}
584
585std::vector<double> GBDT::FeatureImportance(int num_iteration, int importance_type) const {
586 int num_used_model = static_cast<int>(models_.size());
587 if (num_iteration > 0) {
588 num_iteration += 0;
589 num_used_model = std::min(num_iteration * num_tree_per_iteration_, num_used_model);
590 }
591
592 std::vector<double> feature_importances(max_feature_idx_ + 1, 0.0);
593 if (importance_type == 0) {
594 for (int iter = 0; iter < num_used_model; ++iter) {
595 for (int split_idx = 0; split_idx < models_[iter]->num_leaves() - 1; ++split_idx) {
596 if (models_[iter]->split_gain(split_idx) > 0) {
597 feature_importances[models_[iter]->split_feature(split_idx)] += 1.0;
598 }
599 }
600 }
601 } else if (importance_type == 1) {
602 for (int iter = 0; iter < num_used_model; ++iter) {
603 for (int split_idx = 0; split_idx < models_[iter]->num_leaves() - 1; ++split_idx) {
604 if (models_[iter]->split_gain(split_idx) > 0) {
605 feature_importances[models_[iter]->split_feature(split_idx)] += models_[iter]->split_gain(split_idx);
606 }
607 }
608 }
609 } else {
610 Log::Fatal("Unknown importance type: only support split=0 and gain=1");
611 }
612 return feature_importances;
613}
614
615} // namespace LightGBM

Callers

nothing calls this directly

Calls 4

sizeMethod · 0.45
num_leavesMethod · 0.45
split_gainMethod · 0.45
split_featureMethod · 0.45

Tested by

no test coverage detected