| 948 | } |
| 949 | |
| 950 | void SaveModel(Json* p_out) const override { |
| 951 | CHECK(!this->need_configuration_) << "Call Configure before saving model."; |
| 952 | this->CheckModelInitialized(); |
| 953 | |
| 954 | Version::Save(p_out); |
| 955 | Json& out{*p_out}; |
| 956 | |
| 957 | out["learner"] = Object(); |
| 958 | auto& learner = out["learner"]; |
| 959 | |
| 960 | learner["learner_model_param"] = mparam_.ToJson(); |
| 961 | learner["gradient_booster"] = Object(); |
| 962 | auto& gradient_booster = learner["gradient_booster"]; |
| 963 | gbm_->SaveModel(&gradient_booster); |
| 964 | |
| 965 | learner["objective"] = Object(); |
| 966 | auto& objective_fn = learner["objective"]; |
| 967 | obj_->SaveConfig(&objective_fn); |
| 968 | |
| 969 | learner["attributes"] = Object(); |
| 970 | for (auto const& kv : attributes_) { |
| 971 | learner["attributes"][kv.first] = String(kv.second); |
| 972 | } |
| 973 | |
| 974 | learner["feature_names"] = Array(); |
| 975 | auto& feature_names = get<Array>(learner["feature_names"]); |
| 976 | for (auto const& name : feature_names_) { |
| 977 | feature_names.emplace_back(name); |
| 978 | } |
| 979 | learner["feature_types"] = Array(); |
| 980 | auto& feature_types = get<Array>(learner["feature_types"]); |
| 981 | for (auto const& type : feature_types_) { |
| 982 | feature_types.emplace_back(type); |
| 983 | } |
| 984 | } |
| 985 | |
| 986 | void Save(dmlc::Stream* fo) const override { |
| 987 | this->CheckModelInitialized(); |
no test coverage detected