20- Xgboost 算法参数最优化 (集成算法) (算法)

XGBoost是一种优化的梯度提升决策树库,它在GBDT的基础上增加了许多特性,如正则化、列抽样和并行计算,以提高效率和防止过拟合。文章介绍了XGBoost的基本概念,包括目标函数的定义、泰勒展开和决策树的构建,以及三种不同的使用方式。

Xgboost 方式一

from xgboost import XGBClassifier
model = XGBClassifier(
    learning_rate =0.1, # 学习率,控制每次迭代更新权重时的步长,默认0.3。值越小,训练越慢
    use_label_encoder=False,
    n_estimators=10,   # 总共迭代的次数,即决策树的个数
    max_depth=5,       # 深度
    min_child_weight=1,  # 默认值为1,。值越大,越容易欠拟合;值越小,越容易过拟合
    gamma=0,        # 惩罚项系数,指定节点分裂所需的最小损失函数下降值。
    # 训练每棵树时,使用的数据占全部训练集的比例。默认值为1,典型值为0.5-1。防止overfitting
    subsample=0.8,  
    colsample_bytree=0.8,
    objective= 'binary:logistic',  # 目标函数
    eval_metric = ['merror'],  # 验证数据集评判标准
    nthread=4,)    # 并行线程数
eval_set = [(X_test, y_test),(X_train,y_train)]
model.fit(X_train,y_train,eval_set = eval_set,verbose = True)

Xgboost 方式二

import xgboost as xgb
param = {'learning_rate':0.1, 'n_estimators':10,
         'max_depth':5,'min_child_weight':1,'gamma':0,'subsample':0.8,
         'colsample_bytree':0.8, 'verbosity':0,'objective':'multi:softprob'}
model = xgb.XGBClassifier(**param)
model.fit(X_train, y_train, early_stopping_rounds=20, eval_metric='merror',
        eval_set=[(X_test, y_test)])

Xgboost 方式三

import xgboost as xgb
dtrain = xgb.DMatrix(data = X_train,label = y_train)
dtest = xgb.DMatrix(data = X_test,label = y_test)
param = {'learning_rate':0.1,'use_label_encoder':False,'n_estimators':20,
         'max_depth':5,'min_child_weight':1,'gamma':0,'subsample':0.8,
         'eval_metric':['merror','mlogloss'],'colsample_bytree':0.8, 
         'verbosity':0,'objective':'multi:softmax','num_class':3 }
num_round = 10
evals = [(dtrain,'train'),(dtest,'eval')]

bst = xgb.train(param, dtrain, num_round,evals = evals,)
y_ = bst.predict(dtest)
display(y_,accuracy_score(y_test,y_))   # 0.9722222222222222

算法差异:

  1. 传统GBDT以CART(gini系数进行裂分的决策树)作为基分类器,XGBoost还支持线性分类器,这个时候XGBoost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
  2. (经过GBDT推导,目前GBDT也是二阶导数)传统GBDT在优化时只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,XGBoost工具支持自定义代价函数,只要函数可一阶和二阶求导。
  3. XGBoost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。正则降低了模型的方差,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性。
  4. Shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值