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