xgboost 使用方法简述

以下代码是我从各个博客找到的,作为一个初学者,我把这几种形式记录一下,方便大家使用。

1   初级版本一

 

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01, random_state=1729)
print(X_train.shape, X_test.shape)

#模型参数设置
xlf = xgb.XGBRegressor(max_depth=10, 
                        learning_rate=0.1, 
                        n_estimators=10, 
                        silent=True, 
                        objective='reg:linear', 
                        nthread=-1, 
                        gamma=0,
                        min_child_weight=1, 
                        max_delta_step=0, 
                        subsample=0.85, 
                        colsample_bytree=0.7, 
                        colsample_bylevel=1, 
                        reg_alpha=0, 
                        reg_lambda=1, 
                        scale_pos_weight=1, 
                        seed=1440, 
                        missing=None)

xlf.fit(X_train, y_train, eval_metric='rmse', verbose = True, eval_set = [(X_test, y_test)],early_stopping_rounds=100)

# 计算 auc 分数、预测
preds = xlf.predict(X_test)

 

 

2 初级版本二  源自博客:http://blog.csdn.net/chivalrousli/article/details/54409386

 

X_train, X_test, y_train, y_test = train_test_split(train2[train2.columns[:27]],train2[train2.columns[27]],test_size = 0.25, random_state = 33)

xgb_train = xgb.DMatrix(X_train, label=y_train)
 
xgb_val = xgb.DMatrix(X_test,label=y_test)

xgb_test = xgb.DMatrix(tests) #测试集params={'booster':'gbtree','objective': 'multi:softmax', #多分类的问题'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, # 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言#,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。 'silent':0 ,#设置成1则没有运行信息输出,最好是设置为0.'eta': 0.007, # 如同学习率'seed':1000,'nthread':7,# cpu 线程数#'eval_metric': 'auc'}plst = list(params.items())num_rounds = 5000 # 迭代次数watchlist = [(xgb_train, 'train'),(xgb_val, 'val')]#训练模型并保存# early_stopping_rounds 当设置的迭代次数较大时,early_stopping_rounds 可在一定的迭代次数内准确率没有提升就停止训练model = xgb.train(plst, xgb_train, num_rounds, watchlist,early_stopping_rounds=100)model.save_model('./model/xgb.model') # 用于存储训练出的模型print "best best_ntree_limit",model.best_ntree_limit

 

 

 

3 xgboost  train 方法参数介绍

 

 

xgboost.train(params,dtrain,num_boost_round=10,evals=(),obj=None,feval=None,maximize=False,early_stopping_rounds=None,
evals_result=None,verbose_eval=True,learning_rates=None,xgb_model=None)

 

 

 

 

  • params 这是一个字典,里面包含着训练中的参数关键字和对应的值,形式是params = {‘booster’:’gbtree’,’eta’:0.1}
  • dtrain 训练的数据
  • num_boost_round 这是指提升迭代的个数
  • evals 这是一个列表,用于对训练过程中进行评估列表中的元素。形式是evals = [(dtrain,’train’),(dval,’val’)]或者是evals = [(dtrain,’train’)],对于第一种情况,它使得我们可以在训练过程中观察验证集的效果。
  • obj,自定义目的函数
  • feval,自定义评估函数
  • maximize ,是否对评估函数进行最大化
  • early_stopping_rounds,早期停止次数 ,假设为100,验证集的误差迭代到一定程度在100次内不能再继续降低,就停止迭代。这要求evals 里至少有 一个元素,如果有多个,按最后一个去执行。返回的是最后的迭代次数(不是最好的)。如果early_stopping_rounds 存在,则模型会生成三个属性,bst.best_score,bst.best_iteration,和bst.best_ntree_limit
  • evals_result 字典,存储在watchlist 中的元素的评估结果。
  • verbose_eval (可以输入布尔型或数值型),也要求evals 里至少有 一个元素。如果为True ,则对evals中元素的评估结果会输出在结果中;如果输入数字,假设为5,则每隔5个迭代输出一次。
  • learning_rates 每一次提升的学习率的列表,
  • xgb_model ,在训练之前用于加载的xgb model。

 

 

 

4,进阶版 结合GridSearchCV  选择参数

 

from xgboost.sklearn import XGBClassifier
from sklearn.grid_search import GridSearchCV
params = {
    'learning_rate':0.1,
    'n_estimators':500,
    'max_depth':5,
    'min_child_weight':1,
    'gamma':0,
    'subsample':0.8,
    'colsample_bytree':0.8,
    'objective':'binary:logistic',
    #在各类别样本十分不平衡时,把这个参数设定为正值,可以是算法更快收敛
    'scale_pos_weight':1
}
clf = XGBClassifier(**params)
grid_params = {
    'learning_rate':np.linspace(0.01,0.2,20)  #得到最佳参数0.01,Accuracy:96.4
}
grid = GridSearchCV(clf,grid_params)
grid.fit(X,y)
print(grid.best_params_)
print("Accuracy:{0:.1f}%".format(100*grid.best_score_))
    只对参数learning_rate进行调优,我们就将准确率从95.6提高到96.4%。

这里只是举一个例子,详细的请看这篇博客:   http://blog.csdn.net/weixin_38569817/article/details/76354004

 

 

5  以上针对想快速使用的人,关于参数的具体含义,可以看这篇文章:http://www.cnblogs.com/mfryf/p/6293814.html

 

官网上的API http://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.core

 

这篇博客讲的也非常具体,非常棒http://blog.csdn.net/xiewenbo/article/details/72902993
 

 

 

 

 


 

你可能感兴趣的:(数据挖掘,机器学习)