| 583 | } |
| 584 | |
| 585 | std::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 |
nothing calls this directly
no test coverage detected