[机器学习] 手撕XGBoost超参数
本文以XGBoost 1.4.2版本为例,以具体例子,详解XGBoost中超参数的含义以及用法。import osimport pandas as pdimport xgboost as xgbfrom sklearn.tree import export_graphvizcols = ['height', 'weight', 'chinese', 'math', 'english', 'gk']
XGBoost版本: 1.4.2
首先,对于不同的任务,XGBoost有不同的超参数以及默认值。可以使用get_params()函数将当前模型使用的超参数打印出来:
import xgboost as xgb
params = {'n_estimators': 4,
'max_depth': 3}
model = xgb.XGBRegressor(**params)
model.fit(X, y)
## 输出超参数
print(model.get_params())
{'objective': 'reg:squarederror',
'base_score': 0.5,
'booster': 'gbtree',
'colsample_bylevel': 1,
'colsample_bynode': 1,
'colsample_bytree': 1,
'gamma': 0,
'gpu_id': -1,
'importance_type': 'gain',
'interaction_constraints': '',
'learning_rate': 0.300000012,
'max_delta_step': 0,
'max_depth': 6,
'min_child_weight': 1,
'missing': nan,
'monotone_constraints': '()',
'n_estimators': 100,
'n_jobs': 12,
'num_parallel_tree': 1,
'random_state': 0,
'reg_alpha': 0,
'reg_lambda': 1,
'scale_pos_weight': 1,
'subsample': 1,
'tree_method': 'exact',
'validate_parameters': 1,
'verbosity': None}
n_estimators:使用多少棵树来拟合,也可以理解为多少次迭代。默认100;learning_rate:学习率,每棵树的预测结果都要乘以这个学习率,默认0.3;
树相关参数:max_depth:每一棵树最大深度,默认6;min_child_weight:可以理解为叶子节点最小样本数,默认1;gamma:叶节点上进行进一步分裂所需的最小"损失减少"。默认0;
抽样:subsample:训练集抽样比例,每次拟合一棵树之前,都会进行该抽样步骤。默认1,取值范围(0, 1]
列抽样:colsample_bytree:每次拟合一棵树之前,决定使用多少个特征。colsample_bylevel:每层树节点,可以使用多少个特征。colsample_bynode:每个节点分裂之前,决定使用多少个特征。
这三个参数默认都是1,取值范围(0, 1],列抽样也可以理解为特征抽样,注意这三个参数是同时作用的,比如训练集总共有64个特征,参数{‘colsample_bytree’:0.5, ‘colsample_bylevel’:0.5, ‘colsample_bynode’:0.5},则每次拟合一棵树之前,在64个特征中随机抽取其中32个特征,然后在树的每一层,在32个特征中随机抽取16个特征,然后每次节点分裂,从16个特征中随机抽取8个特征。
树方法:tree_method:默认是auto,会自动选择最保守的方式。这个是决定训练速度的关键超参数。一般有三种树方法:exact(精确方法),approx(近似方法),hist(直方图方法),其中hist就是LightGBM中的直方图方法,速度最快,approx速度次之,exact最慢。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)