Xgboost的参数及调参
⼀、Xgboost参数解释
XGBoost的参数⼀共分为三类:
1. 通⽤参数:宏观函数控制。
2. Booster参数:控制每⼀步的booster(tree/regression)。booster参数⼀般可以调控模型的效果和计算代价。我们所说的调参,很
这是⼤程度上都是在调整booster参数。
3. 学习⽬标参数:控制训练⽬标的表现。我们对于问题的划分主要体现在学习⽬标参数上。⽐如我们要做分类还是回归,做⼆分类还是
多分类,这都是⽬标参数所提供的。
我下⾯介绍的参数都是我觉得⽐较重要的。
1.1、通⽤参数
1. booster:我们有两种参数选择,gbtree和gblinear。gbtree是采⽤树的结构来运⾏数据,⽽gblinear是基于线性模型。
2. silent:静默模式,为1时模型运⾏不输出。
3. nthread: 使⽤线程数,⼀般我们设置成-1,使⽤所有线程。如果有需要,我们设置成多少就是⽤多少线程。
1.2、Booster参数
1. n_estimator: 也作num_boosting_rounds
这是⽣成的最⼤树的数⽬,也是最⼤的迭代次数。
2. learning_rate: 有时也叫作eta,系统默认值为0.3。
每⼀步迭代的步长,很重要。太⼤了运⾏准确率不⾼,太⼩了运⾏速度慢。我们⼀般使⽤⽐默认值⼩⼀点,0.1左右就很好。3. gamma:系统默认为0,我们也常⽤0。
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。gamma指定了节点分裂所需
的最⼩损失函数下降值。 这个参数的值越⼤,算法越保守。因为gamma值越⼤的时候,损失函数下降更多才可以分裂节点。所以树⽣成的时候更不容易分裂节点。范围: [0,∞]
4. subsample:系统默认为1。
这个参数控制对于每棵树,随机采样的⽐例。减⼩这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过⼩,它可能会导致⽋拟合。 典型值:0.5-1,0.5代表平均采样,防⽌过拟合. 范围: (0,1],注意不可取0
5. colsample_bytree:系统默认值为1。我们⼀般设置成0.8左右。
⽤来控制每棵随机采样的列数的占⽐(每⼀列是⼀个特征)。 典型值:0.5-1范围: (0,1]
6. colsample_bylevel:默认为1,我们也设置为1.
这个就相⽐于前⼀个更加细致了,它指的是每棵树每次节点分裂的时候列采样的⽐例
7. max_depth: 系统默认值为6
底座英文
我们常⽤3-10之间的数字。这个值为树的最⼤深度。这个值是⽤来控制过拟合的。max_depth越⼤,模型学习的更加具体。设置为0代表没有限制,范围: [0,∞]
8. max_delta_step:默认0,我们常⽤0.
这个参数限制了每棵树权重改变的最⼤步长,如果这个参数的值为0,则意味着没有约束。如果他被赋予了某⼀个正值,则是这个算法更加保守。通常,这个参数我们不需要设置,但是当个类别的样本极不平衡的时候,这个参数对逻辑回归优化器是很有帮助的。
9. lambda:也称reg_lambda,默认值为0。
权重的L2正则化项。(和Ridge regression类似)。这个参数是⽤来控制XGBoost的正则化部分的。这个参数在减少过拟合上很有帮助。
10. alpha:也称reg_alpha默认为0,
权重的L1正则化项。(和Lasso regression类似)。 可以应⽤在很⾼维度的情况下,使得算法的速度更快。
11. scale_pos_weight:默认为1
在各类别样本⼗分不平衡时,把这个参数设定为⼀个正值,可以使算法更快收敛。通常可以将其设置为负样本的数⽬与正样本数⽬的⽐值。
1.3、学习⽬标参数
objective [缺省值=reg:linear]
reg:linear– 线性回归
reg:logistic – 逻辑回归
binary:logistic – ⼆分类逻辑回归,输出为概率
binary:logitraw – ⼆分类逻辑回归,输出的结果为wTx
count:poisson – 计数问题的poisson回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7 (ud to safeguard optimization)
multi:softmax – 设置 XGBoost 使⽤softmax⽬标函数做多分类,需要设置参数num_class(类别个数)
multi:softprob – 如同softmax,但是输出结果为ndata*nclass的向量,其中的值是每个数据分为每个类的概率。
jwleval_metric [缺省值=通过⽬标函数选择]英语同声传译
rm: 均⽅根误差
mae: 平均绝对值误差
logloss: negative log-likelihood
error: ⼆分类错误率。其值通过错误分类数⽬与全部分类数⽬⽐值得到。对于预测,预测值⼤于0.5被认为是正类,其它归为负类。
error@t: 不同的划分阈值可以通过 ‘t’进⾏设置
mht
merror: 多分类错误率,计算公式为(wrong cas)/(all cas)
mlogloss: 多分类log损失
auc: 曲线下的⾯积postproduction
ndcg: Normalized Discounted Cumulative Gain
map: 平均正确率
⼀般来说,我们也可以使⽤ ain(params, dtrain) 函数来训练我们的模型。这⾥的 params 指的是 booster 参数。⼆、举例
import xgboost as xgb
美国aimport pandas as pd
del_lection import train_test_split
ics import roc_auc_score
train_data = pd.read_csv('train.csv')# 读取数据
y = train_data.pop('30').values # ⽤pop⽅式将训练数据中的标签值y取出来,作为训练⽬标,这⾥的‘30’是标签的列名col = lumns
x = train_data[col].values # 剩下的列作为训练数据
train_x, valid_x, train_y, valid_y = train_test_split(x, y, test_size=0.333, random_state=0)# 分训练集和验证集同好
# 这⾥不需要Dmatrix
parameters ={
'max_depth':[5,10,15,20,25],
'learning_rate':[0.01,0.02,0.05,0.1,0.15],
'n_estimators':[500,1000,2000,3000,5000],
'min_child_weight':[0,2,5,10,20],
'max_delta_step':[0,0.2,0.6,1,2],
'subsample':[0.6,0.7,0.8,0.85,0.95],
'colsample_bytree':[0.5,0.6,0.7,0.8,0.9],
'reg_alpha':[0,0.25,0.5,0.75,1],
'reg_lambda':[0.2,0.4,0.6,0.8,1],
'scale_pos_weight':[0.2,0.4,0.6,0.8,1]
}
eventargs
xlf = xgb.XGBClassifier(max_depth=10,
男人穿衣打扮learning_rate=0.01,
n_estimators=2000,
silent=True,
objective='binary:logistic',
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,
ed=1440,
missing=None)
# 有了gridarch我们便不需要fit函数
garch = GridSearchCV(xlf, param_grid=parameters, scoring='accuracy', cv=3)
garch.fit(train_x, train_y)
print("Best score: %0.3f"% garch.best_score_)
print("Best parameters t:")
best_parameters = garch.best_estimator_.get_params()
人事部翻译考试
for param_name in sorted(parameters.keys()):
print("\t%s: %r"%(param_name, best_parameters[param_name]))
我们也可以分别对每个参数进⾏优化,以上即为调参内容。
参考资料