diff --git a/CMakeLists.txt b/CMakeLists.txt index cd3a520d70..9e38f9de1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -779,7 +779,7 @@ set(src-util-h-sources src/util/SSE-Double.h src/util/SSE-Float.h src/util/treeStrategy_nodeAware_minBytes.h src/util/treeStrategy_nodeAware_minGens.h src/util/treeStrategy_topoUnaware.h src/util/uFcontext.h src/util/uJcontext.h src/util/valgrind.h - src/util/vector2d.h) + src/util/vector2d.h src/util/fastforest.h) foreach(filename ${src-util-h-sources}) configure_file(${filename} include/ COPYONLY) diff --git a/cmake/converse.cmake b/cmake/converse.cmake index 857f2ac0b5..80e85bbe5c 100644 --- a/cmake/converse.cmake +++ b/cmake/converse.cmake @@ -155,6 +155,7 @@ set(conv-util-cxx-sources src/util/pup_util.C src/util/pup_xlater.C src/util/spanningTree.C + src/util/fastforest.C ) if(CMK_CAN_LINK_FORTRAN) diff --git a/src/ck-ldb/LBManager.C b/src/ck-ldb/LBManager.C index af85060423..f240e93d4a 100644 --- a/src/ck-ldb/LBManager.C +++ b/src/ck-ldb/LBManager.C @@ -198,6 +198,8 @@ void _loadbalancerInit() CmiGetArgStringDesc(argv, "+MetaLBModelDir", &_lb_args.metaLbModelDir(), "Use this directory to read model for MetaLB"); + _lb_args.treeMetaLbOn() = CmiGetArgFlagDesc(argv, "+TreeMetaLB", "use MetaLB within TreeLB"); + if (_lb_args.metaLbOn() && _lb_args.metaLbModelDir() != nullptr) { #if CMK_USE_ZLIB diff --git a/src/ck-ldb/LBManager.h b/src/ck-ldb/LBManager.h index 8768f4aaff..4d3931b184 100644 --- a/src/ck-ldb/LBManager.h +++ b/src/ck-ldb/LBManager.h @@ -40,6 +40,7 @@ class CkLBArgs double _lb_targetRatio; // Specifies the target load ratio for LBs that aim for a // particular load ratio bool _lb_metaLbOn; + bool _lb_treeMetaLbOn; char* _lb_metaLbModelDir; char* _lb_treeLBFile = (char*)"treelb.json"; @@ -56,6 +57,7 @@ class CkLBArgs _lb_maxDistPhases = 10; _lb_targetRatio = 1.05; _lb_metaLbOn = false; + _lb_treeMetaLbOn = false; _lb_metaLbModelDir = nullptr; } inline char*& treeLBFile() { return _lb_treeLBFile; } @@ -78,6 +80,7 @@ class CkLBArgs inline int& maxDistPhases() { return _lb_maxDistPhases; } inline double& targetRatio() { return _lb_targetRatio; } inline bool& metaLbOn() { return _lb_metaLbOn; } + inline bool& treeMetaLbOn() {return _lb_treeMetaLbOn; } inline char*& metaLbModelDir() { return _lb_metaLbModelDir; } }; diff --git a/src/ck-ldb/MetaBalancer.C b/src/ck-ldb/MetaBalancer.C index 531e41ca9b..df6c8f7eee 100644 --- a/src/ck-ldb/MetaBalancer.C +++ b/src/ck-ldb/MetaBalancer.C @@ -23,6 +23,7 @@ #define NEGLECT_IDLE 2 // Should never be == 1 #define MIN_STATS 6 #define STATS_COUNT 29 // The number of stats collected during reduction +#define CLASSES 6 #define MAXDOUBLE std::numeric_limits::max() @@ -36,6 +37,7 @@ using std::max; CkReductionMsg* lbDataCollection(int nMsg, CkReductionMsg** msgs) { double *lb_data; lb_data = (double*)msgs[0]->getData(); + lb_data = (double*)msgs[0]->getData(); for (int i = 1; i < nMsg; i++) { CkAssert(msgs[i]->getSize() == STATS_COUNT*sizeof(double)); if (msgs[i]->getSize() != STATS_COUNT*sizeof(double)) { @@ -178,6 +180,12 @@ void MetaBalancer::init(void) { srand(time(NULL)); rFmodel = new ForestModel; rFmodel->readModel(_lb_args.metaLbModelDir()); + + std::vector features{"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", + "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21", "f22", + "f23", "f24"}; + xgboost = fastforest::load_txt("model/model.txt", features, CLASSES); + } } } @@ -295,9 +303,9 @@ bool MetaBalancer::AddLoad(int it_n, double load) { int index = it_n % VEC_SIZE; total_count_vec[index]++; adaptive_struct.total_syncs_called++; - CkPrintf("At PE %d Total contribution for iteration %d is %d \ + DEBAD(("At PE %d Total contribution for iteration %d is %d \ total objs %d\n", CkMyPe(), it_n, total_count_vec[index], - lbmanager->GetObjDataSz()); + lbmanager->GetObjDataSz())); if (it_n <= adaptive_struct.finished_iteration_no) { CkAbort("Error!! Received load for iteration that has contributed\n"); @@ -324,6 +332,7 @@ bool MetaBalancer::AddLoad(int it_n, double load) { return true; } +//NOTE: Data Collection void MetaBalancer::ContributeStats(int it_n) { #if CMK_LBDB_ON int index = it_n % VEC_SIZE; @@ -493,7 +502,7 @@ void MetaBalancer::ReceiveMinStats(double *load, int n) { // avg_hops, avg_hop_bytes, _lb_args.alpha(), _lb_args.beta(), // app_iteration_time); - DEBAD( + DEBAD( ("Features:%lf %lf %lf %lf %lf %lf %lf %lf \ %lf %lf %lf %lf %lf %lf %lf %lf %lf \ %lf %lf %lf %lf %lf %lf %lf %d %lf\n", @@ -532,10 +541,24 @@ void MetaBalancer::ReceiveMinStats(double *load, int n) { avg_hops, avg_hop_Kbytes, comm_comp_ratio}; + + //Note:Predict LB // Model returns value [1,num_lbs] int predicted_lb = rFmodel->forestTest(test_data, 1, 26); DEBAD(("***********Final classification = %d *****************\n", predicted_lb)); + std::vector prob = xgboost.softmax(test_data.data()); + int cur_pred = 1; + double cur_prob = 0.0; + for(int i = 0; i < prob.size(); ++i) { + if(prob[i] > cur_prob) { + cur_prob = prob[i]; + cur_pred = i+1; + } + } + + predicted_lb = cur_pred; + // predicted_lb-1 since predicted_lb class count in the model starts at 1 thisProxy.MetaLBSetLBOnChares(current_balancer, predicted_lb - 1); current_balancer = predicted_lb - 1; diff --git a/src/ck-ldb/MetaBalancer.h b/src/ck-ldb/MetaBalancer.h index 1af88f8472..80fafc698b 100644 --- a/src/ck-ldb/MetaBalancer.h +++ b/src/ck-ldb/MetaBalancer.h @@ -32,6 +32,7 @@ #include "LBManager.h" #include "RandomForestModel.h" +#include "fastforest.h" #include #include "MetaBalancer.decl.h" @@ -89,7 +90,9 @@ class MetaBalancer : public CBase_MetaBalancer { MetaBalancer(void) : rFmodel(NULL) { init(); } MetaBalancer(CkMigrateMessage* m) : CBase_MetaBalancer(m) { init(); } ~MetaBalancer() { - if (CkMyPe() == 0) delete rFmodel; + if (CkMyPe() == 0) { + delete rFmodel; + } } private: @@ -176,6 +179,7 @@ class MetaBalancer : public CBase_MetaBalancer { int total_ovld_pes; int current_balancer; ForestModel* rFmodel; + fastforest::FastForest xgboost; struct AdaptiveData { double iteration; diff --git a/src/ck-ldb/TreeLB.C b/src/ck-ldb/TreeLB.C index a5dcb251a5..892ae625c7 100644 --- a/src/ck-ldb/TreeLB.C +++ b/src/ck-ldb/TreeLB.C @@ -136,6 +136,7 @@ TreeLB::~TreeLB() #endif } +//Note: Each level configured with choice of load balancer void TreeLB::configure(LBTreeBuilder& builder, json& config) { #if CMK_LBDB_ON diff --git a/src/ck-ldb/TreeLB.h b/src/ck-ldb/TreeLB.h index 31445f5dc3..483e0fc9c7 100644 --- a/src/ck-ldb/TreeLB.h +++ b/src/ck-ldb/TreeLB.h @@ -6,12 +6,18 @@ #include "BaseLB.h" #include "TreeLB.decl.h" #include "json.hpp" +#include "fastforest.h" #include using json = nlohmann::json; +//using namespace rfmodel; #define DEBUG__TREE_LB_L1 0 #define DEBUG__TREE_LB_L2 0 #define DEBUG__TREE_LB_L3 0 +#define STATS_COUNT 29 +#define CLASSES 3 + +extern CkLBArgs _lb_args; void CreateTreeLB(); @@ -24,12 +30,28 @@ class TreeLBMessage { public: uint8_t level; + //TODO Metabalancer stats + double lb_data[STATS_COUNT]; // WARNING: don't add any virtual methods here }; class LevelLogic { public: + + //TODO: Initialize if only Metabalancer called + LevelLogic() { + //rfModel = new ForestModel; + //rfmodel->readModel(_lb_args.metaLbModelDir()); + if(_lb_args.treeMetaLbOn()) { + std::vector features{"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", + "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21", "f22", + "f23", "f24"}; + xgboost = fastforest::load_txt("model_tree/model.txt", features, CLASSES); + } + } + + virtual ~LevelLogic() {} /// return msg with lb stats for this PE. only needed at leaves @@ -125,6 +147,9 @@ class LevelLogic protected: std::vector stats_msgs; + //TODO Meta model + //ForestModel* rfmodel; + fastforest::FastForest xgboost; }; class LBTreeBuilder; @@ -140,6 +165,7 @@ class TreeLB : public CBase_TreeLB loadConfigFile(opts); init(opts); } + TreeLB(CkMigrateMessage* m) : CBase_TreeLB(m) {} virtual ~TreeLB(); diff --git a/src/ck-ldb/TreeLevel.h b/src/ck-ldb/TreeLevel.h index 6da14abdd7..e3722da50a 100644 --- a/src/ck-ldb/TreeLevel.h +++ b/src/ck-ldb/TreeLevel.h @@ -9,12 +9,52 @@ #include "TreeStrategyFactory.h" #include #include // std::numeric_limits +#include "json_fwd.hpp" +#include "json.hpp" #define FLOAT_TO_INT_MULT 10000 +//#define STATS_COUNT 29 +//#define CLASSES 3 // ----------------------- msgs ----------------------- #include "TreeLevel.decl.h" +using namespace TreeStrategy; +using json = nlohmann::json; + +//TODO: Metabalancer match index with appropriate lb type +/*enum metalb_stats_types{ + ITER_NO, + NUM_PROCS, + TOTAL_LOAD, + MAX_LOAD, + IDLE_TIME, + UTILIZATION, + TOTAL_LOAD_W_BG, + MAX_LOAD_W_BG, + TOTAL_KBYTES, + TOTAL_KMSGS, + WITHIN_PE_KBYTES, + OUTSIDE_PE_KBYTES, + SUM_COMM_NEIGHBORS, + MAX_COMM_NEIGHBORS, + SUM_OBJ_COUNT, + MAX_OBJ_COUNT, + SUM_OBJ_LOAD, + MAX_OBJ_LOAD, + SUM_HOPS, + SUM_HOP_KBYTES, + LOAD_STDEV2, + MAX_UTIL, + MIN_LOAD, + MIN_BG, + MIN_OBJ_LOAD, + MAX_ITER_TIME, + LOAD_SKEWNESS, + LOAD_KURTOSIS, + TOTAL_OVERLOADED_PES, +};*/ +std::string LB[CLASSES] = {"Greedy", "RefineA", "GreedyRefine"}; class LLBMigrateMsg : public TreeLBMessage, public CMessage_LLBMigrateMsg { @@ -44,6 +84,7 @@ class LBStatsMsg_1 : public TreeLBMessage, public CMessage_LBStatsMsg_1 unsigned int* order; // list of obj ids sorted by load (ids are determined by position in oloads) + //Metebalancer statistics merge static TreeLBMessage* merge(std::vector& msgs) { // TODO ideally have option of sorting objects @@ -72,9 +113,8 @@ class LBStatsMsg_1 : public TreeLBMessage, public CMessage_LBStatsMsg_1 newMsg->nPes = nPes; int pe_cnt = 0; int obj_cnt = 0; - for (int i = 0; i < msgs.size(); i++) - { - LBStatsMsg_1* msg = (LBStatsMsg_1*)msgs[i]; + for (int i = 0; i < msgs.size(); i++) { + LBStatsMsg_1 *msg = (LBStatsMsg_1 *) msgs[i]; const int msg_npes = msg->nPes; memcpy(newMsg->pe_ids + pe_cnt, msg->pe_ids, sizeof(int) * msg_npes); memcpy(newMsg->bgloads + pe_cnt, msg->bgloads, sizeof(float) * msg_npes); @@ -87,12 +127,210 @@ class LBStatsMsg_1 : public TreeLBMessage, public CMessage_LBStatsMsg_1 obj_cnt += msg->nObjs; pe_cnt += msg_npes; + + //TODO Meta merge meta stats + if (_lb_args.treeMetaLbOn()) { + newMsg->lb_data[NUM_PROCS] += msg[i].lb_data[NUM_PROCS]; + + newMsg->lb_data[TOTAL_LOAD] += msg[i].lb_data[TOTAL_LOAD]; + newMsg->lb_data[MAX_LOAD] = fmax(newMsg->lb_data[MAX_LOAD], msg[i].lb_data[MAX_LOAD]); + newMsg->lb_data[MIN_LOAD] = fmin(newMsg->lb_data[MIN_LOAD], msg[i].lb_data[MIN_LOAD]); + + newMsg->lb_data[IDLE_TIME] += msg[i].lb_data[IDLE_TIME]; + //Minimum utilization + newMsg->lb_data[UTILIZATION] = fmin(newMsg->lb_data[UTILIZATION], msg[i].lb_data[UTILIZATION]); + newMsg->lb_data[MAX_UTIL] = fmax(newMsg->lb_data[MAX_UTIL], msg[i].lb_data[MAX_UTIL]); + newMsg->lb_data[TOTAL_LOAD_W_BG] += msg[i].lb_data[TOTAL_LOAD_W_BG]; + newMsg->lb_data[MIN_BG] = fmin(newMsg->lb_data[MIN_BG], msg[i].lb_data[MIN_BG]); + newMsg->lb_data[MAX_LOAD_W_BG] = fmax(newMsg->lb_data[MAX_LOAD_W_BG], msg[i].lb_data[MAX_LOAD_W_BG]); + + newMsg->lb_data[TOTAL_KBYTES] += msg[i].lb_data[TOTAL_KBYTES]; + newMsg->lb_data[TOTAL_KMSGS] += msg[i].lb_data[TOTAL_KMSGS]; + newMsg->lb_data[WITHIN_PE_KBYTES] += msg[i].lb_data[WITHIN_PE_KBYTES]; + newMsg->lb_data[OUTSIDE_PE_KBYTES] += msg[i].lb_data[OUTSIDE_PE_KBYTES]; + newMsg->lb_data[SUM_COMM_NEIGHBORS] += msg[i].lb_data[SUM_COMM_NEIGHBORS]; + newMsg->lb_data[MAX_COMM_NEIGHBORS] = fmax(msg[i].lb_data[MAX_COMM_NEIGHBORS], + newMsg->lb_data[MAX_COMM_NEIGHBORS]); + + newMsg->lb_data[SUM_OBJ_COUNT] += msg[i].lb_data[SUM_OBJ_COUNT]; + newMsg->lb_data[MAX_OBJ_COUNT] = fmax(msg[i].lb_data[MAX_OBJ_COUNT], newMsg->lb_data[MAX_OBJ_COUNT]); + newMsg->lb_data[MIN_OBJ_LOAD] = fmin(msg[i].lb_data[MIN_OBJ_LOAD], newMsg->lb_data[MIN_OBJ_LOAD]); + newMsg->lb_data[SUM_OBJ_LOAD] += msg[i].lb_data[SUM_OBJ_LOAD]; + newMsg->lb_data[MAX_OBJ_LOAD] = fmax(msg[i].lb_data[MAX_OBJ_LOAD], newMsg->lb_data[MAX_OBJ_LOAD]); + newMsg->lb_data[SUM_HOPS] += msg[i].lb_data[SUM_HOPS]; + newMsg->lb_data[SUM_HOP_KBYTES] += msg[i].lb_data[SUM_HOP_KBYTES]; + newMsg->lb_data[MAX_ITER_TIME] = fmax(msg[i].lb_data[MAX_ITER_TIME], newMsg->lb_data[MAX_ITER_TIME]); + + newMsg->lb_data[LOAD_STDEV2] += msg[i].lb_data[LOAD_STDEV2]; + newMsg->lb_data[LOAD_SKEWNESS] += msg[i].lb_data[LOAD_SKEWNESS]; + newMsg->lb_data[LOAD_KURTOSIS] += msg[i].lb_data[LOAD_KURTOSIS]; + newMsg->lb_data[TOTAL_OVERLOADED_PES] += msg[i].lb_data[TOTAL_OVERLOADED_PES]; + } } newMsg->obj_start[pe_cnt] = obj_cnt; return newMsg; } + //TODO Meta Predict load balancer based on statistics for metabalancer + static int getPredictedLB_XG(TreeLBMessage* msg, fastforest::FastForest xgboost) { + double pe_count = msg->lb_data[NUM_PROCS]; + double avg_load = msg->lb_data[TOTAL_LOAD]/msg->lb_data[NUM_PROCS]; + double max_load = msg->lb_data[MAX_LOAD]; + double min_load = msg->lb_data[MIN_LOAD]; + double avg_utilization = msg->lb_data[IDLE_TIME]/msg->lb_data[NUM_PROCS]; + double min_utilization = msg->lb_data[UTILIZATION]; + int iteration_n = (int) msg->lb_data[ITER_NO]; + double avg_load_bg = msg->lb_data[TOTAL_LOAD_W_BG]/msg->lb_data[NUM_PROCS]; + double min_load_bg = msg->lb_data[MIN_BG]; + double max_load_bg = msg->lb_data[MAX_LOAD_W_BG]; + int total_objs = (int) msg->lb_data[SUM_OBJ_COUNT]; + double total_Kbytes = msg->lb_data[TOTAL_KBYTES]; + double total_Kmsgs = msg->lb_data[TOTAL_KMSGS]; + double total_outsidepeKmsgs = msg->lb_data[WITHIN_PE_KBYTES]; + double total_outsidepeKbytes = msg->lb_data[OUTSIDE_PE_KBYTES]; + double avg_bg = avg_load_bg - avg_load; + double avg_comm_neighbors = msg->lb_data[SUM_COMM_NEIGHBORS]/total_objs; + double max_comm_neighbors = msg->lb_data[MAX_COMM_NEIGHBORS]; + double avg_obj_load = msg->lb_data[SUM_OBJ_LOAD]/total_objs; + double min_obj_load = msg->lb_data[MIN_OBJ_LOAD]; + double max_obj_load = msg->lb_data[MAX_OBJ_LOAD]; + double avg_hops = msg->lb_data[SUM_HOPS]/(total_Kmsgs*1024.0); // The messages are in K + double avg_hop_Kbytes = msg->lb_data[SUM_HOP_KBYTES]/(total_Kmsgs*1024.0); + double standard_dev = sqrt(msg->lb_data[LOAD_STDEV2]/msg->lb_data[NUM_PROCS]); + double skewness = msg->lb_data[LOAD_SKEWNESS]/(msg->lb_data[NUM_PROCS] * standard_dev * standard_dev * + standard_dev); + double kurtosis = msg->lb_data[LOAD_KURTOSIS]/(msg->lb_data[NUM_PROCS] * standard_dev * standard_dev * + standard_dev * standard_dev) - 3; + int ovld_pes = (int) msg->lb_data[TOTAL_OVERLOADED_PES]; + double max_utilization = msg->lb_data[MAX_UTIL]; + double app_iteration_time = msg->lb_data[MAX_ITER_TIME]; + + // Features to be output + double pe_imbalance = max_load/avg_load; + double pe_load_std_frac = standard_dev/avg_load; + double pe_with_bg_imb = max_load_bg/avg_load_bg; + double bg_load_frac = avg_bg/avg_load; + double pe_gain = max_load - avg_load; + double mslope = max_load - min_load; + double aslope = avg_load - min_load; + double internal_bytes_frac = (total_Kbytes-total_outsidepeKbytes)/total_Kbytes; + double comm_comp_ratio = (_lb_args.alpha()*total_Kmsgs+_lb_args.beta()*total_Kbytes)/(avg_load*pe_count); + + std::vector test_data{pe_imbalance, + pe_load_std_frac, + pe_with_bg_imb, + 0, + bg_load_frac, + pe_gain, + avg_utilization, + min_utilization, + max_utilization, + avg_obj_load, + min_obj_load, + max_obj_load, + total_objs / pe_count, + pe_count, + total_Kbytes, + total_Kmsgs, + total_outsidepeKbytes / total_Kbytes, + total_outsidepeKmsgs / total_Kmsgs, + internal_bytes_frac, + (total_Kbytes - total_outsidepeKbytes) / total_Kmsgs, + avg_comm_neighbors, + mslope, + aslope, + avg_hops, + avg_hop_Kbytes, + comm_comp_ratio}; + + + std::vector prob = xgboost.softmax(test_data.data()); + int cur_pred = 0; + double cur_prob = 0.0; + for(int i = 0; i < prob.size(); ++i) { + if(prob[i] > cur_prob) { + cur_prob = prob[i]; + cur_pred = i; + } + } + return cur_pred; + } + + //TODO Meta Predict load balancer based on statistics for metabalancer + /* + static int getPredictedLB(TreeLBMessage* msg, ForestModel* rfmodel) { + double pe_count = msg->lb_data[NUM_PROCS]; + double avg_load = msg->lb_data[TOTAL_LOAD]/msg->lb_data[NUM_PROCS]; + double max_load = msg->lb_data[MAX_LOAD]; + double min_load = msg->lb_data[MIN_LOAD]; + double avg_utilization = msg->lb_data[IDLE_TIME]/msg->lb_data[NUM_PROCS]; + double min_utilization = msg->lb_data[UTILIZATION]; + int iteration_n = (int) msg->lb_data[ITER_NO]; + double avg_load_bg = msg->lb_data[TOTAL_LOAD_W_BG]/msg->lb_data[NUM_PROCS]; + double min_load_bg = msg->lb_data[MIN_BG]; + double max_load_bg = msg->lb_data[MAX_LOAD_W_BG]; + int total_objs = (int) msg->lb_data[SUM_OBJ_COUNT]; + double total_Kbytes = msg->lb_data[TOTAL_KBYTES]; + double total_Kmsgs = msg->lb_data[TOTAL_KMSGS]; + double total_outsidepeKmsgs = msg->lb_data[WITHIN_PE_KBYTES]; + double total_outsidepeKbytes = msg->lb_data[OUTSIDE_PE_KBYTES]; + double avg_bg = avg_load_bg - avg_load; + double avg_comm_neighbors = msg->lb_data[SUM_COMM_NEIGHBORS]/total_objs; + double max_comm_neighbors = msg->lb_data[MAX_COMM_NEIGHBORS]; + double avg_obj_load = msg->lb_data[SUM_OBJ_LOAD]/total_objs; + double min_obj_load = msg->lb_data[MIN_OBJ_LOAD]; + double max_obj_load = msg->lb_data[MAX_OBJ_LOAD]; + double avg_hops = msg->lb_data[SUM_HOPS]/(total_Kmsgs*1024.0); // The messages are in K + double avg_hop_Kbytes = msg->lb_data[SUM_HOP_KBYTES]/(total_Kmsgs*1024.0); + double standard_dev = sqrt(load[LOAD_STDEV2]/msg->lb_data[NUM_PROCS]); + double skewness = msg->lb_data[LOAD_SKEWNESS]/(msg->lb_data[NUM_PROCS] * standard_dev * standard_dev * + standard_dev); + double kurtosis = msg->lb_data[LOAD_KURTOSIS]/(msg->lb_data[NUM_PROCS] * standard_dev * standard_dev * + standard_dev * standard_dev) - 3; + int ovld_pes = (int) msg->lb_data[TOTAL_OVERLOADED_PES]; + double max_utilization = msg->lb_data[MAX_UTIL]; + double app_iteration_time = msg->lb_data[MAX_ITER_TIME]; + + // Features to be output + double pe_imbalance = max_load/avg_load; + double pe_load_std_frac = standard_dev/avg_load; + double pe_with_bg_imb = max_load_bg/avg_load_bg; + double bg_load_frac = avg_bg/avg_load; + double pe_gain = max_load - avg_load; + double internal_bytes_frac = (total_Kbytes-total_outsidepeKbytes)/total_Kbytes; + double comm_comp_ratio = (_lb_args.alpha()*total_Kmsgs+_lb_args.beta()*total_Kbytes)/(avg_load*pe_count); + + std::vector test_data{pe_imbalance, + pe_load_std_frac, + pe_with_bg_imb, + 0, + bg_load_frac, + pe_gain, + avg_utilization, + min_utilization, + max_utilization, + avg_obj_load, + min_obj_load, + max_obj_load, + total_objs / pe_count, + pe_count, + total_Kbytes, + total_Kmsgs, + total_outsidepeKbytes / total_Kbytes, + total_outsidepeKmsgs / total_Kmsgs, + internal_bytes_frac, + (total_Kbytes - total_outsidepeKbytes) / total_Kmsgs, + avg_comm_neighbors, + mslope, + aslope, + avg_hops, + avg_hop_Kbytes, + comm_comp_ratio}; + return rfmodel->forestTest(test_data, 1, 26); + } + */ + template static float fill(std::vector msgs, std::vector& objs, std::vector

& procs, LLBMigrateMsg* migMsg, @@ -470,7 +708,7 @@ class RootLevel : public LevelLogic json& config, bool repeat_strategies = false, bool token_passing = true) { - using namespace TreeStrategy; + //using namespace TreeStrategy; for (auto w : wrappers) delete w; wrappers.clear(); if (num_groups == -1) @@ -524,6 +762,21 @@ class RootLevel : public LevelLogic num_children, nPes, nObjs); #endif + + //TODO: If metabalancer LB called + //string predicted_lb = LB[LBStatsMsg_1::getPredictedLB(LBStatsMsg_1::fill(stats_msgs), rfmodel)]; + if(_lb_args.treeMetaLbOn()) { + std::string predicted_lb = LB[LBStatsMsg_1::getPredictedLB_XG(LBStatsMsg_1::merge(stats_msgs), xgboost)]; + + //TODO: metabalancer Initialize LB and add to wrappers + json config; + config["tolerance"] = 1.1; + this->repeat_strategies = false; + + wrappers.push_back(new StrategyWrapper, Proc<1, false>>( + predicted_lb, true, config + )); + } if (num_groups == -1) { // msg has object loads @@ -848,6 +1101,21 @@ class NodeSetLevel : public LevelLogic virtual TreeLBMessage* loadBalance(IDM& idm) { + if(_lb_args.treeMetaLbOn()) { + //TODO: If metabalancer LB called + //string predicted_lb = LB[LBStatsMsg_1::getPredictedLB(LBStatsMsg_1::fill(stats_msgs), rfmodel)]; + std::string predicted_lb = LB[LBStatsMsg_1::getPredictedLB_XG(LBStatsMsg_1::merge(stats_msgs), xgboost)]; + //TODO: Initialize LB & Add to wrappers + json config; + config["tolerance"] = 1.1; + this->repeat_strategies = false; + + wrappers.push_back(new StrategyWrapper, Proc<1, false>>( + predicted_lb, false, config + )); + current_strategy = wrappers.size() - 1; + } + CkAssert(wrappers.size() > current_strategy); IStrategyWrapper* wrapper = wrappers[current_strategy]; CkAssert(wrapper != nullptr); @@ -988,6 +1256,22 @@ class NodeLevel : public LevelLogic protected: LLBMigrateMsg* withinNodeLoadBalance() { + + if(_lb_args.treeMetaLbOn()) { + //TODO: If meta LB called + //string predicted_lb = LB[LBStatsMsg_1::getPredictedLB(LBStatsMsg_1::fill(stats_msgs), rfmodel)]; + std::string predicted_lb = LB[LBStatsMsg_1::getPredictedLB_XG(LBStatsMsg_1::merge(stats_msgs), xgboost)]; + //TODO: Initialize LB Add to wrappers + json config; + config["tolerance"] = 1.1; + this->repeat_strategies = false; + + wrappers.push_back(new StrategyWrapper, Proc<1, false>>( + predicted_lb, false, config + )); + current_strategy = wrappers.size() - 1; + } + CkAssert(wrappers.size() > current_strategy); IStrategyWrapper* wrapper = wrappers[current_strategy]; CkAssert(wrapper != nullptr); @@ -1046,6 +1330,11 @@ class NodeLevel : public LevelLogic class PELevel : public LevelLogic { + + double prev_idle; + double prev_load; + int itn; + public: struct LDObjLoadGreater { @@ -1055,7 +1344,11 @@ class PELevel : public LevelLogic } }; - PELevel(LBManager* _lbmgr) : lbmgr(_lbmgr), rateAware(_lb_args.testPeSpeed()) {} + PELevel(LBManager* _lbmgr) : lbmgr(_lbmgr), rateAware(_lb_args.testPeSpeed()) { + prev_idle = 0; + prev_load = 0; + itn = 0; + } virtual ~PELevel() {} @@ -1136,6 +1429,66 @@ class PELevel : public LevelLogic msg->bgloads[0] = float(bg_walltime); // fprintf(stderr, "[%d] my bgload is %f %f\n", mype, msg->bgloads[0], bg_walltime); + + if(_lb_args.treeMetaLbOn()) { + //TODO Meta Stats initialization + double idle_time, cpu_bgtime, load, prev_avg_load; + double bg_walltimed; + lbmgr->TotalTime(&idle_time, &load); + lbmgr->BackgroundLoad(&bg_walltimed, &cpu_bgtime); + idle_time -= prev_idle; + load -= prev_load; + + prev_avg_load = prev_load / itn; + prev_idle += idle_time; + prev_load += load; + itn++; + + + int bytes, msgs, outsidepemsgs, outsidepebytes, num_nghbors, hops, hopbytes; + bytes = msgs = outsidepemsgs = outsidepebytes = num_nghbors = hops = hopbytes = 0; + if (_lb_args.traceComm()) { + lbmgr->GetCommInfo(bytes, msgs, outsidepemsgs, + outsidepebytes, num_nghbors, hops, hopbytes); + } + + //TODO + int sync_for_bg = itn; + bg_walltimed = bg_walltimed * lbmgr->GetObjDataSz() / sync_for_bg; + + msg->lb_data[NUM_PROCS] = 1; + msg->lb_data[TOTAL_LOAD] = msg->lb_data[MAX_LOAD] = msg->lb_data[MIN_LOAD] = load; + if (load == 0.0) { + msg->lb_data[IDLE_TIME] = msg->lb_data[UTILIZATION] = msg->lb_data[MAX_UTIL] = 0.0; + } else { + msg->lb_data[IDLE_TIME] = msg->lb_data[UTILIZATION] = msg->lb_data[MAX_UTIL] = load / (idle_time + load); + } + + msg->lb_data[TOTAL_LOAD_W_BG] = msg->lb_data[MIN_BG] = msg->lb_data[MAX_LOAD_W_BG] = + msg->lb_data[TOTAL_LOAD] + bg_walltimed; + msg->lb_data[TOTAL_KBYTES] = ((double) bytes / 1024.0); + msg->lb_data[TOTAL_KMSGS] = ((double) msgs / 1024.0); + msg->lb_data[WITHIN_PE_KBYTES] = ((double) outsidepemsgs / 1024.0); + msg->lb_data[OUTSIDE_PE_KBYTES] = ((double) outsidepebytes / 1024.0); + msg->lb_data[SUM_COMM_NEIGHBORS] = msg->lb_data[MAX_COMM_NEIGHBORS] = num_nghbors; + msg->lb_data[SUM_OBJ_COUNT] = msg->lb_data[MAX_OBJ_COUNT] = lbmgr->GetObjDataSz(); + msg->lb_data[SUM_OBJ_LOAD] = msg->lb_data[MAX_OBJ_LOAD] = msg->lb_data[MIN_OBJ_LOAD] = load; + msg->lb_data[LOAD_STDEV2] = (load - prev_avg_load) * + (load - prev_avg_load); + msg->lb_data[LOAD_SKEWNESS] = (load - prev_avg_load) * + (load - prev_avg_load) * + (load - prev_avg_load); + msg->lb_data[LOAD_KURTOSIS] = msg->lb_data[LOAD_STDEV2] * msg->lb_data[LOAD_STDEV2]; + msg->lb_data[TOTAL_OVERLOADED_PES] = (load > prev_avg_load) ? 1 : 0; + msg->lb_data[SUM_HOPS] = 0; + msg->lb_data[SUM_HOP_KBYTES] = 0; + if (msgs > 0) { + msg->lb_data[SUM_HOPS] = (double) hops; + msg->lb_data[SUM_HOP_KBYTES] = ((double) hopbytes / 1024.0); + } + msg->lb_data[MAX_ITER_TIME] = load + idle_time; + } + return msg; } diff --git a/src/ck-ldb/XGBoost/model/model.bin b/src/ck-ldb/XGBoost/model/model.bin new file mode 100644 index 0000000000..d04cd2899e Binary files /dev/null and b/src/ck-ldb/XGBoost/model/model.bin differ diff --git a/src/ck-ldb/XGBoost/model/model.txt b/src/ck-ldb/XGBoost/model/model.txt new file mode 100644 index 0000000000..78cb2d7e3a --- /dev/null +++ b/src/ck-ldb/XGBoost/model/model.txt @@ -0,0 +1,2108 @@ +booster[0]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.110526308 + 2:leaf=-0.141106725 +booster[1]: +0:[f5<0.405697495] yes=1,no=2,missing=1 + 1:leaf=0.173394501 + 2:leaf=-0.144043326 +booster[2]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.940328479] yes=3,no=4,missing=3 + 3:leaf=0.799024403 + 4:leaf=0.173394501 + 2:leaf=-0.104132235 +booster[3]: +0:[f0<1.97831953] yes=1,no=2,missing=1 + 1:leaf=-0.144043326 + 2:leaf=0.0385321081 +booster[4]: +0:[f0<1.53059101] yes=1,no=2,missing=1 + 1:leaf=0.173394501 + 2:leaf=-0.144043326 +booster[5]: +0:[f0<1.53059101] yes=1,no=2,missing=1 + 1:leaf=0.0385321081 + 2:leaf=-0.144043326 +booster[6]: +0:[f0<1.53059101] yes=1,no=2,missing=1 + 1:leaf=0.0385321081 + 2:leaf=-0.144043326 +booster[7]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0963714868 + 2:leaf=-0.133924335 +booster[8]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.192982286 + 2:leaf=-0.139122307 +booster[9]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.448826045 + 4:leaf=0.0403771363 + 2:leaf=-0.100561678 +booster[10]: +0:[f23<0.234286994] yes=1,no=2,missing=1 + 1:leaf=-0.137994871 + 2:leaf=0.0469525866 +booster[11]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.19885543 + 2:leaf=-0.139949992 +booster[12]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.138714775 + 2:leaf=0.061754901 +booster[13]: +0:[f2<1.48194599] yes=1,no=2,missing=1 + 1:leaf=0.0611903481 + 2:leaf=-0.138651609 +booster[14]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0835097656 + 2:leaf=-0.12707907 +booster[15]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.164799511 + 2:leaf=-0.132444054 +booster[16]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.32155779 + 4:leaf=0.0297882389 + 2:leaf=-0.0976118967 +booster[17]: +0:[f10<0.0853990018] yes=1,no=2,missing=1 + 1:leaf=-0.133002549 + 2:leaf=0.0597411469 +booster[18]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.170513973 + 2:leaf=-0.134243608 +booster[19]: +0:[f2<1.48194599] yes=1,no=2,missing=1 + 1:leaf=0.0613301881 + 2:leaf=-0.133015692 +booster[20]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.131927073 + 2:leaf=0.0529976226 +booster[21]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0814126208 + 2:leaf=-0.124277771 +booster[22]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.127871394 + 2:leaf=0.14589186 +booster[23]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f23<0.0519265011] yes=3,no=4,missing=3 + 3:leaf=0.0128221074 + 4:leaf=0.256289989 + 2:leaf=-0.0943760425 +booster[24]: +0:[f2<1.73137951] yes=1,no=2,missing=1 + 1:leaf=-0.127012476 + 2:leaf=0.0618081614 +booster[25]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.153868169 + 2:leaf=-0.1293661 +booster[26]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.0549296774 + 2:leaf=-0.12674202 +booster[27]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.128457382 + 2:leaf=0.0585890226 +booster[28]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0759169236 + 2:leaf=-0.117865846 +booster[29]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.145226464 + 2:leaf=-0.12236739 +booster[30]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.2225416 + 4:leaf=0.00848879199 + 2:leaf=-0.0917572454 +booster[31]: +0:[f10<0.0853990018] yes=1,no=2,missing=1 + 1:leaf=-0.121328957 + 2:leaf=0.0611991435 +booster[32]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.130109385 + 2:leaf=-0.123368934 +booster[33]: +0:[f7<0.832607508] yes=1,no=2,missing=1 + 1:leaf=0.0531581603 + 2:leaf=-0.122532487 +booster[34]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.12269152 + 2:leaf=0.0557347275 +booster[35]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.116460189 + 2:leaf=0.0783255994 +booster[36]: +0:[f22<0.207988501] yes=1,no=2,missing=1 + 1:leaf=0.134311438 + 2:leaf=-0.118064061 +booster[37]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.198585972 + 4:leaf=0.006015989 + 2:leaf=-0.0894679204 +booster[38]: +0:[f10<0.0853990018] yes=1,no=2,missing=1 + 1:leaf=-0.115354516 + 2:leaf=0.0579125397 +booster[39]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.116412558 + 2:leaf=-0.121113963 +booster[40]: +0:[f23<0.223548502] yes=1,no=2,missing=1 + 1:leaf=-0.117798708 + 2:leaf=0.0497534946 +booster[41]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.117060356 + 2:leaf=0.0512392744 +booster[42]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0754609331 + 2:leaf=-0.110336483 +booster[43]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.119604982 + 2:leaf=-0.111621723 +booster[44]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f23<0.0519265011] yes=3,no=4,missing=3 + 3:leaf=-0.0130067309 + 4:[f24<0.000269500015] yes=5,no=6,missing=5 + 5:leaf=0.197860777 + 6:leaf=0.0350870341 + 2:leaf=-0.0858716369 +booster[45]: +0:[f10<0.0853990018] yes=1,no=2,missing=1 + 1:leaf=-0.109531969 + 2:leaf=0.0576507561 +booster[46]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.104212776 + 2:leaf=-0.115072004 +booster[47]: +0:[f7<0.832607508] yes=1,no=2,missing=1 + 1:leaf=0.0557178482 + 2:leaf=-0.112915739 +booster[48]: +0:[f10<0.0736650005] yes=1,no=2,missing=1 + 1:leaf=-0.113520488 + 2:leaf=0.0550606363 +booster[49]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0731417537 + 2:leaf=-0.105243459 +booster[50]: +0:[f22<0.207988501] yes=1,no=2,missing=1 + 1:leaf=0.111746721 + 2:leaf=-0.107220605 +booster[51]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.168856204 + 4:leaf=-0.00367293856 + 2:leaf=-0.08324074 +booster[52]: +0:[f9<0.00578700006] yes=1,no=2,missing=1 + 1:leaf=-0.104372099 + 2:leaf=0.0536457635 +booster[53]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.0889367238 + 2:leaf=-0.112827808 +booster[54]: +0:[f13<546578.125] yes=1,no=2,missing=1 + 1:leaf=-0.109665699 + 2:leaf=0.0528277978 +booster[55]: +0:[f3<0.133477509] yes=1,no=2,missing=1 + 1:leaf=0.0545226224 + 2:leaf=-0.108017139 +booster[56]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.105044372 + 2:leaf=0.0679562166 +booster[57]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.102385573 + 2:leaf=-0.101435073 +booster[58]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.00454191444 + 4:leaf=0.169492081 + 2:[f24<0.000117999996] yes=5,no=6,missing=5 + 5:leaf=0.0581184663 + 6:leaf=-0.0909634307 +booster[59]: +0:[f10<0.082564503] yes=1,no=2,missing=1 + 1:leaf=-0.099167712 + 2:leaf=0.0530293658 +booster[60]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.0839718208 + 2:leaf=-0.107470982 +booster[61]: +0:[f13<546578.125] yes=1,no=2,missing=1 + 1:leaf=-0.103721984 + 2:leaf=0.0507098325 +booster[62]: +0:[f10<0.0736650005] yes=1,no=2,missing=1 + 1:leaf=-0.104816139 + 2:leaf=0.0576521643 +booster[63]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0712140799 + 2:leaf=-0.101128325 +booster[64]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0981945321 + 2:leaf=0.0924628228 +booster[65]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.00608900376 + 4:leaf=0.157182127 + 2:[f2<1.4865756] yes=5,no=6,missing=5 + 5:leaf=-0.00382543146 + 6:leaf=-0.0274565313 +booster[66]: +0:[f4<0.157598004] yes=1,no=2,missing=1 + 1:leaf=-0.0934607834 + 2:leaf=0.0510745272 +booster[67]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.0725944489 + 2:leaf=-0.105071992 +booster[68]: +0:[f7<0.843685031] yes=1,no=2,missing=1 + 1:leaf=0.0499067083 + 2:leaf=-0.0985996872 +booster[69]: +0:[f10<0.0736650005] yes=1,no=2,missing=1 + 1:leaf=-0.0998124406 + 2:leaf=0.0559299998 +booster[70]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0668117106 + 2:leaf=-0.0961903408 +booster[71]: +0:[f22<0.207988501] yes=1,no=2,missing=1 + 1:leaf=0.0903408006 + 2:leaf=-0.0947440341 +booster[72]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.0046547465 + 4:leaf=0.148641467 + 2:leaf=-0.021354517 +booster[73]: +0:[f23<0.209631994] yes=1,no=2,missing=1 + 1:leaf=-0.0890298858 + 2:leaf=0.0487346724 +booster[74]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.0673970729 + 2:leaf=-0.100408174 +booster[75]: +0:[f13<546578.125] yes=1,no=2,missing=1 + 1:leaf=-0.0950009599 + 2:leaf=0.0494006984 +booster[76]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.0955847502 + 2:leaf=0.0537504256 +booster[77]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.060159564 + 2:leaf=-0.0913120359 +booster[78]: +0:[f22<0.207988501] yes=1,no=2,missing=1 + 1:leaf=0.0818330571 + 2:leaf=-0.0899792016 +booster[79]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.0061785602 + 4:leaf=0.140823573 + 2:leaf=-0.0208365284 +booster[80]: +0:[f0<1.78389251] yes=1,no=2,missing=1 + 1:leaf=-0.084515132 + 2:leaf=0.0460461266 +booster[81]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.058195617 + 2:leaf=-0.0986861363 +booster[82]: +0:[f7<0.843685031] yes=1,no=2,missing=1 + 1:leaf=0.0476434715 + 2:leaf=-0.090511851 +booster[83]: +0:[f10<0.0736650005] yes=1,no=2,missing=1 + 1:leaf=-0.091362983 + 2:leaf=0.0512510501 +booster[84]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.0914154947 + 2:leaf=0.0582757592 +booster[85]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0882286429 + 2:leaf=0.0792970434 +booster[86]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.0077102934 + 4:leaf=0.133796006 + 2:leaf=-0.0213247109 +booster[87]: +0:[f23<0.171588004] yes=1,no=2,missing=1 + 1:leaf=-0.0799812227 + 2:leaf=0.0435431786 +booster[88]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=0.0497088954 + 2:leaf=-0.100177966 +booster[89]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0491124913 + 2:leaf=-0.0893552005 +booster[90]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.0500924997 + 2:leaf=-0.0897391737 +booster[91]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0617583618 + 2:leaf=-0.0879211053 +booster[92]: +0:[f22<0.207988501] yes=1,no=2,missing=1 + 1:leaf=0.0735782683 + 2:leaf=-0.0832961053 +booster[93]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.128584802 + 4:leaf=-0.0179954059 + 2:leaf=-0.0363033377 +booster[94]: +0:leaf=-0.0222386178 +booster[95]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.0524648428 + 2:leaf=-0.0910545439 +booster[96]: +0:[f23<0.209631994] yes=1,no=2,missing=1 + 1:leaf=-0.0820137635 + 2:leaf=0.0411564857 +booster[97]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.0457602255 + 2:leaf=-0.0854805857 +booster[98]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0545784682 + 2:leaf=-0.0836253688 +booster[99]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0802224278 + 2:leaf=0.0704663172 +booster[100]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.00363827217 + 4:leaf=0.123773851 + 2:leaf=-0.0213058442 +booster[101]: +0:leaf=-0.018493183 +booster[102]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=0.0467708483 + 2:leaf=-0.0939178988 +booster[103]: +0:leaf=-0.0251915026 +booster[104]: +0:[f24<0.000119999997] yes=1,no=2,missing=1 + 1:leaf=0.0450479761 + 2:leaf=-0.0811323076 +booster[105]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0540505722 + 2:leaf=-0.0806742683 +booster[106]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0135447215 + 2:leaf=-0.0126316808 +booster[107]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.396535516] yes=3,no=4,missing=3 + 3:leaf=0.00373717141 + 4:leaf=0.118306257 + 2:leaf=-0.019351298 +booster[108]: +0:leaf=-0.0164094958 +booster[109]: +0:[f1<0.155913994] yes=1,no=2,missing=1 + 1:leaf=0.047860343 + 2:leaf=-0.0884815156 +booster[110]: +0:leaf=-0.02309772 +booster[111]: +0:leaf=-0.0237824507 +booster[112]: +0:[f0<1.53059101] yes=1,no=2,missing=1 + 1:leaf=0.0281417053 + 2:leaf=-0.0257439837 +booster[113]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=0.00832651462 + 2:leaf=-0.00775556732 +booster[114]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f2<1.49161005] yes=3,no=4,missing=3 + 3:leaf=-0.0154287945 + 4:leaf=0.1213395 + 2:leaf=-0.0230175275 +booster[115]: +0:leaf=-0.0144143905 +booster[116]: +0:[f3<0.109404996] yes=1,no=2,missing=1 + 1:leaf=0.0425317436 + 2:leaf=-0.0833291933 +booster[117]: +0:leaf=-0.0197892487 +booster[118]: +0:leaf=-0.0219253786 +booster[119]: +0:[f2<1.4865756] yes=1,no=2,missing=1 + 1:leaf=0.0274008233 + 2:leaf=-0.0224445071 +booster[120]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=0.00809324905 + 2:leaf=-0.00816192478 +booster[121]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f0<1.63277853] yes=3,no=4,missing=3 + 3:leaf=0.011675139 + 4:leaf=0.105369031 + 2:leaf=-0.022317484 +booster[122]: +0:leaf=-0.0131016094 +booster[123]: +0:[f23<0.125228003] yes=1,no=2,missing=1 + 1:leaf=0.00896788482 + 2:leaf=-0.035268601 +booster[124]: +0:leaf=-0.0178721659 +booster[125]: +0:leaf=-0.0187450349 +booster[126]: +0:[f19<4.94549561] yes=1,no=2,missing=1 + 1:leaf=-0.0197256505 + 2:leaf=0.0261333734 +booster[127]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=0.00794939417 + 2:leaf=-0.00872660056 +booster[128]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.11177139 + 4:leaf=-0.0236173943 + 2:leaf=-0.036286965 +booster[129]: +0:leaf=-0.012183941 +booster[130]: +0:[f23<0.125228003] yes=1,no=2,missing=1 + 1:leaf=0.00873395521 + 2:leaf=-0.0329878367 +booster[131]: +0:leaf=-0.0160499681 +booster[132]: +0:leaf=-0.0170394368 +booster[133]: +0:[f19<4.94549561] yes=1,no=2,missing=1 + 1:leaf=-0.0186046902 + 2:leaf=0.0251414552 +booster[134]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=0.00756302336 + 2:leaf=-0.00689804321 +booster[135]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f0<1.63277853] yes=3,no=4,missing=3 + 3:leaf=0.00880637299 + 4:leaf=0.097850129 + 2:leaf=-0.0254406203 +booster[136]: +0:leaf=-0.010138901 +booster[137]: +0:[f23<0.125228003] yes=1,no=2,missing=1 + 1:leaf=0.00748108374 + 2:leaf=-0.0311392993 +booster[138]: +0:leaf=-0.0141016273 +booster[139]: +0:leaf=-0.0152944215 +booster[140]: +0:[f19<4.94549561] yes=1,no=2,missing=1 + 1:leaf=-0.0162183046 + 2:leaf=0.0239467863 +booster[141]: +0:[f13<482183.594] yes=1,no=2,missing=1 + 1:leaf=-0.00465262448 + 2:leaf=0.00413453812 +booster[142]: +0:[f3<0.260352015] yes=1,no=2,missing=1 + 1:[f5<0.569023967] yes=3,no=4,missing=3 + 3:leaf=-0.07976266 + 4:leaf=0.0749140084 + 2:leaf=0.0858914629 +booster[143]: +0:leaf=-0.00939399377 +booster[144]: +0:[f23<0.125228003] yes=1,no=2,missing=1 + 1:leaf=0.0068899449 + 2:leaf=-0.0291774552 +booster[145]: +0:leaf=-0.0126869986 +booster[146]: +0:leaf=-0.014072502 +booster[147]: +0:[f19<4.94549561] yes=1,no=2,missing=1 + 1:leaf=-0.014967029 + 2:leaf=0.0222432688 +booster[148]: +0:leaf=-0.00111960538 +booster[149]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.10252852 + 4:leaf=-0.0239444189 + 2:leaf=-0.0362443738 +booster[150]: +0:leaf=-0.00866336841 +booster[151]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.0207420103 + 2:leaf=-0.00125949248 +booster[152]: +0:leaf=-0.0115772095 +booster[153]: +0:leaf=-0.0122314384 +booster[154]: +0:[f21<0.168061003] yes=1,no=2,missing=1 + 1:leaf=-0.0138466144 + 2:leaf=0.020447595 +booster[155]: +0:leaf=-0.000315867015 +booster[156]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:[f5<0.405697495] yes=3,no=4,missing=3 + 3:leaf=-0.00116087729 + 4:leaf=0.0906698331 + 2:leaf=-0.0251166485 +booster[157]: +0:leaf=-0.00699932035 +booster[158]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.0197917148 + 2:leaf=-0.00159369747 +booster[159]: +0:leaf=-0.00997734535 +booster[160]: +0:leaf=-0.0109232198 +booster[161]: +0:[f8<0.0089030005] yes=1,no=2,missing=1 + 1:leaf=0.0212018825 + 2:leaf=-0.0139812753 +booster[162]: +0:leaf=-0.000346550456 +booster[163]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f1<0.1929335] yes=3,no=4,missing=3 + 3:leaf=0.00154109357 + 4:leaf=0.0838034749 + 2:leaf=-0.0314028673 +booster[164]: +0:leaf=-0.00615397468 +booster[165]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.0187526811 + 2:leaf=-0.00168586441 +booster[166]: +0:leaf=-0.0090530701 +booster[167]: +0:leaf=-0.0102233402 +booster[168]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0192500614 + 2:leaf=-0.0131075326 +booster[169]: +0:leaf=0.000136847244 +booster[170]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:[f3<0.219247013] yes=3,no=4,missing=3 + 3:leaf=-0.0819730312 + 4:leaf=0.0517959297 + 2:leaf=0.0675338805 +booster[171]: +0:leaf=-0.00530432118 +booster[172]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.017362142 + 2:leaf=-0.00233489322 +booster[173]: +0:leaf=-0.00810397696 +booster[174]: +0:leaf=-0.00952976197 +booster[175]: +0:[f24<0.000214] yes=1,no=2,missing=1 + 1:leaf=-0.0131160598 + 2:leaf=0.0189353768 +booster[176]: +0:leaf=0.000305376423 +booster[177]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0508302934 + 2:leaf=-0.0289131012 +booster[178]: +0:leaf=-0.00463664671 +booster[179]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=-0.0161885731 + 2:leaf=-0.00157780631 +booster[180]: +0:leaf=-0.00738948258 +booster[181]: +0:leaf=-0.00800804887 +booster[182]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0179572385 + 2:leaf=-0.0118696718 +booster[183]: +0:leaf=-0.000265928131 +booster[184]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.0907136798 + 4:leaf=-0.023165457 + 2:leaf=-0.037964087 +booster[185]: +0:leaf=-0.00436044065 +booster[186]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=-0.0147092417 + 2:leaf=-0.0011790276 +booster[187]: +0:leaf=-0.00673917914 +booster[188]: +0:leaf=-0.00673610205 +booster[189]: +0:[f1<0.211333007] yes=1,no=2,missing=1 + 1:leaf=-0.0115880137 + 2:leaf=0.016953053 +booster[190]: +0:leaf=0.000218684945 +booster[191]: +0:[f20<0.0735715032] yes=1,no=2,missing=1 + 1:leaf=0.0569588691 + 2:leaf=-0.0253082719 +booster[192]: +0:leaf=-0.00338202482 +booster[193]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.0144341029 + 2:leaf=-0.00117680221 +booster[194]: +0:leaf=-0.00587951764 +booster[195]: +0:leaf=-0.00593321212 +booster[196]: +0:[f1<0.211333007] yes=1,no=2,missing=1 + 1:leaf=-0.0109832762 + 2:leaf=0.0170316771 +booster[197]: +0:leaf=0.000227556462 +booster[198]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0491112322 + 2:leaf=-0.0287197921 +booster[199]: +0:leaf=-0.00335369143 +booster[200]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=-0.0128888618 + 2:leaf=-0.00152250833 +booster[201]: +0:leaf=-0.00558705768 +booster[202]: +0:leaf=-0.00566757936 +booster[203]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0171313286 + 2:leaf=-0.0111979088 +booster[204]: +0:leaf=0.00184596167 +booster[205]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.0237517282 + 2:leaf=0.0572848879 +booster[206]: +0:leaf=-0.00318148662 +booster[207]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=-0.0125326486 + 2:leaf=-0.00179282541 +booster[208]: +0:leaf=-0.00535331573 +booster[209]: +0:leaf=-0.0055071488 +booster[210]: +0:[f8<0.00892500021] yes=1,no=2,missing=1 + 1:leaf=0.0165191758 + 2:leaf=-0.0107786572 +booster[211]: +0:leaf=0.000814776286 +booster[212]: +0:[f20<0.0735715032] yes=1,no=2,missing=1 + 1:leaf=0.0508902259 + 2:leaf=-0.0247182939 +booster[213]: +0:leaf=-0.00298354519 +booster[214]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.011803532 + 2:leaf=-0.00107794162 +booster[215]: +0:leaf=-0.00503505301 +booster[216]: +0:leaf=-0.00444888603 +booster[217]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.016663339 + 2:leaf=-0.0103603899 +booster[218]: +0:leaf=0.00069546036 +booster[219]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0453535058 + 2:leaf=-0.0298415031 +booster[220]: +0:leaf=-0.00299004023 +booster[221]: +0:[f5<0.560186028] yes=1,no=2,missing=1 + 1:leaf=-0.0106760152 + 2:leaf=-0.00122568419 +booster[222]: +0:leaf=-0.0048185545 +booster[223]: +0:leaf=-0.0043270234 +booster[224]: +0:[f8<0.00893099979] yes=1,no=2,missing=1 + 1:leaf=0.0156943072 + 2:leaf=-0.009776894 +booster[225]: +0:leaf=0.00192911155 +booster[226]: +0:[f21<0.168996498] yes=1,no=2,missing=1 + 1:leaf=-0.023194503 + 2:leaf=0.0539685898 +booster[227]: +0:leaf=-0.00284943543 +booster[228]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=-0.0103611406 + 2:leaf=-0.0014288316 +booster[229]: +0:leaf=-0.0046298434 +booster[230]: +0:leaf=-0.00421287678 +booster[231]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0159419049 + 2:leaf=-0.0108124763 +booster[232]: +0:leaf=0.00161994959 +booster[233]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.0239501055 + 2:leaf=0.05210796 +booster[234]: +0:leaf=-0.00236821966 +booster[235]: +0:[f5<0.560186028] yes=1,no=2,missing=1 + 1:leaf=-0.00975765567 + 2:leaf=-0.00155640405 +booster[236]: +0:leaf=-0.00450989651 +booster[237]: +0:leaf=-0.00376911857 +booster[238]: +0:[f21<0.162918508] yes=1,no=2,missing=1 + 1:leaf=0.0149849681 + 2:leaf=-0.0099667199 +booster[239]: +0:leaf=0.000598313636 +booster[240]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0432528779 + 2:leaf=-0.0311618317 +booster[241]: +0:leaf=-0.00224463223 +booster[242]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00918198563 + 2:leaf=-0.000954548712 +booster[243]: +0:leaf=-0.0042355163 +booster[244]: +0:leaf=-0.00294089736 +booster[245]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0145497592 + 2:leaf=-0.00993493944 +booster[246]: +0:leaf=0.00194899796 +booster[247]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=0.037942905 + 2:leaf=-0.0353764556 +booster[248]: +0:leaf=-0.00216668285 +booster[249]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=-0.00896202773 + 2:leaf=-0.00123821024 +booster[250]: +0:leaf=-0.00402527768 +booster[251]: +0:leaf=-0.00313485623 +booster[252]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0136813438 + 2:leaf=-0.00964338146 +booster[253]: +0:leaf=0.0013125618 +booster[254]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.0250415746 + 2:leaf=0.0478794388 +booster[255]: +0:leaf=-0.00144748669 +booster[256]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00794902816 + 2:leaf=-0.00115147757 +booster[257]: +0:leaf=-0.00322175841 +booster[258]: +0:leaf=-0.00240037218 +booster[259]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.00895108934 + 2:leaf=0.0128837973 +booster[260]: +0:leaf=0.000342111307 +booster[261]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0409796834 + 2:leaf=-0.032660991 +booster[262]: +0:leaf=-0.00139441807 +booster[263]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00717538595 + 2:leaf=-0.000820700487 +booster[264]: +0:leaf=-0.00300163589 +booster[265]: +0:leaf=-0.00178921351 +booster[266]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.0126122655 + 2:leaf=-0.00896627828 +booster[267]: +0:leaf=0.0016214113 +booster[268]: +0:[f20<0.0735715032] yes=1,no=2,missing=1 + 1:leaf=0.0449474901 + 2:leaf=-0.027024556 +booster[269]: +0:leaf=-0.00139770634 +booster[270]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00700007519 + 2:leaf=-0.00130818598 +booster[271]: +0:leaf=-0.00289972615 +booster[272]: +0:leaf=-0.00207925937 +booster[273]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.00846355502 + 2:leaf=0.0127830403 +booster[274]: +0:leaf=0.00103663234 +booster[275]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=0.034890458 + 2:leaf=-0.0362061225 +booster[276]: +0:leaf=-0.00151892682 +booster[277]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00612638285 + 2:leaf=-0.00127813779 +booster[278]: +0:leaf=-0.00263704313 +booster[279]: +0:leaf=-0.00204137294 +booster[280]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0128814811 + 2:leaf=-0.0091610346 +booster[281]: +0:leaf=0.000687436899 +booster[282]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0382893458 + 2:leaf=-0.0321856998 +booster[283]: +0:leaf=-0.00101556641 +booster[284]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00523495628 + 2:leaf=-0.00129640684 +booster[285]: +0:leaf=-0.00217959634 +booster[286]: +0:leaf=-0.00153076509 +booster[287]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0118316719 + 2:leaf=-0.00838252157 +booster[288]: +0:leaf=0.00159902032 +booster[289]: +0:[f5<0.569023967] yes=1,no=2,missing=1 + 1:leaf=-0.0270644408 + 2:leaf=0.0447104089 +booster[290]: +0:leaf=-0.000924248598 +booster[291]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.00134482991 + 2:leaf=-0.00526862359 +booster[292]: +0:leaf=-0.00191403157 +booster[293]: +0:leaf=-0.00175879465 +booster[294]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.0117089599 + 2:leaf=-0.00834688265 +booster[295]: +0:leaf=0.000577273138 +booster[296]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0361079387 + 2:leaf=-0.0311918519 +booster[297]: +0:leaf=-0.000921228726 +booster[298]: +0:[f20<0.116645999] yes=1,no=2,missing=1 + 1:leaf=-0.00466761878 + 2:leaf=-0.00107367826 +booster[299]: +0:leaf=-0.00182049547 +booster[300]: +0:leaf=-0.00120248937 +booster[301]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.0113470722 + 2:leaf=-0.00807934813 +booster[302]: +0:leaf=0.0016531141 +booster[303]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=0.0328491889 + 2:leaf=-0.0365717709 +booster[304]: +0:leaf=-0.000969264889 +booster[305]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.00128460163 + 2:leaf=-0.00484649651 +booster[306]: +0:leaf=-0.00182654045 +booster[307]: +0:leaf=-0.00150762941 +booster[308]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.0120168058 + 2:leaf=-0.00913202763 +booster[309]: +0:leaf=0.00117771048 +booster[310]: +0:[f20<0.0735715032] yes=1,no=2,missing=1 + 1:leaf=0.0412160978 + 2:leaf=-0.0276017673 +booster[311]: +0:leaf=-0.000551605597 +booster[312]: +0:leaf=-0.00367865572 +booster[313]: +0:leaf=-0.00146874518 +booster[314]: +0:leaf=-0.00105840235 +booster[315]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.0112860342 + 2:leaf=-0.00802253745 +booster[316]: +0:leaf=0.000582600187 +booster[317]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0320552699 + 2:leaf=-0.0343620218 +booster[318]: +0:leaf=-0.000761750387 +booster[319]: +0:leaf=-0.00312754023 +booster[320]: +0:leaf=-0.00137060578 +booster[321]: +0:leaf=-0.00111885555 +booster[322]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.011744434 + 2:leaf=-0.00833907723 +booster[323]: +0:leaf=-0.000125143866 +booster[324]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0352396853 + 2:leaf=-0.0318384692 +booster[325]: +0:leaf=-0.000813514227 +booster[326]: +0:leaf=-0.00253313244 +booster[327]: +0:leaf=-0.00122584309 +booster[328]: +0:leaf=-0.000710834807 +booster[329]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.0108938683 + 2:leaf=-0.00776336109 +booster[330]: +0:leaf=0.000744622259 +booster[331]: +0:[f20<0.0735715032] yes=1,no=2,missing=1 + 1:leaf=0.0377146602 + 2:leaf=-0.0259153005 +booster[332]: +0:leaf=-0.000753989967 +booster[333]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000797353394 + 2:leaf=-0.00318364822 +booster[334]: +0:leaf=-0.00108067552 +booster[335]: +0:leaf=-0.000999589916 +booster[336]: +0:[f5<0.560186028] yes=1,no=2,missing=1 + 1:leaf=-0.00712265261 + 2:leaf=0.0106411409 +booster[337]: +0:leaf=0.000234842213 +booster[338]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0301107261 + 2:leaf=-0.0332158357 +booster[339]: +0:leaf=-0.000917976198 +booster[340]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000709469605 + 2:leaf=-0.00272518629 +booster[341]: +0:leaf=-0.000994352042 +booster[342]: +0:leaf=-0.0010491414 +booster[343]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0109471567 + 2:leaf=-0.00734800426 +booster[344]: +0:leaf=-0.000518516405 +booster[345]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0332325399 + 2:leaf=-0.0306902733 +booster[346]: +0:leaf=-0.00093012146 +booster[347]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000393388589 + 2:leaf=-0.00218562712 +booster[348]: +0:leaf=-0.000853796897 +booster[349]: +0:leaf=-0.000584215275 +booster[350]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.0100776386 + 2:leaf=-0.00678646984 +booster[351]: +0:leaf=0.000343122549 +booster[352]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0283202007 + 2:leaf=-0.0321573988 +booster[353]: +0:leaf=-0.000853525766 +booster[354]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000503243995 + 2:leaf=-0.00240856991 +booster[355]: +0:leaf=-0.000729795429 +booster[356]: +0:leaf=-0.000859791238 +booster[357]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.00695717288 + 2:leaf=0.0105962427 +booster[358]: +0:leaf=-0.000471256324 +booster[359]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0312637575 + 2:leaf=-0.0297875386 +booster[360]: +0:leaf=-0.000758151233 +booster[361]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000233955958 + 2:leaf=-0.00184503128 +booster[362]: +0:leaf=-0.000426996296 +booster[363]: +0:leaf=-0.000446441758 +booster[364]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:leaf=0.0108011803 + 2:leaf=-0.00736454781 +booster[365]: +0:leaf=0.000342538347 +booster[366]: +0:[f4<0.156659499] yes=1,no=2,missing=1 + 1:leaf=-0.0262101274 + 2:leaf=0.0341397934 +booster[367]: +0:leaf=-0.000692499685 +booster[368]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000182528325 + 2:leaf=-0.00217277068 +booster[369]: +0:leaf=-0.000343168387 +booster[370]: +0:leaf=-0.000715512258 +booster[371]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.00737469597 + 2:leaf=0.00998474658 +booster[372]: +0:leaf=0.000565514376 +booster[373]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0276759118 + 2:leaf=-0.0318637677 +booster[374]: +0:leaf=-0.00045972885 +booster[375]: +0:leaf=-0.00173896027 +booster[376]: +0:leaf=-0.000511547609 +booster[377]: +0:leaf=-0.000690569577 +booster[378]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.00658183172 + 2:leaf=0.00928693358 +booster[379]: +0:leaf=-0.000269995333 +booster[380]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.02967887 + 2:leaf=-0.02904143 +booster[381]: +0:leaf=-0.000398740725 +booster[382]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-2.96776925e-05 + 2:leaf=-0.00166243431 +booster[383]: +0:leaf=-0.000242806869 +booster[384]: +0:leaf=-0.000298453873 +booster[385]: +0:[f24<0.000133499998] yes=1,no=2,missing=1 + 1:leaf=-0.00673320564 + 2:leaf=0.00928262621 +booster[386]: +0:leaf=0.000485054712 +booster[387]: +0:[f4<0.156659499] yes=1,no=2,missing=1 + 1:leaf=-0.0254303087 + 2:leaf=0.0322777219 +booster[388]: +0:leaf=-0.000369528163 +booster[389]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-4.08665301e-06 + 2:leaf=-0.00197404972 +booster[390]: +0:leaf=-0.000181806507 +booster[391]: +0:leaf=-0.000566129223 +booster[392]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.00692597963 + 2:leaf=0.00877180882 +booster[393]: +0:leaf=0.000677736418 +booster[394]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0269744135 + 2:leaf=-0.0315187648 +booster[395]: +0:leaf=-0.000172728629 +booster[396]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000350485352 + 2:leaf=-0.00179626199 +booster[397]: +0:leaf=-0.000342352898 +booster[398]: +0:leaf=-0.000549822696 +booster[399]: +0:[f24<0.000133499998] yes=1,no=2,missing=1 + 1:leaf=-0.00644034101 + 2:leaf=0.00852924865 +booster[400]: +0:leaf=-0.000148817489 +booster[401]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0282658506 + 2:leaf=-0.0283711422 +booster[402]: +0:leaf=-0.000138927397 +booster[403]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=3.21846965e-05 + 2:leaf=-0.00138969475 +booster[404]: +0:leaf=-9.04382687e-05 +booster[405]: +0:leaf=-0.000177477836 +booster[406]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00853727385 + 2:leaf=-0.00663823076 +booster[407]: +0:leaf=0.000713433023 +booster[408]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0255247355 + 2:leaf=-0.0303860232 +booster[409]: +0:leaf=-0.000231863509 +booster[410]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000211080653 + 2:leaf=-0.0016217822 +booster[411]: +0:leaf=-0.000221864306 +booster[412]: +0:leaf=-0.000488831371 +booster[413]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.00822572503 + 2:leaf=-0.00613105996 +booster[414]: +0:leaf=-9.84560902e-05 +booster[415]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0269303899 + 2:leaf=-0.0273904111 +booster[416]: +0:leaf=-0.000281444896 +booster[417]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=0.000146842038 + 2:leaf=-0.00121902744 +booster[418]: +0:leaf=-8.955667e-06 +booster[419]: +0:leaf=-0.00010547226 +booster[420]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00761296786 + 2:leaf=-0.00570499292 +booster[421]: +0:leaf=0.000561335124 +booster[422]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0247713681 + 2:leaf=-0.0253461413 +booster[423]: +0:leaf=-0.000260291679 +booster[424]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=1.83736393e-05 + 2:leaf=-0.00144473312 +booster[425]: +0:leaf=2.47641055e-05 +booster[426]: +0:leaf=-0.000372675568 +booster[427]: +0:[f20<0.0785374939] yes=1,no=2,missing=1 + 1:leaf=0.00770797115 + 2:leaf=-0.00580160599 +booster[428]: +0:leaf=0.00110255089 +booster[429]: +0:[f24<0.000170999992] yes=1,no=2,missing=1 + 1:leaf=-0.0222204085 + 2:leaf=0.0251887869 +booster[430]: +0:leaf=-0.000323414919 +booster[431]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=4.21196528e-05 + 2:leaf=-0.00168130337 +booster[432]: +0:leaf=3.67578468e-05 +booster[433]: +0:leaf=-0.000564014423 +booster[434]: +0:[f7<0.915627956] yes=1,no=2,missing=1 + 1:leaf=0.00768002262 + 2:leaf=-0.00560521148 +booster[435]: +0:leaf=0.00124937424 +booster[436]: +0:[f10<0.0534910001] yes=1,no=2,missing=1 + 1:leaf=-0.0239140019 + 2:leaf=0.0226371102 +booster[437]: +0:leaf=-0.000462020747 +booster[438]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000121745557 + 2:leaf=-0.00181952142 +booster[439]: +0:leaf=-7.69680773e-05 +booster[440]: +0:leaf=-0.00074166368 +booster[441]: +0:[f20<0.0785374939] yes=1,no=2,missing=1 + 1:leaf=0.00748315826 + 2:leaf=-0.00589202857 +booster[442]: +0:leaf=0.00115025765 +booster[443]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=0.0217169244 + 2:leaf=-0.0243045632 +booster[444]: +0:leaf=-0.000168732455 +booster[445]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.00029865533 + 2:leaf=-0.00153311738 +booster[446]: +0:leaf=-3.96697715e-06 +booster[447]: +0:leaf=-0.000454881578 +booster[448]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00589667214 + 2:leaf=0.00750613213 +booster[449]: +0:leaf=0.000553416845 +booster[450]: +0:[f24<0.000170999992] yes=1,no=2,missing=1 + 1:leaf=-0.0221219547 + 2:leaf=0.0252107941 +booster[451]: +0:leaf=-0.000232181628 +booster[452]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000222822549 + 2:leaf=-0.00111158227 +booster[453]: +0:leaf=-6.38529718e-06 +booster[454]: +0:leaf=-0.000167869061 +booster[455]: +0:[f9<0.00578700006] yes=1,no=2,missing=1 + 1:leaf=0.00768521661 + 2:leaf=-0.00574428402 +booster[456]: +0:leaf=0.000643735053 +booster[457]: +0:[f10<0.0534910001] yes=1,no=2,missing=1 + 1:leaf=-0.0234808158 + 2:leaf=0.0220985748 +booster[458]: +0:leaf=-0.000297206541 +booster[459]: +0:[f10<0.0526819974] yes=1,no=2,missing=1 + 1:leaf=-0.000261865644 + 2:leaf=-0.00138148107 +booster[460]: +0:leaf=3.23569147e-05 +booster[461]: +0:leaf=-0.000390585919 +booster[462]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.00575203309 + 2:leaf=0.00714953337 +booster[463]: +0:leaf=0.000748094579 +booster[464]: +0:[f24<0.000170999992] yes=1,no=2,missing=1 + 1:leaf=-0.0212528855 + 2:leaf=0.0244617518 +booster[465]: +0:leaf=-0.000112273687 +booster[466]: +0:leaf=-0.00110590202 +booster[467]: +0:leaf=-6.21840663e-05 +booster[468]: +0:leaf=-0.000173701454 +booster[469]: +0:[f9<0.00578700006] yes=1,no=2,missing=1 + 1:leaf=0.00762263732 + 2:leaf=-0.00594651466 +booster[470]: +0:leaf=0.000792220933 +booster[471]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=0.021751998 + 2:leaf=-0.0240183566 +booster[472]: +0:leaf=-0.000187247468 +booster[473]: +0:leaf=-0.00116984162 +booster[474]: +0:leaf=-2.31084414e-05 +booster[475]: +0:leaf=-0.000384823798 +booster[476]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00701356679 + 2:leaf=-0.00537522975 +booster[477]: +0:leaf=0.000261656649 +booster[478]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0223625135 + 2:leaf=-0.0225201063 +booster[479]: +0:leaf=-0.000253708306 +booster[480]: +0:leaf=-0.000839657558 +booster[481]: +0:leaf=-4.18323689e-05 +booster[482]: +0:leaf=-0.000151415443 +booster[483]: +0:[f9<0.00578700006] yes=1,no=2,missing=1 + 1:leaf=0.00762426248 + 2:leaf=-0.00596148381 +booster[484]: +0:leaf=0.000749706582 +booster[485]: +0:[f10<0.0534910001] yes=1,no=2,missing=1 + 1:leaf=-0.023300549 + 2:leaf=0.0216859486 +booster[486]: +0:leaf=-0.000309036026 +booster[487]: +0:leaf=-0.000932581432 +booster[488]: +0:leaf=-2.91415981e-05 +booster[489]: +0:leaf=-0.000340329163 +booster[490]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00591711281 + 2:leaf=0.00694264984 +booster[491]: +0:leaf=0.000834465085 +booster[492]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=0.0211788844 + 2:leaf=-0.023541322 +booster[493]: +0:leaf=-0.000129826891 +booster[494]: +0:leaf=-0.000929757429 +booster[495]: +0:leaf=-0.00012484804 +booster[496]: +0:leaf=-0.000131142937 +booster[497]: +0:[f9<0.00578700006] yes=1,no=2,missing=1 + 1:leaf=0.00687980931 + 2:leaf=-0.0056577092 +booster[498]: +0:leaf=0.000185410434 +booster[499]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0216842592 + 2:leaf=-0.0221985802 +booster[500]: +0:leaf=-0.000115468079 +booster[501]: +0:leaf=-0.000609309762 +booster[502]: +0:leaf=1.87527548e-05 +booster[503]: +0:leaf=0.00010842942 +booster[504]: +0:[f9<0.00739699975] yes=1,no=2,missing=1 + 1:leaf=-0.00566727715 + 2:leaf=0.00681299577 +booster[505]: +0:leaf=0.000798491645 +booster[506]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0208537057 + 2:leaf=0.0224859621 +booster[507]: +0:leaf=-0.000186852165 +booster[508]: +0:leaf=-0.000831162557 +booster[509]: +0:leaf=-0.000104259016 +booster[510]: +0:leaf=-0.000164013734 +booster[511]: +0:[f9<0.00578700006] yes=1,no=2,missing=1 + 1:leaf=0.00660889642 + 2:leaf=-0.00586439064 +booster[512]: +0:leaf=0.00072839245 +booster[513]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=0.020644445 + 2:leaf=-0.0229746159 +booster[514]: +0:leaf=2.09849168e-05 +booster[515]: +0:leaf=-0.000664458494 +booster[516]: +0:leaf=-7.76168454e-05 +booster[517]: +0:leaf=-0.000143447629 +booster[518]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00706159929 + 2:leaf=-0.00620809104 +booster[519]: +0:leaf=0.000226328921 +booster[520]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0212366395 + 2:leaf=-0.021822188 +booster[521]: +0:leaf=-5.68242103e-05 +booster[522]: +0:leaf=-0.000402415899 +booster[523]: +0:leaf=-8.55120888e-05 +booster[524]: +0:leaf=6.20245264e-05 +booster[525]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00567534333 + 2:leaf=0.0064292755 +booster[526]: +0:leaf=0.000678623619 +booster[527]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=0.0198875889 + 2:leaf=-0.0222527999 +booster[528]: +0:leaf=-0.000129836088 +booster[529]: +0:leaf=-0.000527083525 +booster[530]: +0:leaf=-5.6833971e-05 +booster[531]: +0:leaf=-0.000130234388 +booster[532]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00628947979 + 2:leaf=-0.00540192518 +booster[533]: +0:leaf=7.61947522e-05 +booster[534]: +0:[f10<0.0534910001] yes=1,no=2,missing=1 + 1:leaf=-0.022082638 + 2:leaf=0.0199321881 +booster[535]: +0:leaf=-0.000113012902 +booster[536]: +0:leaf=-0.00026625357 +booster[537]: +0:leaf=7.33669949e-05 +booster[538]: +0:leaf=9.69769826e-05 +booster[539]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00583189866 + 2:leaf=-0.00536611862 +booster[540]: +0:leaf=9.48137676e-05 +booster[541]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.020372292 + 2:leaf=-0.0214444213 +booster[542]: +0:leaf=4.00850477e-05 +booster[543]: +0:leaf=-0.000220667906 +booster[544]: +0:leaf=0.000112945156 +booster[545]: +0:leaf=0.000319564046 +booster[546]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00513453409 + 2:leaf=0.00557035301 +booster[547]: +0:leaf=0.000549520424 +booster[548]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0197256655 + 2:leaf=0.0204618294 +booster[549]: +0:leaf=-3.28995884e-05 +booster[550]: +0:leaf=-0.000362269668 +booster[551]: +0:leaf=0.000116878939 +booster[552]: +0:leaf=0.000105070423 +booster[553]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00525764748 + 2:leaf=-0.00513991341 +booster[554]: +0:leaf=0.000520983129 +booster[555]: +0:[f0<1.7345686] yes=1,no=2,missing=1 + 1:leaf=0.0185674001 + 2:leaf=-0.0206234138 +booster[556]: +0:leaf=0.000137588009 +booster[557]: +0:leaf=-0.000321929168 +booster[558]: +0:leaf=0.000116582167 +booster[559]: +0:leaf=9.27878791e-05 +booster[560]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0052077882 + 2:leaf=0.00546524068 +booster[561]: +0:leaf=6.44964312e-05 +booster[562]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0198164061 + 2:leaf=-0.020932246 +booster[563]: +0:leaf=6.13850789e-05 +booster[564]: +0:leaf=-0.000103801845 +booster[565]: +0:leaf=9.58462406e-05 +booster[566]: +0:leaf=0.0002909553 +booster[567]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00537653686 + 2:leaf=-0.00505396258 +booster[568]: +0:leaf=0.000524506031 +booster[569]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0201274045 + 2:leaf=0.0184648167 +booster[570]: +0:leaf=5.2703781e-05 +booster[571]: +0:leaf=-0.000333698001 +booster[572]: +0:leaf=0.000110581022 +booster[573]: +0:leaf=5.86801507e-05 +booster[574]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00550995441 + 2:leaf=0.0057081054 +booster[575]: +0:leaf=0.00065563625 +booster[576]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.018048374 + 2:leaf=-0.0191085469 +booster[577]: +0:leaf=0.000173975524 +booster[578]: +0:leaf=-0.00048957963 +booster[579]: +0:leaf=0.000139573473 +booster[580]: +0:leaf=1.58602015e-05 +booster[581]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00509863999 + 2:leaf=0.00529324822 +booster[582]: +0:leaf=0.00100430776 +booster[583]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0184004456 + 2:leaf=0.0188757256 +booster[584]: +0:leaf=0.000156628856 +booster[585]: +0:leaf=-0.000657596625 +booster[586]: +0:leaf=0.000151136919 +booster[587]: +0:leaf=-0.000176608708 +booster[588]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.005151527 + 2:leaf=-0.00519652152 +booster[589]: +0:leaf=0.000927674759 +booster[590]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0168894641 + 2:leaf=-0.0179421417 +booster[591]: +0:leaf=0.00029429837 +booster[592]: +0:leaf=-0.000585181348 +booster[593]: +0:leaf=0.000146586113 +booster[594]: +0:leaf=-0.000163533157 +booster[595]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0052249888 + 2:leaf=0.00519657321 +booster[596]: +0:leaf=0.00131123536 +booster[597]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0171723403 + 2:leaf=0.0176490359 +booster[598]: +0:leaf=0.000201503295 +booster[599]: +0:leaf=-0.000732374843 +booster[600]: +0:leaf=3.7559581e-05 +booster[601]: +0:leaf=-0.0003167213 +booster[602]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00494396407 + 2:leaf=-0.00517771346 +booster[603]: +0:leaf=0.00119839958 +booster[604]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0158739518 + 2:leaf=-0.0168428477 +booster[605]: +0:leaf=0.000325002766 +booster[606]: +0:leaf=-0.00065401668 +booster[607]: +0:leaf=4.65604062e-05 +booster[608]: +0:leaf=-0.000290574972 +booster[609]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00529995514 + 2:leaf=0.00511067128 +booster[610]: +0:leaf=0.00152656995 +booster[611]: +0:[f5<0.546952963] yes=1,no=2,missing=1 + 1:leaf=-0.0162963625 + 2:leaf=0.0171627067 +booster[612]: +0:leaf=0.000230178004 +booster[613]: +0:leaf=-0.000782274699 +booster[614]: +0:leaf=-5.01900795e-05 +booster[615]: +0:leaf=-0.000420856639 +booster[616]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00524560409 + 2:leaf=-0.00519342953 +booster[617]: +0:leaf=0.000926145934 +booster[618]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0159993581 + 2:leaf=0.0166218169 +booster[619]: +0:leaf=0.000202822688 +booster[620]: +0:leaf=-0.000569340074 +booster[621]: +0:leaf=-5.01971772e-05 +booster[622]: +0:leaf=-0.000225690092 +booster[623]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00508558843 + 2:leaf=-0.00528849894 +booster[624]: +0:leaf=0.000943817839 +booster[625]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.015834637 + 2:leaf=-0.0166254267 +booster[626]: +0:leaf=0.000254056213 +booster[627]: +0:leaf=-0.000514080573 +booster[628]: +0:leaf=-0.000145787519 +booster[629]: +0:leaf=-0.000197567904 +booster[630]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00495939516 + 2:leaf=-0.0050748596 +booster[631]: +0:leaf=0.00119443785 +booster[632]: +0:[f7<0.940328479] yes=1,no=2,missing=1 + 1:leaf=0.0150971347 + 2:leaf=-0.0157098211 +booster[633]: +0:leaf=0.000165757461 +booster[634]: +0:leaf=-0.000577873318 +booster[635]: +0:leaf=-0.000112695932 +booster[636]: +0:leaf=-0.000312930439 +booster[637]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00533748558 + 2:leaf=0.00523180328 +booster[638]: +0:leaf=0.000903323002 +booster[639]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0149127161 + 2:leaf=-0.0156099917 +booster[640]: +0:leaf=0.000178445887 +booster[641]: +0:leaf=-0.000455648929 +booster[642]: +0:leaf=-8.01237766e-05 +booster[643]: +0:leaf=-0.000241957896 +booster[644]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00491735665 + 2:leaf=-0.00494481297 +booster[645]: +0:leaf=0.00114455831 +booster[646]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0152300922 + 2:leaf=0.015652366 +booster[647]: +0:leaf=0.0001592224 +booster[648]: +0:leaf=-0.000590471027 +booster[649]: +0:leaf=-4.31874832e-05 +booster[650]: +0:leaf=-0.000373931951 +booster[651]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00537275057 + 2:leaf=0.00513248239 +booster[652]: +0:leaf=0.00113235763 +booster[653]: +0:[f7<0.940328479] yes=1,no=2,missing=1 + 1:leaf=0.0142240208 + 2:leaf=-0.0145985587 +booster[654]: +0:leaf=0.000210723592 +booster[655]: +0:leaf=-0.000531500904 +booster[656]: +0:leaf=-0.00013418711 +booster[657]: +0:leaf=-0.000329889328 +booster[658]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00508450624 + 2:leaf=0.0048623085 +booster[659]: +0:leaf=0.000770290557 +booster[660]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0140091861 + 2:leaf=0.0144927455 +booster[661]: +0:leaf=0.000274178456 +booster[662]: +0:leaf=-0.000416786264 +booster[663]: +0:leaf=1.05586223e-05 +booster[664]: +0:leaf=-0.000271278172 +booster[665]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00478744926 + 2:leaf=-0.00513770012 +booster[666]: +0:leaf=0.000707569474 +booster[667]: +0:[f2<1.63466203] yes=1,no=2,missing=1 + 1:leaf=0.0138641968 + 2:leaf=-0.0136123514 +booster[668]: +0:leaf=0.000365658168 +booster[669]: +0:leaf=-0.000373467308 +booster[670]: +0:leaf=3.10188952e-05 +booster[671]: +0:leaf=-0.000245706586 +booster[672]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00499447016 + 2:leaf=-0.00528739113 +booster[673]: +0:leaf=0.000363924424 +booster[674]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0129221762 + 2:leaf=0.0135144452 +booster[675]: +0:leaf=0.000300038606 +booster[676]: +0:leaf=-0.000219560156 +booster[677]: +0:leaf=1.46133389e-05 +booster[678]: +0:leaf=-9.31361865e-05 +booster[679]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00518680969 + 2:leaf=0.00473901583 +booster[680]: +0:leaf=0.000327629125 +booster[681]: +0:[f5<0.532716513] yes=1,no=2,missing=1 + 1:leaf=-0.0128254583 + 2:leaf=0.0129994862 +booster[682]: +0:leaf=0.000322211708 +booster[683]: +0:leaf=-0.000125873295 +booster[684]: +0:leaf=3.21379594e-05 +booster[685]: +0:leaf=-5.57216408e-05 +booster[686]: +0:[f20<0.0874425024] yes=1,no=2,missing=1 + 1:leaf=0.00495622028 + 2:leaf=-0.00513542909 +booster[687]: +0:leaf=-5.38684035e-05 +booster[688]: +0:[f2<1.63466203] yes=1,no=2,missing=1 + 1:leaf=0.0124696037 + 2:leaf=-0.0122180404 +booster[689]: +0:leaf=0.000291274744 +booster[690]: +0:leaf=-1.71240627e-05 +booster[691]: +0:leaf=4.73354485e-05 +booster[692]: +0:leaf=7.10364329e-05 +booster[693]: +0:[f24<0.000126500003] yes=1,no=2,missing=1 + 1:leaf=0.00501296483 + 2:leaf=-0.00514624175 +booster[694]: +0:leaf=-0.000280839187 +booster[695]: +0:[f4<0.15546] yes=1,no=2,missing=1 + 1:leaf=-0.0120512247 + 2:leaf=0.0126737077 +booster[696]: +0:leaf=0.000231634462 +booster[697]: +0:leaf=8.53584788e-05 +booster[698]: +0:leaf=2.69653374e-05 +booster[699]: +0:leaf=0.000183192053 diff --git a/src/ck-ldb/XGBoost/model/model.xml b/src/ck-ldb/XGBoost/model/model.xml new file mode 100644 index 0000000000..a7dd393491 --- /dev/null +++ b/src/ck-ldb/XGBoost/model/model.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/ck-ldb/XGBoost/model_tree/model.bin b/src/ck-ldb/XGBoost/model_tree/model.bin new file mode 100644 index 0000000000..510e5090a9 Binary files /dev/null and b/src/ck-ldb/XGBoost/model_tree/model.bin differ diff --git a/src/ck-ldb/XGBoost/model_tree/model.txt b/src/ck-ldb/XGBoost/model_tree/model.txt new file mode 100644 index 0000000000..ba19ea34ec --- /dev/null +++ b/src/ck-ldb/XGBoost/model_tree/model.txt @@ -0,0 +1,1114 @@ +booster[0]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f7<0.971173525] yes=3,no=4,missing=3 + 3:leaf=-0.198701322 + 4:leaf=-7.66345476e-09 + 2:leaf=0.179999992 +booster[1]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=-7.66345476e-09 + 4:leaf=-0.197260305 + 2:leaf=0.124137931 +booster[2]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.387692332 + 4:leaf=-0.0360000096 + 2:[f0<1.51707149] yes=5,no=6,missing=5 + 5:leaf=-7.66345476e-09 + 6:leaf=-0.128571451 +booster[3]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f10<0.0364575014] yes=3,no=4,missing=3 + 3:leaf=0.0120590618 + 4:leaf=-0.179594636 + 2:leaf=0.149066582 +booster[4]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f3<0.109404996] yes=3,no=4,missing=3 + 3:leaf=0.0125148315 + 4:leaf=-0.177867249 + 2:leaf=0.100076787 +booster[5]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.277291745 + 4:leaf=-0.0311092753 + 2:[f1<0.154194504] yes=5,no=6,missing=5 + 5:leaf=0.0108822901 + 6:leaf=-0.125014484 +booster[6]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f13<160096.094] yes=3,no=4,missing=3 + 3:leaf=0.0272014868 + 4:leaf=-0.165621221 + 2:leaf=0.121714808 +booster[7]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f3<0.109404996] yes=3,no=4,missing=3 + 3:leaf=0.0110544665 + 4:leaf=-0.161556736 + 2:leaf=0.0811008289 +booster[8]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.22448577 + 4:leaf=-0.0261643752 + 2:[f8<0.0186024997] yes=5,no=6,missing=5 + 5:leaf=-0.12171831 + 6:leaf=0.0176560245 +booster[9]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.149437025 + 2:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=-0.0546545312 + 4:leaf=0.138748124 +booster[10]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=0.0156723354 + 4:leaf=-0.149525926 + 2:leaf=0.0649449751 +booster[11]: +0:[f3<0.133477509] yes=1,no=2,missing=1 + 1:leaf=-0.0728977993 + 2:[f2<1.64043951] yes=3,no=4,missing=3 + 3:leaf=0.224277392 + 4:[f7<0.933937013] yes=5,no=6,missing=5 + 5:leaf=0.0996352732 + 6:leaf=-0.120964602 +booster[12]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f10<0.0364575014] yes=3,no=4,missing=3 + 3:leaf=0.0418989509 + 4:leaf=-0.147003695 + 2:leaf=0.099065803 +booster[13]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.0842332914 + 2:[f3<0.109404996] yes=3,no=4,missing=3 + 3:leaf=0.0719235018 + 4:leaf=-0.159311131 +booster[14]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.174554884 + 4:leaf=-0.0184891354 + 2:[f1<0.154194504] yes=5,no=6,missing=5 + 5:leaf=0.015282359 + 6:leaf=-0.111367837 +booster[15]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.13107419 + 2:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=-0.049212303 + 4:leaf=0.12069267 +booster[16]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=0.0159080792 + 4:leaf=-0.131699249 + 2:leaf=0.0510036945 +booster[17]: +0:[f3<0.133477509] yes=1,no=2,missing=1 + 1:leaf=-0.0676268488 + 2:[f2<1.64043951] yes=3,no=4,missing=3 + 3:leaf=0.192243785 + 4:[f7<0.933937013] yes=5,no=6,missing=5 + 5:leaf=0.0702240989 + 6:leaf=-0.111286312 +booster[18]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f13<160096.094] yes=3,no=4,missing=3 + 3:leaf=0.0382745303 + 4:leaf=-0.131645694 + 2:leaf=0.0817226991 +booster[19]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.0761151388 + 2:[f3<0.109404996] yes=3,no=4,missing=3 + 3:leaf=0.0641365349 + 4:leaf=-0.146276668 +booster[20]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f23<0.0519265011] yes=3,no=4,missing=3 + 3:leaf=-0.0399962738 + 4:[f24<0.000255000021] yes=7,no=8,missing=7 + 7:leaf=0.165105075 + 8:leaf=0.0296167918 + 2:[f8<0.0186024997] yes=5,no=6,missing=5 + 5:leaf=-0.105792291 + 6:leaf=0.0201617014 +booster[21]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.114744313 + 2:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=-0.049021177 + 4:leaf=0.109508991 +booster[22]: +0:[f20<0.0697354972] yes=1,no=2,missing=1 + 1:leaf=-0.121899411 + 2:[f7<0.946264505] yes=3,no=4,missing=3 + 3:[f23<0.213180989] yes=5,no=6,missing=5 + 5:leaf=-0.10920728 + 6:leaf=0.0189256221 + 4:leaf=0.144378871 +booster[23]: +0:[f3<0.133477509] yes=1,no=2,missing=1 + 1:leaf=-0.0601543449 + 2:[f2<1.64043951] yes=3,no=4,missing=3 + 3:leaf=0.168739766 + 4:[f7<0.933937013] yes=5,no=6,missing=5 + 5:leaf=0.0521681644 + 6:leaf=-0.102132738 +booster[24]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f10<0.0417499989] yes=3,no=4,missing=3 + 3:leaf=0.0270703807 + 4:leaf=-0.119573615 + 2:leaf=0.069903411 +booster[25]: +0:[f20<0.0697354972] yes=1,no=2,missing=1 + 1:leaf=-0.111961737 + 2:[f7<0.946264505] yes=3,no=4,missing=3 + 3:[f21<0.167128503] yes=5,no=6,missing=5 + 5:leaf=0.0130506409 + 6:leaf=-0.102238551 + 4:leaf=0.129361868 +booster[26]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:[f7<0.946264505] yes=3,no=4,missing=3 + 3:leaf=0.13329643 + 4:leaf=-0.0205294006 + 2:[f21<0.168061003] yes=5,no=6,missing=5 + 5:leaf=0.0206330102 + 6:leaf=-0.0967736393 +booster[27]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.100588977 + 2:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=-0.0444557741 + 4:leaf=0.0951331779 +booster[28]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:[f5<0.461994499] yes=3,no=4,missing=3 + 3:leaf=-0.00608266657 + 4:leaf=-0.111762799 + 2:[f10<0.0576969981] yes=5,no=6,missing=5 + 5:leaf=0.081170164 + 6:leaf=-0.0225518942 +booster[29]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:[f8<0.00882100035] yes=3,no=4,missing=3 + 3:leaf=-0.0226107482 + 4:leaf=0.152015224 + 2:[f8<0.0184535012] yes=5,no=6,missing=5 + 5:leaf=0.0654942393 + 6:leaf=-0.113668017 +booster[30]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f2<1.64676595] yes=3,no=4,missing=3 + 3:leaf=-0.107882626 + 4:leaf=0.0236736499 + 2:leaf=0.0550420508 +booster[31]: +0:[f5<0.396535516] yes=1,no=2,missing=1 + 1:leaf=0.0632440746 + 2:[f1<0.155913994] yes=3,no=4,missing=3 + 3:leaf=0.0508550704 + 4:leaf=-0.118616074 +booster[32]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:[f8<0.00882100035] yes=3,no=4,missing=3 + 3:leaf=-0.0237092506 + 4:leaf=0.139359742 + 2:[f8<0.0184535012] yes=5,no=6,missing=5 + 5:leaf=0.0604650564 + 6:leaf=-0.106385611 +booster[33]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=-0.0893119276 + 2:[f13<311865.625] yes=3,no=4,missing=3 + 3:leaf=0.0791049004 + 4:leaf=-0.0488597527 +booster[34]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:[f21<0.123142004] yes=3,no=4,missing=3 + 3:leaf=-0.01602442 + 4:leaf=-0.0892419815 + 2:[f0<1.53059101] yes=5,no=6,missing=5 + 5:leaf=0.0687144399 + 6:leaf=-0.0126934396 +booster[35]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:[f8<0.00884400029] yes=3,no=4,missing=3 + 3:leaf=-0.0147426492 + 4:leaf=0.129181042 + 2:[f8<0.0184535012] yes=5,no=6,missing=5 + 5:leaf=0.0541769154 + 6:leaf=-0.0997898504 +booster[36]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:[f2<1.64043951] yes=3,no=4,missing=3 + 3:leaf=-0.0958730429 + 4:leaf=0.0124699771 + 2:leaf=0.0476802401 +booster[37]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f23<0.171588004] yes=3,no=4,missing=3 + 3:leaf=-0.0883246362 + 4:leaf=-0.00436324906 + 2:leaf=0.0436369106 +booster[38]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f8<0.0184535012] yes=3,no=4,missing=3 + 3:leaf=0.110994987 + 4:leaf=-0.0192218907 + 2:leaf=-0.0476110838 +booster[39]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0497289412 + 2:[f10<0.0655905008] yes=3,no=4,missing=3 + 3:leaf=-0.106013477 + 4:leaf=0.028019907 +booster[40]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=-0.0641050115 + 2:leaf=0.0375997387 +booster[41]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f3<0.133477509] yes=3,no=4,missing=3 + 3:leaf=-0.0426006392 + 4:leaf=0.126670167 + 2:leaf=-0.0422940105 +booster[42]: +0:[f5<0.532716513] yes=1,no=2,missing=1 + 1:leaf=-0.0630981177 + 2:leaf=0.0355510265 +booster[43]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0575315803 + 2:leaf=0.0385887846 +booster[44]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f8<0.0184535012] yes=3,no=4,missing=3 + 3:leaf=0.102424987 + 4:leaf=-0.0185797457 + 2:leaf=-0.0441300161 +booster[45]: +0:[f2<1.64676595] yes=1,no=2,missing=1 + 1:[f24<0.000119999997] yes=3,no=4,missing=3 + 3:leaf=0.0262980629 + 4:leaf=-0.096147351 + 2:leaf=0.0492528938 +booster[46]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=-0.0563385449 + 2:leaf=0.0342738442 +booster[47]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f3<0.133477509] yes=3,no=4,missing=3 + 3:leaf=-0.0407180339 + 4:leaf=0.116368584 + 2:leaf=-0.0414163806 +booster[48]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0496869348 + 2:leaf=0.0454265848 +booster[49]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0509794354 + 2:leaf=0.036162056 +booster[50]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:[f8<0.0184535012] yes=3,no=4,missing=3 + 3:leaf=0.0959003121 + 4:leaf=-0.0226055197 + 2:leaf=-0.0407423712 +booster[51]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0492651649 + 2:leaf=-0.0463342182 +booster[52]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=-0.0520420037 + 2:leaf=0.0323857255 +booster[53]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f3<0.133477509] yes=3,no=4,missing=3 + 3:leaf=-0.0382834487 + 4:leaf=0.107452706 + 2:leaf=-0.0386869088 +booster[54]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.043637339 + 2:leaf=0.0428387374 +booster[55]: +0:[f23<0.209631994] yes=1,no=2,missing=1 + 1:leaf=-0.0402222164 + 2:leaf=0.0394450277 +booster[56]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f3<0.133477509] yes=3,no=4,missing=3 + 3:leaf=-0.0350772813 + 4:leaf=0.100938626 + 2:leaf=-0.0362219028 +booster[57]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0471990854 + 2:leaf=-0.0408213511 +booster[58]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0473361351 + 2:leaf=0.031557709 +booster[59]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:[f8<0.0184535012] yes=3,no=4,missing=3 + 3:leaf=0.0828246623 + 4:leaf=-0.0108357314 + 2:leaf=-0.0367734358 +booster[60]: +0:[f2<1.64676595] yes=1,no=2,missing=1 + 1:leaf=-0.0380337574 + 2:leaf=0.046664644 +booster[61]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0438522175 + 2:leaf=0.0314899832 +booster[62]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:[f4<0.149594992] yes=3,no=4,missing=3 + 3:leaf=0.0939746201 + 4:leaf=-0.0288005415 + 2:leaf=-0.036107637 +booster[63]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0404726006 + 2:leaf=0.0436683148 +booster[64]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=-0.0472128615 + 2:leaf=0.0263084099 +booster[65]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=0.0408378318 + 2:leaf=-0.0329739861 +booster[66]: +0:[f10<0.0524355024] yes=1,no=2,missing=1 + 1:leaf=0.0452032462 + 2:leaf=-0.0354760922 +booster[67]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=-0.0451151431 + 2:leaf=0.024468435 +booster[68]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0447802544 + 2:leaf=-0.0262028649 +booster[69]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0385554023 + 2:leaf=0.0438692868 +booster[70]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0418308601 + 2:leaf=0.0308467504 +booster[71]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=0.0380543768 + 2:leaf=-0.0325076394 +booster[72]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0348475203 + 2:leaf=0.0412190445 +booster[73]: +0:[f5<0.560186028] yes=1,no=2,missing=1 + 1:leaf=0.0245927013 + 2:leaf=-0.0441254638 +booster[74]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0421493612 + 2:leaf=-0.0272168685 +booster[75]: +0:[f13<311865.625] yes=1,no=2,missing=1 + 1:leaf=0.0331484787 + 2:leaf=-0.0402024537 +booster[76]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.039360866 + 2:leaf=0.0270265713 +booster[77]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=0.0334241837 + 2:leaf=-0.0366313718 +booster[78]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0337406211 + 2:leaf=0.0409172289 +booster[79]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=-0.0406263433 + 2:leaf=0.0251338333 +booster[80]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:leaf=0.0338337757 + 2:leaf=-0.033880163 +booster[81]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.030190289 + 2:leaf=0.036358308 +booster[82]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0353001915 + 2:leaf=0.0269742981 +booster[83]: +0:[f2<1.64043951] yes=1,no=2,missing=1 + 1:leaf=0.0339983553 + 2:leaf=-0.0350486636 +booster[84]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=-0.0288479701 + 2:leaf=0.0362758934 +booster[85]: +0:[f4<0.152349502] yes=1,no=2,missing=1 + 1:leaf=-0.0383065045 + 2:leaf=0.0249770805 +booster[86]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=0.0318743028 + 2:leaf=-0.0322733968 +booster[87]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0286728684 + 2:leaf=0.036352288 +booster[88]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0338026956 + 2:leaf=0.0258499105 +booster[89]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0351781435 + 2:leaf=-0.0270371847 +booster[90]: +0:[f0<1.74346054] yes=1,no=2,missing=1 + 1:leaf=-0.026722623 + 2:leaf=0.0346629582 +booster[91]: +0:[f13<421320] yes=1,no=2,missing=1 + 1:leaf=-0.0315333754 + 2:leaf=0.0280425493 +booster[92]: +0:[f7<0.921817541] yes=1,no=2,missing=1 + 1:leaf=0.030203199 + 2:leaf=-0.0319130309 +booster[93]: +0:[f8<0.0185180008] yes=1,no=2,missing=1 + 1:leaf=-0.0280027073 + 2:leaf=0.0358630307 +booster[94]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0312652215 + 2:leaf=0.0241627265 +booster[95]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:leaf=0.0288654137 + 2:leaf=-0.0322019085 +booster[96]: +0:[f2<1.63466203] yes=1,no=2,missing=1 + 1:leaf=-0.0223759431 + 2:leaf=0.0275650527 +booster[97]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0292341132 + 2:leaf=0.0242013633 +booster[98]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0305833817 + 2:leaf=0.032267306 +booster[99]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0271914732 + 2:leaf=-0.0217121318 +booster[100]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0292045772 + 2:leaf=0.0234579686 +booster[101]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0333315656 + 2:leaf=-0.0279940441 +booster[102]: +0:[f2<1.63466203] yes=1,no=2,missing=1 + 1:leaf=-0.0204894617 + 2:leaf=0.0257890001 +booster[103]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0276755895 + 2:leaf=0.0231272019 +booster[104]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.0279322285 + 2:leaf=0.0332402959 +booster[105]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0253511406 + 2:leaf=-0.0198333245 +booster[106]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0273651052 + 2:leaf=0.0217175651 +booster[107]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:leaf=0.0281744357 + 2:leaf=-0.0326640382 +booster[108]: +0:[f2<1.63466203] yes=1,no=2,missing=1 + 1:leaf=-0.0193933696 + 2:leaf=0.0243762322 +booster[109]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0258150361 + 2:leaf=0.0223103203 +booster[110]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0317895263 + 2:leaf=-0.0276328977 +booster[111]: +0:[f8<0.018486999] yes=1,no=2,missing=1 + 1:leaf=-0.0199843198 + 2:leaf=0.0239601582 +booster[112]: +0:[f7<0.946264505] yes=1,no=2,missing=1 + 1:leaf=-0.0248791967 + 2:leaf=0.0215863604 +booster[113]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.0269692745 + 2:leaf=0.031429965 +booster[114]: +0:[f13<227453.281] yes=1,no=2,missing=1 + 1:leaf=0.0250103436 + 2:leaf=-0.0201246999 +booster[115]: +0:[f23<0.106878996] yes=1,no=2,missing=1 + 1:leaf=-0.0252451133 + 2:leaf=0.0213669632 +booster[116]: +0:[f8<0.0184535012] yes=1,no=2,missing=1 + 1:leaf=0.0270183589 + 2:leaf=-0.0318871513 +booster[117]: +0:[f2<1.62952948] yes=1,no=2,missing=1 + 1:leaf=-0.0192808639 + 2:leaf=0.0234366152 +booster[118]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0252213459 + 2:leaf=0.0217977241 +booster[119]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0303312968 + 2:leaf=-0.0271879286 +booster[120]: +0:[f8<0.018486999] yes=1,no=2,missing=1 + 1:leaf=-0.0193757936 + 2:leaf=0.0228794608 +booster[121]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0238665026 + 2:leaf=0.0203842297 +booster[122]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.0265514646 + 2:leaf=0.0308115594 +booster[123]: +0:[f8<0.018486999] yes=1,no=2,missing=1 + 1:leaf=-0.0187139753 + 2:leaf=0.0225284025 +booster[124]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=-0.0230806917 + 2:leaf=0.0190012008 +booster[125]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0312781744 + 2:leaf=-0.0256155953 +booster[126]: +0:[f2<1.58247757] yes=1,no=2,missing=1 + 1:leaf=-0.0186091438 + 2:leaf=0.0211013686 +booster[127]: +0:[f7<0.929826498] yes=1,no=2,missing=1 + 1:leaf=-0.0203351118 + 2:leaf=0.0172823593 +booster[128]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.0265792571 + 2:leaf=0.0313167758 +booster[129]: +0:[f2<1.58247757] yes=1,no=2,missing=1 + 1:leaf=-0.0166659653 + 2:leaf=0.0194816999 +booster[130]: +0:leaf=-0.00246437383 +booster[131]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.030434709 + 2:leaf=-0.0269040447 +booster[132]: +0:[f2<1.58247757] yes=1,no=2,missing=1 + 1:leaf=-0.0156762581 + 2:leaf=0.01818523 +booster[133]: +0:leaf=-0.00233267224 +booster[134]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0273155216 + 2:leaf=0.0284295287 +booster[135]: +0:[f2<1.58247757] yes=1,no=2,missing=1 + 1:leaf=-0.0140627166 + 2:leaf=0.0168366916 +booster[136]: +0:leaf=-0.0024298816 +booster[137]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0307210125 + 2:leaf=-0.0251729526 +booster[138]: +0:[f0<1.72732759] yes=1,no=2,missing=1 + 1:leaf=-0.0133292889 + 2:leaf=0.0148112932 +booster[139]: +0:leaf=-0.00173481274 +booster[140]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0286338311 + 2:leaf=-0.0250121895 +booster[141]: +0:[f0<1.72732759] yes=1,no=2,missing=1 + 1:leaf=-0.0125979176 + 2:leaf=0.0139006563 +booster[142]: +0:leaf=-0.00168526988 +booster[143]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.0244014729 + 2:leaf=0.0290670637 +booster[144]: +0:leaf=0.00113329093 +booster[145]: +0:leaf=-0.00205289409 +booster[146]: +0:[f9<0.00295849983] yes=1,no=2,missing=1 + 1:leaf=0.0298241694 + 2:leaf=-0.0245273355 +booster[147]: +0:leaf=0.000399451354 +booster[148]: +0:leaf=-0.00139221502 +booster[149]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.023189405 + 2:leaf=0.0278926287 +booster[150]: +0:leaf=0.000707354397 +booster[151]: +0:leaf=-0.00174667605 +booster[152]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0279088281 + 2:leaf=-0.0240674037 +booster[153]: +0:leaf=0.00061979756 +booster[154]: +0:leaf=-0.00164528436 +booster[155]: +0:[f21<0.167413503] yes=1,no=2,missing=1 + 1:leaf=-0.0220694821 + 2:leaf=0.026659172 +booster[156]: +0:leaf=0.000872368691 +booster[157]: +0:leaf=-0.00193449587 +booster[158]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0265618563 + 2:leaf=-0.022820266 +booster[159]: +0:leaf=0.000752529246 +booster[160]: +0:leaf=-0.00179267861 +booster[161]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0231125038 + 2:leaf=0.0245999955 +booster[162]: +0:leaf=0.000960221456 +booster[163]: +0:leaf=-0.00187517365 +booster[164]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0250141099 + 2:leaf=-0.0214993227 +booster[165]: +0:leaf=0.00081894797 +booster[166]: +0:leaf=-0.00173158653 +booster[167]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0217984337 + 2:leaf=0.0232080966 +booster[168]: +0:leaf=0.000992030022 +booster[169]: +0:leaf=-0.00180214911 +booster[170]: +0:[f4<0.149594992] yes=1,no=2,missing=1 + 1:leaf=0.0235922318 + 2:leaf=-0.0202543419 +booster[171]: +0:leaf=0.000838625769 +booster[172]: +0:leaf=-0.00165967655 +booster[173]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0205618106 + 2:leaf=0.0219278056 +booster[174]: +0:leaf=0.000986086088 +booster[175]: +0:leaf=-0.0017214421 +booster[176]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0190220848 + 2:leaf=0.0202512816 +booster[177]: +0:leaf=0.00109119096 +booster[178]: +0:leaf=-0.00175197236 +booster[179]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.017597476 + 2:leaf=0.0187051892 +booster[180]: +0:leaf=0.00116173737 +booster[181]: +0:leaf=-0.00175737555 +booster[182]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0162795037 + 2:leaf=0.0172792822 +booster[183]: +0:leaf=0.00120426016 +booster[184]: +0:leaf=-0.0017427525 +booster[185]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.0153004015 + 2:leaf=0.0169007163 +booster[186]: +0:leaf=0.00133043947 +booster[187]: +0:leaf=-0.00186008902 +booster[188]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.0168296192 + 2:leaf=-0.0151074845 +booster[189]: +0:leaf=0.00108451198 +booster[190]: +0:leaf=-0.00160341768 +booster[191]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0154020786 + 2:leaf=0.0162608512 +booster[192]: +0:leaf=0.00112533593 +booster[193]: +0:leaf=-0.00159676396 +booster[194]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.0163103081 + 2:leaf=-0.0146868704 +booster[195]: +0:leaf=0.000908403948 +booster[196]: +0:leaf=-0.00137500977 +booster[197]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0150153898 + 2:leaf=0.0158065706 +booster[198]: +0:leaf=0.00096710358 +booster[199]: +0:leaf=-0.00139301596 +booster[200]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.0158241633 + 2:leaf=-0.0142826056 +booster[201]: +0:leaf=0.000772565079 +booster[202]: +0:leaf=-0.00119801774 +booster[203]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.0146912402 + 2:leaf=0.0160895102 +booster[204]: +0:leaf=0.00094521651 +booster[205]: +0:leaf=-0.00137537043 +booster[206]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.0152626866 + 2:leaf=-0.0157466233 +booster[207]: +0:leaf=0.000667282962 +booster[208]: +0:leaf=-0.000984029379 +booster[209]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.0144431293 + 2:leaf=0.0156957153 +booster[210]: +0:leaf=0.000847569085 +booster[211]: +0:leaf=-0.0011830203 +booster[212]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.0147748133 + 2:leaf=-0.0153501863 +booster[213]: +0:leaf=0.000585895381 +booster[214]: +0:leaf=-0.000821825815 +booster[215]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.014178657 + 2:leaf=0.0153203066 +booster[216]: +0:leaf=0.000770541199 +booster[217]: +0:leaf=-0.0010354059 +booster[218]: +0:[f20<0.0760314986] yes=1,no=2,missing=1 + 1:leaf=0.0156102953 + 2:leaf=-0.0142391417 +booster[219]: +0:leaf=0.000606129121 +booster[220]: +0:leaf=-0.000894072698 +booster[221]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0143348621 + 2:leaf=0.0148848509 +booster[222]: +0:leaf=0.000693098409 +booster[223]: +0:leaf=-0.0009643347 +booster[224]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.014324137 + 2:leaf=-0.0149049116 +booster[225]: +0:leaf=0.000455731119 +booster[226]: +0:leaf=-0.000639213366 +booster[227]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.013906463 + 2:leaf=0.0149609568 +booster[228]: +0:leaf=0.00065184827 +booster[229]: +0:leaf=-0.000870439457 +booster[230]: +0:[f6<0.240778506] yes=1,no=2,missing=1 + 1:leaf=0.0139206825 + 2:leaf=-0.014544813 +booster[231]: +0:leaf=0.000422486832 +booster[232]: +0:leaf=-0.000561434543 +booster[233]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.0136254309 + 2:leaf=0.0146127017 +booster[234]: +0:leaf=0.000616395671 +booster[235]: +0:leaf=-0.000795793021 +booster[236]: +0:[f21<0.167128503] yes=1,no=2,missing=1 + 1:leaf=-0.0125723528 + 2:leaf=0.0135391084 +booster[237]: +0:leaf=0.000762810989 +booster[238]: +0:leaf=-0.000974756782 +booster[239]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0122917686 + 2:leaf=0.01269201 +booster[240]: +0:leaf=0.000800098176 +booster[241]: +0:leaf=-0.00100433908 +booster[242]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.0118185477 + 2:leaf=0.0117749004 +booster[243]: +0:leaf=0.000557325082 +booster[244]: +0:leaf=-0.000717383635 +booster[245]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.011514673 + 2:leaf=0.0118616698 +booster[246]: +0:leaf=0.000612657401 +booster[247]: +0:leaf=-0.000770441664 +booster[248]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.0110220462 + 2:leaf=0.0109561011 +booster[249]: +0:leaf=0.000403519371 +booster[250]: +0:leaf=-0.00052424171 +booster[251]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.0107795959 + 2:leaf=0.0110843675 +booster[252]: +0:leaf=0.000470451167 +booster[253]: +0:leaf=-0.000592771277 +booster[254]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.0102834655 + 2:leaf=0.0102037713 +booster[255]: +0:leaf=0.000288194133 +booster[256]: +0:leaf=-0.000379157747 +booster[257]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.010086352 + 2:leaf=0.0103573976 +booster[258]: +0:leaf=0.000362065679 +booster[259]: +0:leaf=-0.000457409042 +booster[260]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.00959778391 + 2:leaf=0.00951070711 +booster[261]: +0:leaf=0.000201543589 +booster[262]: +0:leaf=-0.000270112243 +booster[263]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00943405274 + 2:leaf=0.00967788231 +booster[264]: +0:leaf=0.000279076979 +booster[265]: +0:leaf=-0.000353914249 +booster[266]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.0089606354 + 2:leaf=0.00887068361 +booster[267]: +0:leaf=0.000136421833 +booster[268]: +0:leaf=-0.000188138583 +booster[269]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00882133562 + 2:leaf=0.00904287118 +booster[270]: +0:leaf=0.000215199107 +booster[271]: +0:leaf=-0.000274491234 +booster[272]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.00836809445 + 2:leaf=0.0082783699 +booster[273]: +0:leaf=8.73952158e-05 +booster[274]: +0:leaf=-0.000126515384 +booster[275]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.008246582 + 2:leaf=0.00844974443 +booster[276]: +0:leaf=0.000165805352 +booster[277]: +0:leaf=-0.000213266976 +booster[278]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.00781665742 + 2:leaf=0.00772936177 +booster[279]: +0:leaf=5.04979507e-05 +booster[280]: +0:leaf=-8.02332361e-05 +booster[281]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00770806056 + 2:leaf=0.00789571274 +booster[282]: +0:leaf=0.000127411098 +booster[283]: +0:leaf=-0.000165893915 +booster[284]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.0073031201 + 2:leaf=0.00721971691 +booster[285]: +0:leaf=2.27615274e-05 +booster[286]: +0:leaf=-4.54923356e-05 +booster[287]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00720384577 + 2:leaf=0.00737831183 +booster[288]: +0:leaf=9.7399934e-05 +booster[289]: +0:leaf=-0.000129059088 +booster[290]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.00682464568 + 2:leaf=0.00674592657 +booster[291]: +0:leaf=1.98435487e-06 +booster[292]: +0:leaf=-1.95594603e-05 +booster[293]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00673208898 + 2:leaf=0.00689501176 +booster[294]: +0:leaf=7.3836527e-05 +booster[295]: +0:leaf=-0.000100308316 +booster[296]: +0:[f1<0.1929335] yes=1,no=2,missing=1 + 1:leaf=-0.00637863716 + 2:leaf=0.00630516466 +booster[297]: +0:leaf=-1.35223527e-05 +booster[298]: +0:leaf=-2.43305806e-07 +booster[299]: +0:[f12<768] yes=1,no=2,missing=1 + 1:leaf=-0.00629088515 + 2:leaf=0.00644371426 diff --git a/src/ck-ldb/XGBoost/model_tree/model.xml b/src/ck-ldb/XGBoost/model_tree/model.xml new file mode 100644 index 0000000000..018d47ec16 --- /dev/null +++ b/src/ck-ldb/XGBoost/model_tree/model.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/scripts/Makefile b/src/scripts/Makefile index 7269c3d873..df4be10de8 100644 --- a/src/scripts/Makefile +++ b/src/scripts/Makefile @@ -681,7 +681,7 @@ $(L)/libglobal-swap.a: global-elfgot.C $(CVHEADERS) LIBCK_CORE=trace-common.o tracec.o tracef.o init.o register.o qd.o ck.o \ msgalloc.o ckfutures.o ckIgetControl.o debug-message.o debug-charm.o ckcallback.o \ cklocation.o ckmulticast.o ckarrayoptions.o ckarray.o ckreduction.o ckrdma.o ckrdmadevice.o cksyncbarrier.o \ - waitqd.o LBDatabase.o LBManager.o MetaBalancer.o weakTest.o treeTest.o forestTest.o readmodel.o lbdbf.o ckobjQ.o \ + waitqd.o LBDatabase.o LBManager.o MetaBalancer.o weakTest.o treeTest.o forestTest.o readmodel.o lbdbf.o ckobjQ.o\ ckcheckpoint.o ckmemcheckpoint.o \ LBComm.o LBObj.o LBMachineUtil.o CentralPredictor.o \ BaseLB.o CentralLB.o TreeLB.o HybridBaseLB.o DistBaseLB.o \ diff --git a/src/util/fastforest.C b/src/util/fastforest.C new file mode 100644 index 0000000000..db9756b43b --- /dev/null +++ b/src/util/fastforest.C @@ -0,0 +1,397 @@ +/** +MIT License +Copyright (c) 2020 Jonas Rembser +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "fastforest.h" + +#include +#include +#include +#include +#include +#include +#include + +using namespace fastforest; + + +void fastforest::detail::correctIndices(std::vector::iterator begin, + std::vector::iterator end, + fastforest::detail::IndexMap const& nodeIndices, + fastforest::detail::IndexMap const& leafIndices) { + for (auto it = begin; it != end; ++it) { + if (nodeIndices.count(*it)) { + *it = nodeIndices.at(*it); + } else if (leafIndices.count(*it)) { + *it = -leafIndices.at(*it); + } else { + throw std::runtime_error("something is wrong in the node structure"); + } + } +} + +namespace { + namespace util { + + inline bool isInteger(const std::string& s) { + if (s.empty() || ((!isdigit(s[0])) && (s[0] != '-') && (s[0] != '+'))) + return false; + + char* p; + strtol(s.c_str(), &p, 10); + + return (*p == 0); + } + + template + struct NumericAfterSubstrOutput { + explicit NumericAfterSubstrOutput() : value{0}, found{false}, failed{true} {} + NumericType value; + bool found; + bool failed; + std::string rest; + }; + + template + inline NumericAfterSubstrOutput numericAfterSubstr(std::string const& str, + std::string const& substr) { + std::string rest; + NumericAfterSubstrOutput output; + output.rest = str; + + auto found = str.find(substr); + if (found != std::string::npos) { + output.found = true; + std::stringstream ss(str.substr(found + substr.size(), str.size() - found + substr.size())); + ss >> output.value; + if (!ss.fail()) { + output.failed = false; + output.rest = ss.str(); + } + } + return output; + } + + std::vector split(std::string const& strToSplit, char delimeter) { + std::stringstream ss(strToSplit); + std::string item; + std::vector splittedStrings; + while (std::getline(ss, item, delimeter)) { + splittedStrings.push_back(item); + } + return splittedStrings; + } + + bool exists(std::string const& filename) { + if (FILE* file = fopen(filename.c_str(), "r")) { + fclose(file); + return true; + } else { + return false; + } + } + + } // namespace util + + void terminateTree(fastforest::FastForest& ff, + int& nPreviousNodes, + int& nPreviousLeaves, + fastforest::detail::IndexMap& nodeIndices, + fastforest::detail::IndexMap& leafIndices, + int& treesSkipped) { + using namespace fastforest::detail; + correctIndices(ff.rightIndices_.begin() + nPreviousNodes, ff.rightIndices_.end(), nodeIndices, leafIndices); + correctIndices(ff.leftIndices_.begin() + nPreviousNodes, ff.leftIndices_.end(), nodeIndices, leafIndices); + + if (nPreviousNodes != ff.cutValues_.size()) { + ff.treeNumbers_.push_back(ff.rootIndices_.size() + treesSkipped); + ff.rootIndices_.push_back(nPreviousNodes); + } else { + int treeNumbers = ff.rootIndices_.size() + treesSkipped; + ++treesSkipped; + ff.baseResponses_[treeNumbers % ff.baseResponses_.size()] += ff.responses_.back(); + ff.responses_.pop_back(); + } + + nodeIndices.clear(); + leafIndices.clear(); + nPreviousNodes = ff.cutValues_.size(); + nPreviousLeaves = ff.responses_.size(); + } + +} // namespace + + +void fastforest::details::softmaxTransformInplace(TreeEnsembleResponseType* out, int nOut) { + // Do softmax transformation inplace, mimicing exactly the Softmax function + // in the src/common/math.h source file of xgboost. + double norm = 0.; + TreeEnsembleResponseType wmax = *out; + int i = 1; + for (; i < nOut; ++i) { + wmax = std::max(out[i], wmax); + } + i = 0; + for (; i < nOut; ++i) { + auto& x = out[i]; + x = std::exp(x - wmax); + norm += x; + } + i = 0; + for (; i < nOut; ++i) { + out[i] /= static_cast(norm); + } +} + +std::vector fastforest::FastForest::softmax(const FeatureType* array, + TreeEnsembleResponseType baseResponse) const { + auto out = std::vector(nClasses()); + softmax(array, out.data(), baseResponse); + return out; +} + +void fastforest::FastForest::softmax(const FeatureType* array, + TreeEnsembleResponseType* out, + TreeEnsembleResponseType baseResponse) const { + int nClass = nClasses(); + if (nClass <= 2) { + throw std::runtime_error( + "Error in FastForest::softmax : binary classification models don't support softmax evaluation. Plase set " + "the number of classes in the FastForest-creating function if this is a multiclassification model."); + } + + evaluate(array, out, nClass, baseResponse); + fastforest::details::softmaxTransformInplace(out, nClass); +} + +void fastforest::FastForest::evaluate(const FeatureType* array, + TreeEnsembleResponseType* out, + int nOut, + TreeEnsembleResponseType baseResponse) const { + for (int i = 0; i < nOut; ++i) { + out[i] = baseResponse + baseResponses_[i]; + } + + int iRootIndex = 0; + for (int index : rootIndices_) { + do { + auto r = rightIndices_[index]; + auto l = leftIndices_[index]; + index = array[cutIndices_[index]] > cutValues_[index] ? r : l; + } while (index > 0); + out[treeNumbers_[iRootIndex] % nOut] += responses_[-index]; + ++iRootIndex; + } +} + +TreeEnsembleResponseType fastforest::FastForest::evaluateBinary(const FeatureType* array, + TreeEnsembleResponseType baseResponse) const { + TreeEnsembleResponseType out{baseResponse + baseResponses_[0]}; + + for (int index : rootIndices_) { + do { + auto r = rightIndices_[index]; + auto l = leftIndices_[index]; + index = array[cutIndices_[index]] > cutValues_[index] ? r : l; + } while (index > 0); + out += responses_[-index]; + } + + return out; +} + +FastForest fastforest::load_bin(std::string const& txtpath) { + std::ifstream ifs(txtpath, std::ios::binary); + return load_bin(ifs); +} + +FastForest fastforest::load_bin(std::istream& is) { + FastForest ff; + + int nRootNodes; + int nNodes; + int nLeaves; + + is.read((char*)&nRootNodes, sizeof(int)); + is.read((char*)&nNodes, sizeof(int)); + is.read((char*)&nLeaves, sizeof(int)); + + ff.rootIndices_.resize(nRootNodes); + ff.cutIndices_.resize(nNodes); + ff.cutValues_.resize(nNodes); + ff.leftIndices_.resize(nNodes); + ff.rightIndices_.resize(nNodes); + ff.responses_.resize(nLeaves); + ff.treeNumbers_.resize(nRootNodes); + + is.read((char*)ff.rootIndices_.data(), nRootNodes * sizeof(int)); + is.read((char*)ff.cutIndices_.data(), nNodes * sizeof(CutIndexType)); + is.read((char*)ff.cutValues_.data(), nNodes * sizeof(FeatureType)); + is.read((char*)ff.leftIndices_.data(), nNodes * sizeof(int)); + is.read((char*)ff.rightIndices_.data(), nNodes * sizeof(int)); + is.read((char*)ff.responses_.data(), nLeaves * sizeof(TreeResponseType)); + is.read((char*)ff.treeNumbers_.data(), nRootNodes * sizeof(int)); + + int nBaseResponses; + is.read((char*)&nBaseResponses, sizeof(int)); + ff.baseResponses_.resize(nBaseResponses); + is.read((char*)ff.baseResponses_.data(), nBaseResponses * sizeof(TreeEnsembleResponseType)); + + return ff; +} + +void fastforest::FastForest::write_bin(std::string const& filename) const { + std::ofstream os(filename, std::ios::binary); + + int nRootNodes = rootIndices_.size(); + int nNodes = cutValues_.size(); + int nLeaves = responses_.size(); + int nBaseResponses = baseResponses_.size(); + + os.write((const char*)&nRootNodes, sizeof(int)); + os.write((const char*)&nNodes, sizeof(int)); + os.write((const char*)&nLeaves, sizeof(int)); + + os.write((const char*)rootIndices_.data(), nRootNodes * sizeof(int)); + os.write((const char*)cutIndices_.data(), nNodes * sizeof(CutIndexType)); + os.write((const char*)cutValues_.data(), nNodes * sizeof(FeatureType)); + os.write((const char*)leftIndices_.data(), nNodes * sizeof(int)); + os.write((const char*)rightIndices_.data(), nNodes * sizeof(int)); + os.write((const char*)responses_.data(), nLeaves * sizeof(TreeResponseType)); + os.write((const char*)treeNumbers_.data(), nRootNodes * sizeof(int)); + + os.write((const char*)&nBaseResponses, sizeof(int)); + os.write((const char*)baseResponses_.data(), nBaseResponses * sizeof(TreeEnsembleResponseType)); + os.close(); +} + +FastForest fastforest::load_txt(std::string const& txtpath, std::vector& features, int nClasses) { + const std::string info = "constructing FastForest from " + txtpath + ": "; + + if (!util::exists(txtpath)) { + throw std::runtime_error(info + "file does not exists"); + } + + std::ifstream file(txtpath); + return load_txt(file, features, nClasses); +} + +FastForest fastforest::load_txt(std::istream& file, std::vector& features, int nClasses) { + if (nClasses < 2) { + throw std::runtime_error("Error in fastforest::load_txt : nClasses has to be at least two"); + } + + const std::string info = "constructing FastForest from istream: "; + + FastForest ff; + ff.baseResponses_.resize(nClasses == 2 ? 1 : nClasses); + + int treesSkipped = 0; + + int nVariables = 0; + std::unordered_map varIndices; + bool fixFeatures = false; + + if (!features.empty()) { + fixFeatures = true; + nVariables = features.size(); + for (int i = 0; i < nVariables; ++i) { + varIndices[features[i]] = i; + } + } + + std::string line; + + fastforest::detail::IndexMap nodeIndices; + fastforest::detail::IndexMap leafIndices; + + int nPreviousNodes = 0; + int nPreviousLeaves = 0; + + while (std::getline(file, line)) { + auto foundBegin = line.find("["); + auto foundEnd = line.find("]"); + if (foundBegin != std::string::npos) { + auto subline = line.substr(foundBegin + 1, foundEnd - foundBegin - 1); + if (util::isInteger(subline) && !ff.responses_.empty()) { + terminateTree(ff, nPreviousNodes, nPreviousLeaves, nodeIndices, leafIndices, treesSkipped); + } else if (!util::isInteger(subline)) { + std::stringstream ss(line); + int index; + ss >> index; + line = ss.str(); + + auto splitstring = util::split(subline, '<'); + auto const& varName = splitstring[0]; + FeatureType cutValue = std::stold(splitstring[1]); + if (!varIndices.count(varName)) { + if (fixFeatures) { + throw std::runtime_error(info + "feature " + varName + " not in list of features"); + } + varIndices[varName] = nVariables; + features.push_back(varName); + ++nVariables; + } + int yes; + int no; + auto output = util::numericAfterSubstr(line, "yes="); + if (!output.failed) { + yes = output.value; + } else { + throw std::runtime_error(info + "problem while parsing the text dump"); + } + output = util::numericAfterSubstr(output.rest, "no="); + if (!output.failed) { + no = output.value; + } else { + throw std::runtime_error(info + "problem while parsing the text dump"); + } + + ff.cutValues_.push_back(cutValue); + ff.cutIndices_.push_back(varIndices[varName]); + ff.leftIndices_.push_back(yes); + ff.rightIndices_.push_back(no); + auto nNodeIndices = nodeIndices.size(); + nodeIndices[index] = nNodeIndices + nPreviousNodes; + } + + } else { + auto output = util::numericAfterSubstr(line, "leaf="); + if (output.found) { + std::stringstream ss(line); + int index; + ss >> index; + line = ss.str(); + + ff.responses_.push_back(output.value); + auto nLeafIndices = leafIndices.size(); + leafIndices[index] = nLeafIndices + nPreviousLeaves; + } + } + } + terminateTree(ff, nPreviousNodes, nPreviousLeaves, nodeIndices, leafIndices, treesSkipped); + + if (nClasses > 2 && (ff.rootIndices_.size() + treesSkipped) % nClasses != 0) { + throw std::runtime_error(std::string{"Error in FastForest construction : Forest has "} + + std::to_string(ff.rootIndices_.size()) + " trees, " + "which is not compatible with " + + std::to_string(nClasses) + " classes!"); + } + + return ff; +} \ No newline at end of file diff --git a/src/util/fastforest.h b/src/util/fastforest.h new file mode 100644 index 0000000000..92b49421a3 --- /dev/null +++ b/src/util/fastforest.h @@ -0,0 +1,123 @@ +/** +MIT License +Copyright (c) 2020 Jonas Rembser +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef FastForest_h +#define FastForest_h + +#include +#include +#include +#include +#include +#include + +namespace fastforest { + + // The double number type that will be used to accept features and store cut values + typedef double FeatureType; + // Tue double number type that the individual trees return their responses in + typedef double TreeResponseType; + // The double number type that is used to sum the individual tree responses + typedef double TreeEnsembleResponseType; + // This integer type stores the indices of the feature employed in each cut. + // Set to `unsigned char` for most compact fastforest ofjects if you have less than 256 features. + typedef unsigned int CutIndexType; + + namespace detail { + + typedef std::unordered_map IndexMap; + + void correctIndices(std::vector::iterator begin, + std::vector::iterator end, + IndexMap const& nodeIndices, + IndexMap const& leafIndices); + + } + + // The base response you have to use with older XGBoost versions might be + // zero, so try to explicitely pass zero to the model evaluation if the + // results from this library are incorrect. + const TreeEnsembleResponseType defaultBaseResponse = 0.5; + + namespace details { + + void softmaxTransformInplace(TreeEnsembleResponseType* out, int nOut); + + } + + struct FastForest { + inline TreeEnsembleResponseType operator()(const FeatureType* array, + TreeEnsembleResponseType baseResponse = defaultBaseResponse) const { + return evaluateBinary(array, baseResponse); + } + + template + std::array softmax( + const FeatureType* array, TreeEnsembleResponseType baseResponse = defaultBaseResponse) const { + // static softmax interface: no manual memory allocation, but requires to know nClasses at compile time + static_assert(nClasses >= 3, "nClasses should be >= 3"); + std::array out{}; + evaluate(array, out.data(), nClasses, baseResponse); + details::softmaxTransformInplace(out.data(), nClasses); + return out; + } + + // dynamic softmax interface with manually allocated std::vector: simple but inefficient + std::vector softmax( + const FeatureType* array, TreeEnsembleResponseType baseResponse = defaultBaseResponse) const; + + // softmax interface that is not a pure function, but no manual allocation and no compile-time knowledge needed + void softmax(const FeatureType* array, + TreeEnsembleResponseType* out, + TreeEnsembleResponseType baseResponse = defaultBaseResponse) const; + + void write_bin(std::string const& filename) const; + + int nClasses() const { return baseResponses_.size() > 2 ? baseResponses_.size() : 2; } + + std::vector rootIndices_; + std::vector cutIndices_; + std::vector cutValues_; + std::vector leftIndices_; + std::vector rightIndices_; + std::vector responses_; + std::vector treeNumbers_; + std::vector baseResponses_; + + private: + void evaluate(const FeatureType* array, + TreeEnsembleResponseType* out, + int nOut, + TreeEnsembleResponseType baseResponse) const; + + TreeEnsembleResponseType evaluateBinary(const FeatureType* array, TreeEnsembleResponseType baseResponse) const; + }; + + FastForest load_txt(std::string const& txtpath, std::vector& features, int nClasses = 2); + FastForest load_txt(std::istream& is, std::vector& features, int nClasses = 2); + FastForest load_bin(std::string const& txtpath); + FastForest load_bin(std::istream& is); +#ifdef EXPERIMENTAL_TMVA_SUPPORT + FastForest load_tmva_xml(std::string const& xmlpath, std::vector& features); +#endif + +} // namespace fastforest + +#endif \ No newline at end of file