Implement slope for Pseduo-Huber. (#7727)
* Add objective and metric. * Some refactoring for CPU/GPU dispatching using linalg module.
This commit is contained in:
@@ -277,6 +277,21 @@ using LearnerAPIThreadLocalStore =
|
||||
using ThreadLocalPredictionCache =
|
||||
dmlc::ThreadLocalStore<std::map<Learner const *, PredictionContainer>>;
|
||||
|
||||
namespace {
|
||||
StringView ModelMsg() {
|
||||
return StringView{
|
||||
R"doc(
|
||||
If you are loading a serialized model (like pickle in Python, RDS in R) generated by
|
||||
older XGBoost, please export the model by calling `Booster.save_model` from that version
|
||||
first, then load it back in current version. See:
|
||||
|
||||
https://xgboost.readthedocs.io/en/latest/tutorials/saving_model.html
|
||||
|
||||
for more details about differences between saving model and serializing.
|
||||
)doc"};
|
||||
}
|
||||
} // anonymous namespace
|
||||
|
||||
class LearnerConfiguration : public Learner {
|
||||
private:
|
||||
std::mutex config_lock_;
|
||||
@@ -375,7 +390,6 @@ class LearnerConfiguration : public Learner {
|
||||
|
||||
this->ConfigureGBM(old_tparam, args);
|
||||
generic_parameters_.ConfigureGpuId(this->gbm_->UseGPU());
|
||||
|
||||
this->ConfigureMetrics(args);
|
||||
|
||||
this->need_configuration_ = false;
|
||||
@@ -418,9 +432,17 @@ class LearnerConfiguration : public Learner {
|
||||
metric_names_.resize(n_metrics);
|
||||
metrics_.resize(n_metrics);
|
||||
for (size_t i = 0; i < n_metrics; ++i) {
|
||||
metric_names_[i]= get<String>(j_metrics[i]);
|
||||
metrics_[i] = std::unique_ptr<Metric>(
|
||||
Metric::Create(metric_names_[i], &generic_parameters_));
|
||||
auto old_serialization = IsA<String>(j_metrics[i]);
|
||||
if (old_serialization) {
|
||||
LOG(WARNING) << ModelMsg();
|
||||
metric_names_[i] = get<String>(j_metrics[i]);
|
||||
} else {
|
||||
metric_names_[i] = get<String>(j_metrics[i]["name"]);
|
||||
}
|
||||
metrics_[i] = std::unique_ptr<Metric>(Metric::Create(metric_names_[i], &generic_parameters_));
|
||||
if (!old_serialization) {
|
||||
metrics_[i]->LoadConfig(j_metrics[i]);
|
||||
}
|
||||
}
|
||||
|
||||
FromJson(learner_parameters.at("generic_param"), &generic_parameters_);
|
||||
@@ -448,9 +470,9 @@ class LearnerConfiguration : public Learner {
|
||||
auto& objective_fn = learner_parameters["objective"];
|
||||
obj_->SaveConfig(&objective_fn);
|
||||
|
||||
std::vector<Json> metrics(metrics_.size());
|
||||
std::vector<Json> metrics(metrics_.size(), Json{Object{}});
|
||||
for (size_t i = 0; i < metrics_.size(); ++i) {
|
||||
metrics[i] = String(metrics_[i]->Name());
|
||||
metrics_[i]->SaveConfig(&metrics[i]);
|
||||
}
|
||||
learner_parameters["metrics"] = Array(std::move(metrics));
|
||||
|
||||
@@ -709,21 +731,6 @@ class LearnerConfiguration : public Learner {
|
||||
|
||||
std::string const LearnerConfiguration::kEvalMetric {"eval_metric"}; // NOLINT
|
||||
|
||||
namespace {
|
||||
StringView ModelMsg() {
|
||||
return StringView{
|
||||
R"doc(
|
||||
If you are loading a serialized model (like pickle in Python, RDS in R) generated by
|
||||
older XGBoost, please export the model by calling `Booster.save_model` from that version
|
||||
first, then load it back in current version. See:
|
||||
|
||||
https://xgboost.readthedocs.io/en/latest/tutorials/saving_model.html
|
||||
|
||||
for more details about differences between saving model and serializing.
|
||||
)doc"};
|
||||
}
|
||||
} // anonymous namespace
|
||||
|
||||
class LearnerIO : public LearnerConfiguration {
|
||||
private:
|
||||
std::set<std::string> saved_configs_ = {"num_round"};
|
||||
|
||||
Reference in New Issue
Block a user