Python机器学习笔记:XgBoost算法 - 战争热诚 - 博客园
https://blog.csdn.net/kwame211/article/details/81098025
Text Input Format of DMatrix — xgboost 1.6.0-dev documentation(官方wendang)
1.数据格式
1.1libsvm格式的文本数据
第一列是数据标签,后面每列 id : value的形式展示特征索引和特征值
(官网给出的数据样例train.txt)
带有 qid 的数据,用qid标记数据属于哪个查询组
dtrain = xgb.DMatrix('train.svm.txt')
对于rank任务还需要输入group(查询组),根据qid 分组进行分组
表示数据集包含的7个实例中前两个实例在一个组中,中间两个为一组,其他的三个实例在另一个组中
dtrain.set_group(group_train) #group_train,以列表的形式存储
set_group设置 groupId。(groupId 的概念在 rank 中广泛适用,只有同一个 group 中的样本才有排序的意义。对于IR任务来说,不同 query对应不同group。)
注意set_group 方法传入的是每个 group 中元素的个数,[1,3,6]对应第一组有1条样本,第二组3条,第三组6条。即训练集有10条样本的话,按顺序,第1条设置为第1组,2-4条设置为第2组,5-10条设置为第3组。
1.2 将csv 文件加载到DMatrix
dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0')
1.3 将NumPy数组加载到DMatrix
2.参数
params = {
'booster': 'gbtree', 可以是gbtree
,gblinear
或dart
;gbtree
并dart
使用基于树的模型,同时gblinear
使用线性函数
'objective': 'multi:softmax', # 多分类的问题 "rank:pairwise" 排序问题 "binary:logistic” 二分类问题
'num_class': 10, # 类别数,与 multisoftmax 并用
'gamma': 0.1, # 用于控制是否后剪枝的参数,越大越保守,一般0.1、0.2这样子。
'max_depth': 12, # 构建树的深度,越大越容易过拟合
'lambda': 2, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
'subsample': 0.7, # 随机采样训练样本
'colsample_bytree': 0.7, # 生成树时进行的列采样
'min_child_weight': 3,
'silent': 1, # 设置成1则没有运行信息输出,最好是设置为0.
'eta': 0.007, # 如同学习率
'seed': 1000,
'nthread': 4, # cpu 线程数
max_leaf_nodes :最大叶子节点数
min_child_weight :叶节点的最小权重值,这个值设置较大时,通常树不会太深,可以控制过拟合,但太大时,容易造成欠拟合的现象
max_delta_step : 在最大增量步长中,我们允许每棵树的权重估计。如果该值设置为0,则表示没有约束。如果将其设置为正值,则可以帮助使更新步骤更加保守。通常不需要此参数,但是当类非常不平衡时,它可能有助于逻辑回归
eval_metric:评估指标 (rmse
:均方根误差,rmsle
:均方根对数误差,mae
:平均绝对误差,mape
:平均绝对百分比误差,mphe
:平均伪Huber错误,logloss
:负对数似然
error
:二进制分类错误率,merror
:多类分类错误率,mlogloss
:多类logloss,auc,aucpr,ndcg,map,ndcg@n,map@n:'n'可以被指定为整数,ndcg-,map-,ndcg@n-,map@n-,poisson-nloglik:泊松回归的负对数似)
}
3.训练
booster = xgb.train(param, dtrain, num_boost_round=10, evals=(), obj=None, feval=None, maximize=False, early_stopping_rounds=None, evals_result=None, verbose_eval=True, xgb_model=None, callbacks=None) //num_rand训练轮数
1,params
字典类型,用于指定各种参数,例如:{‘booster’:‘gbtree’,‘eta’:0.1}
2,dtrain
用于训练的数据
3,num_boost_round
指定最大迭代次数,默认值为10
4,evals
列表类型,用于指定训练过程中用于评估的数据及数据的名称。例如:[(dtrain,‘train’),(dval,‘val’)]
5,obj
可以指定二阶可导的自定义目标函数。
6,feval
自定义评估函数。
7,maximize
是否对评估函数最大化,默认值为False。
8,early_stopping_rounds
指定迭代多少次没有得到优化则停止训练
9,verbose_eval
可以是bool类型,也可以是整数类型。如果设置为整数,则每间隔verbose_eval次迭代就输出一次信息。
10,xgb_model
加载之前训练好的 xgb 模型,用于增量训练。
model.save_model("save.model")
模型以XGBoost内部格式保存,该格式在各种XGBoost接口中通用
model.dump_model("save.model.text")
dump_model 将模型转储到文本或JSON文件中。与save_model不同,输出格式主要用于可视化或解释,因此更易于阅读,但无法加载回XGBoost。
4.获得特征权重
model.get_score(importance_type='weight')
model.get_score( fmap = ' feature.map ',importance_type='weight')
featrue.map格式:
importance_type :可选的有五种,weight,gain,cover,total_gain,total_cover
5.预测
model.predict(dtest)