目录
CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点:
详见https://www.cnblogs.com/canyangfeixue/p/7802835.html
参考https://blog.csdn.net/u010659278/article/details/44527437
集成学习是指将若干弱分类器组合之后产生一个强分类器。弱分类器(weak learner)指那些分类准确率只稍好于随机猜测的分类器(error rate < 50%)。
集成算法成功的关键在于能保证弱分类器的多样性。
参考http://www.scholarpedia.org/article/Ensemble_learning
gbdt 是通过采用加法模型(即对基函数进行线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。
参考《统计学习方法》P147-
参考https://www.cnblogs.com/pinard/p/6140514.html
参考https://www.zybuluo.com/yxd/note/611571
参考https://zhuanlan.zhihu.com/p/29765582
再看一个很6的pdf:https://daiwk.github.io/assets/gbdt.pdf
xgboost的树的叶子和predict结果有什么关系
xgboost的predict函数线程不安全:https://github.com/dmlc/xgboost/issues/311
解决:可以将handle放到一个pool里,每次要predict的时候,从pool里去拿。
xgboost调参:https://segmentfault.com/a/1190000014040317
注意,grid_scores_
这个参数改名了,改成了````cv_results_```。
xgboost的坑:
所以,如果我们用libsvm的格式来给python喂数据,如果用的是tree,那么需要加上missing参数:
dtrain = xgb.DMatrix("./output/%sins.dat.train.cls" % (prefix) + "." + flag, missing=0.0)
dtest = xgb.DMatrix("./output/%sins.dat.test.cls" % (prefix) + "." + flag, missing=0.0)
params = {'booster': 'gbtree',
'objective': 'binary:logistic',
'eval_metric': 'auc',
'max_depth': 5,
'min_child_weight': 1,
'eta': 0.1,
'nthread': 8,
'silent': 1}
而在线预测的时候,默认值给0.0:
int sample_rows = 1;
int cols = feature_count;
float test[sample_rows][cols];
for (int i = 0; i < sample_rows; i++) {
for (int j = 0; j < cols; j++) {
test[i][j] = 0;
}
}
DMatrixHandle h_test;
// 这里的0.0就是Missing的默认值
int ret_x = XGDMatrixCreateFromMat((float *) test, sample_rows, cols, 0.0, &h_test);
if (ret_x < 0) {
XGDMatrixFree(h_test);
LOG(WARNING) << "fail in XGDMatrixCreateFromMat";
return ret;
}
bst_ulong out_len;
const float * pred_result = nullptr;
std::shared_ptr<BoosterHandlePool> handle_pool = xgb_dict->get_dict();
if (handle_pool == nullptr) {
return ret;
}
auto obj = handle_pool->get();
BoosterHandle *handle = obj.get();
if (handle == nullptr) {
return ret;
}
int ret_p = XGBoosterPredict(*handle, h_test, 0, 0, &out_len, &pred_result);
if (ret_p) {
pred_result = nullptr;
LOG(WARNING) << "fail in XGBoosterPredict";
return ret;
}
XGDMatrixFree(h_test);