XGBoost算法原理简介及调参

心跳信号分类预测(四)建模与调参 本次任务选择lightgbm进行建模调参。 1.关于lightgbm LightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中。LightGBM及GDBT都是boosting的方法,即基模型的训练是有顺序的,每轮训练在前一轮训练的基础上进行。 LightGBM针对XGboost在以下几个方面进行优化: 1.单边梯度抽样算法; 2.直方图算法; 3.互斥特征捆绑算法; 4.基于最大深度的 Leaf-wise 的垂直生长算法; 5.类别特征最优分割; 6 阅读详情
AI摘要

本文介绍了XGBoost算法的特点及优势,详细讲解了XGBoost的参数分类和调参步骤,包括设置学习率、调整树特性和正则化参数等,帮助读者提升模型效果。

译文:Complete Guide to Parameter Tuning in XGBoost

简介

当模型没有达到预期效果的时候,XGBoost就是数据科学家的最终武器。XGboost是一个高度复杂的算法,有足够的能力去学习数据的各种各样的不规则特征。

用XGBoost建模很简单,但是提升XGBoost的模型效果却需要很多的努力。因为这个算法使用了多维的参数。为了提升模型效果,调参就不可避免,但是想要知道参数怎么调,什么样的参数能够得出较优的模型输出就很困难了。

这篇文章适用于XGBoost新手,教会新手学习使用XGBoost的一些有用信息来帮忙调整参数。

What should you know?

XGBoost(extreme Gradient Boosting) 是一个高级的梯度增强算法(gradient boosting algorithm),推荐看一下我前一篇翻译的自该作者的文章

XGBoost 的优势

  • Regularization:
    • 标准的GBM并没有XGBoost的Regularization,这个能帮助减少过拟合问题
  • Parallel Processing:
    • XGBoost实现了并行计算,与GBM相比非常快
    • 但是基于序列的模型,新模型的建立是基于前面已经建立好的模型,如何能实现并行计算呢?探索一下吧
    • XGBoost 支持在Hadoop上实现
  • High Flexibility
    • XGBoost允许用户定制优化目标和评价标准
    • 这一点将会使得我们对模型有很多可以改进的地方
  • Handling Missing Values
    • XGBoost有内嵌的处理缺失值的程序
    • 其他模型中用户被要求为缺失值提供相应的与其他值不同的值去填充缺失值,XGBoost会尝试对缺失值进行分类,并学习这种分类
  • Tree Pruning:
    • GBM会停止对一个节点进行分裂,当其计算到这个节点的split的loss是负数时,GBM是一个贪婪算法
    • XGBoost的分类取决于max_depth,当树的深度达到max_depth时,开始进行剪枝,移除没有正基尼(no positive gain)节点的split
    • 另一个优点是一个节点被分裂的时候loss为-2,当其二次分裂的时候loss可能为+10,GBM会停止该节点的分裂,XGBoost会进入到第二步,然后结合两个分裂的影响,最终为+8
  • Built-in Cross-Validation
    • XGBoost允许每一个交叉验证实现boosting过程,因而通过一次run就能获得boosting迭代的优化量
    • 与GBM需要运营grid-search且需要限时值的范围获得优化量不同
  • Continue on Existing Model
  • 用户可以通过上个版本的XGBoost模型训练新版本的模型
  • GBM的sklearn也有这个特性

加深对XGBoost的理解的文章:
1.XGBoost Guide – Introduction to Boosted Trees
2.Words from the Author of XGBoost

XGBoost Parameters

XGBoost的变量类型有三类:

  • General Parameters:调控整个方程
  • Booster Parameters:调控每步树的相关变量
  • Learning Task Parameters:调控优化表现的变量
1.General Parameters:
  • booster [default=gbtree]:

    • gbtree: tree-based models,树模型
    • gblinear: linear models,线性模型
  • silent [default=0]:

    • 设置成1表示打印运行过程中的相关信息
    • 通常选择默认值就好,打印出的信息能够帮助理解model
  • nthread [default to maximum number of threads available if not set]
    • 主要用于并行计算,系统的内核数需要作为变量
    • 如果希望运行所有的内核,就不需要设置该参数,程序会自己检测到该值
2.Booster Parameters

虽然XGBoost有两种boosters,作者在参数这一块只讨论了tree booster,原因是tree booster的表现总是好于 linear booster

  • eta [default=0.3]
    • 与GBM中学习率的概念相似
    • 通过减小每一步的权重能够使得建立的模型更鲁棒
    • 通常最终的数值范围在[0.01-0.2]之间
  • min_child_weight [default=1]
    • 定义观测样本生成的孩子节点的权重最小和
    • 这个概念与GBM中的min_child_leaf概念类似,但是又不完全一样,这个概念指的是某观测叶子节点中所有样本权重之和的最小值,而GBM指的是叶子节点的最少样本量
    • 用于防止过拟合问题:较大的值能防止过拟合,过大的值会导致欠拟合问题
    • 需要通过CV调参
  • max_depth [default=6]
    • 树的最大深度
    • 用于防止过拟合问题
    • 通过CV调参
    • 通常值的范围:[3-10]
  • max_leaf_nodes
    • 一棵树最多的叶子节点的数目
    • 与max_depth定义一个就好
  • gamma [default=0]
    • 一个节点分裂的条件是其分裂能够起到降低loss function的作用,gamma 定义loss function降低多少才分裂
    • 这个变量使得算法变得保守,它的值取决于 loss function需要被调节
  • max_delta_step [default=0]
    • 此变量的设置使得我们定义每棵树的权重估计值的变化幅度。如果值为0,值的变化没有限制,如果值>0,权重的变化将会变得相对保守
    • 通常这个参数不会被使用,但如果是极度不平衡的逻辑回归将会有所帮助
  • subsample [default=1]:
    • 与GBM的subsample定义一样,指的是没有每棵树的样本比例
    • 低值使得模型更保守且能防止过拟合,但太低的值会导致欠拟合
    • 通常取值范围[0.5-1]
  • colsample_bytree [default=1]
    • 与GBM中的max_features类似,指的是每棵树随机选取的特征的比例
    • 通常取值范围[0.5-1]
  • colsample_bylevel [default=1]
    • 指的是树的每个层级分裂时子样本的特征所占的比例
    • 作者表示不用这个参数,因为subsample和colsample_bytree组合做的事与之类似
  • lambda [default=1]
    • l2正则化权重的术语(同 Ridge regression)
    • 用于处理XGBoost里的正则化部分,虽然很多数据科学家不怎么使用这个参数,但是它可以用于帮助防止过拟合
  • alpha [default=0]
    • l1正则化的权重术语(同Lasso regression)
    • 当特征量特别多的时候可以使用,这样能加快算法的运行效率
  • scale_pos_weight [default=1]
    • 当样本不平衡时,需要设置一个大于0的数帮助算法尽快收敛
3.Learning Task Parameters

此类变量用于定义优化目标每一次计算的需要用到的变量

  • objective [default=reg:linear]
    • 用于定义loss function,通常有以下几类
    • binary:logistic-用于二分类,返回分类的概率而不是类别(class)
    • multi:softmax-多分类问题,返回分类的类别而不是概率
    • multi:softprob-与softmax类似,但是返回样本属于每一类的概率
  • eval_metric [ default according to objective ]
    • 这个变量用于 测试数据(validation data.)
    • 默认值:回归-rmse;分类-error
    • 通常值如下:
      • rmse – root mean square error
      • mae – mean absolute error
      • logloss – negative log-likelihood
      • error – Binary classification error rate (0.5 threshold)
      • merror – Multiclass classification error rate
      • mlogloss – Multiclass logloss
      • auc: Area under the curve
  • seed [default=0]
    • 随机种子的值

有些变量在Python的sklearn的接口中对应命名如下:
1. eta -> learning rate
2. lambda ->reg_lambda
3. alpha -> reg_alpha

可能感到困惑的是这里并没有像GBM中一样提及n_estimators,这个参数实际存在于XGBClassifier中,但实际是通过num_boosting_rounds在我们调用fit函数事来体现的。

作者推荐以下链接,进一步加深对XGBOOST的了解:
1.XGBoost Parameters (official guide)
2.XGBoost Demo Codes (xgboost GitHub repository)
3.Python API Reference (official guide)

XGBoost 调参步骤

#导入需要的数据和库
#Import libraries:
import pandas as pd
import numpy as np
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
from sklearn import cross_validation, metrics   #Additional scklearn functions
from sklearn.grid_search import GridSearchCV   #Perforing grid search

import matplotlib.pylab as plt
%matplotlib inline
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 12, 4

train = pd.read_csv('train_modified.csv')
target = 'Disbursed'
IDcol = 'ID'

此处作者调用了两种类型的XGBoost:
1.xgb:xgboost直接的库,可以调用cv函数
2.XGBClassifier: sklearn对XGBoost的包装,可以允许使用sklearn的网格搜索功能进行并行计算

#定义一个函数帮助产生xgboost模型及其效果
def modelfit(alg, dtrain, predictors,useTrainCV=True, cv_folds=5, early_stopping_rounds=50):

    if useTrainCV:
        xgb_param = alg.get_xgb_params()
        xgtrain = xgb.DMatrix(dtrain[predictors].values, label=dtrain[target].values)
        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
            metrics='auc', early_stopping_rounds=early_stopping_rounds, show_progress=False)
        alg.set_params(n_estimators=cvresult.shape[0])

    #Fit the algorithm on the data
    alg.fit(dtrain[predictors], dtrain['Disbursed'],eval_metric='auc')

    #Predict training set:
    dtrain_predictions = alg.predict(dtrain[predictors])
    dtrain_predprob = alg.predict_proba(dtrain[predictors])[:,1]

    #Print model report:
    print "\nModel Report"
    print "Accuracy : %.4g" % metrics.accuracy_score(dtrain['Disbursed'].values, dtrain_predictions)
    print "AUC Score (Train): %f" % metrics.roc_auc_score(dtrain['Disbursed'], dtrain_predprob)

    feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
    feat_imp.plot(kind='bar', title='Feature Importances')
    plt.ylabel('Feature Importance Score')

#xgboost’s sklearn没有feature_importances,但是#get_fscore() 有相同的功能
General Approach for Parameter Tuning

通常的做法如下:
1.选择一个相对高一点的学习率(learning rate):通常0.1是有用的,但是根据问题的不同,可以选择范围在[0.05,0.3]之间,根据选好的学习率选择最优的树的数目,xgboost有一个非常有用的cv函数可以用于交叉验证并能返回最终的最优树的数目
2.调tree-specific parameters(max_depth, min_child_weight, gamma, subsample, colsample_bytree)
3.调regularization parameters(lambda, alpha)
4.调低学习率并决定优化的参数

step1:Fix learning rate and number of estimators for tuning tree-based parameters

1.设置参数的初始值:

  • max_depth = 5 : [3,10],4-6都是不错的初始值的选择
  • min_child_weight = 1 : 如果数据是不平衡数据,初始值设置最好小于1
  • gamma = 0 : 初始值通常设置在0.1-0.2范围内,并且在后续的调参中也会经常被调节
  • subsample, colsample_bytree = 0.8 : 通常使用0.8作为调参的开始参数,调整范围为[0.5-0.9]
  • scale_pos_weight = 1:因为作者的数据为高度不平衡数据
#通过固定的学习率0.1和cv选择合适的树的数量
#Choose all predictors except target & IDcols
predictors = [x for x in train.columns if x not in [target, IDcol]]
xgb1 = XGBClassifier(
 learning_rate =0.1,
 n_estimators=1000,
 max_depth=5,
 min_child_weight=1,
 gamma=0,
 subsample=0.8,
 colsample_bytree=0.8,
 objective= 'binary:logistic',
 nthread=4,
 scale_pos_weight=1,
 seed=27)
modelfit(xgb1, train, predictors)
#作者调整后得到的树的值为140,如果这个值对于当前的系统而言太大了,可以调高学习率重新训练
step2:Tune max_depth and min_child_weight

先调这两个参数的原因是因为这两个参数对模型的影响做大

param_test1 = {
 'max_depth':range(3,10,2),
 'min_child_weight':range(1,6,2)
}
gsearch1 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=5,
 min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1, seed=27), 
 param_grid = param_test1, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch1.fit(train[predictors],train[target])
gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_

最优的 max_depth=5,min_child_weight=5
因为之前的步长是2,在最优参数的基础上,在上调下调各一步,看是否能得到更好的参数

param_test2 = {
 'max_depth':[4,5,6],
 'min_child_weight':[4,5,6]
}
gsearch2 = GridSearchCV(estimator = XGBClassifier( learning_rate=0.1, n_estimators=140, max_depth=5,
 min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test2, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch2.fit(train[predictors],train[target])
gsearch2.grid_scores_, gsearch2.best_params_, gsearch2.best_score_

以上结果跑出来的最优参数为:max_depth=4,min_child_weight=6,另外从作者跑出来的cv结果看,再提升结果比较困难,可以进一步对min_child_weight试着调整看一下效果:

param_test2b = {
 'min_child_weight':[6,8,10,12]
}
gsearch2b = GridSearchCV(estimator = XGBClassifier( learning_rate=0.1, n_estimators=140, max_depth=4,
 min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test2b, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch2b.fit(train[predictors],train[target])
modelfit(gsearch3.best_estimator_, train, predictors)
gsearch2b.grid_scores_, gsearch2b.best_params_, gsearch2b.best_score_
step3:Tune gamma
param_test3 = {
 'gamma':[i/10.0 for i in range(0,5)]
}
gsearch3 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=4,
 min_child_weight=6, gamma=0, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test3, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch3.fit(train[predictors],train[target])
gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_

基于以上调好参数的前提下,可以看一下模型的特征的表现:

xgb2 = XGBClassifier(
 learning_rate =0.1,
 n_estimators=1000,
 max_depth=4,
 min_child_weight=6,
 gamma=0,
 subsample=0.8,
 colsample_bytree=0.8,
 objective= 'binary:logistic',
 nthread=4,
 scale_pos_weight=1,
 seed=27)
modelfit(xgb2, train, predictors)
step4: Tune subsample and colsample_bytree
param_test4 = {
 'subsample':[i/10.0 for i in range(6,10)],
 'colsample_bytree':[i/10.0 for i in range(6,10)]
}
gsearch4 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=177, max_depth=4,
 min_child_weight=6, gamma=0, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test4, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch4.fit(train[predictors],train[target])
gsearch4.grid_scores_, gsearch4.best_params_, gsearch4.best_score_
#上一步发现最优值均为0.8,这一步做的事情是在附近以0.05的步长做调整
param_test5 = {
 'subsample':[i/100.0 for i in range(75,90,5)],
 'colsample_bytree':[i/100.0 for i in range(75,90,5)]
}
gsearch5 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=177, max_depth=4,
 min_child_weight=6, gamma=0, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test5, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch5.fit(train[predictors],train[target])
Step 5: Tuning Regularization Parameters

这一步的作用是通过使用过regularization 来降低过拟合问题,大部分的人选择忽略这个参数,因为gamma 有提供类似的功能

param_test6 = {
 'reg_alpha':[1e-5, 1e-2, 0.1, 1, 100]
}
gsearch6 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=177, max_depth=4,
 min_child_weight=6, gamma=0.1, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test6, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch6.fit(train[predictors],train[target])
gsearch6.grid_scores_, gsearch6.best_params_, gsearch6.best_score_

这一步调参之后结果可能会变差,方法是在获得的最优的参数0.01附近进行微调,看能否获得更好的结果

param_test7 = {
 'reg_alpha':[0, 0.001, 0.005, 0.01, 0.05]
}
gsearch7 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=177, max_depth=4,
 min_child_weight=6, gamma=0.1, subsample=0.8, colsample_bytree=0.8,
 objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), 
 param_grid = param_test7, scoring='roc_auc',n_jobs=4,iid=False, cv=5)
gsearch7.fit(train[predictors],train[target])
gsearch7.grid_scores_, gsearch7.best_params_, gsearch7.best_score_

然后基于获得的更好的值,我们再看一下模型的整体表现

xgb3 = XGBClassifier(
 learning_rate =0.1,
 n_estimators=1000,
 max_depth=4,
 min_child_weight=6,
 gamma=0,
 subsample=0.8,
 colsample_bytree=0.8,
 reg_alpha=0.005,
 objective= 'binary:logistic',
 nthread=4,
 scale_pos_weight=1,
 seed=27)
modelfit(xgb3, train, predictors)
Step 6: Reducing Learning Rate

最后一步就是 降低学习率并增加更多的树

xgb4 = XGBClassifier(
 learning_rate =0.01,
 n_estimators=5000,
 max_depth=4,
 min_child_weight=6,
 gamma=0,
 subsample=0.8,
 colsample_bytree=0.8,
 reg_alpha=0.005,
 objective= 'binary:logistic',
 nthread=4,
 scale_pos_weight=1,
 seed=27)
modelfit(xgb4, train, predictors)

最后作者分享了两条经验:
1.仅仅通过调参来提升模型的效果是很难的
2.想要提升模型的效果,还可以通过特征工程、模型融合以及stacking方法

xgboost模型介绍 XGBoost全称为eXtreme Gradient Boosting,即极致梯度提升树。XGBoost是非常强大且受欢迎的机器学习模型,尤其是在各类竞赛中被广泛使用。他是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器(个体学习器间存在强依赖关系,必须串行生成的序列化方法)。XGBoost是一种提升树模型,即它将许多树模型集成在一起,形成一个很强的分类器。其中所用到的树模型则是CART回归树模型。 阅读详情

相关推荐

XGBoost实战与调参优化

本篇主要内容包括XGBoost的入门教学、调参优化,将之前自己遇到的问题细心的整理一遍;XGBoost参数繁多,所以如果要调参,就一定要知道每个参数的作用于意义,因此本人十分建议在实战之前对XGBoost的理论分析有一定的了解,博主在之前写过一篇XGBoost原理与实例,里面详细的介绍了XGBoost的基本原理,有兴趣的小伙伴可以先去那里观摩一番,之后再看本篇有事半功倍的效果哦!! 现简要说明...

weixin_41580067的博客 1万+

XGBoost 重要参数(调参使用)

XGBoost 重要参数(调参使用) 数据比赛Kaggle,天池中最常见的就是XGBoost和LightGBM。 模型是在数据比赛中尤为重要的,但是实际上,在比赛的过程中,大部分朋友在模型上花的时间却是相对较少的,大家都倾向于将宝贵的时间留在特征提取与模型融合这些方面。在实战中,我们会先做一个baseline的demo,尽可能快尽可能多的挖掘出模型的潜力,以便后期将精力花在特征和模型融合上。这里就...

lizz2276的博客 3931

xgboost 算法原理

1、xgboost是什么全称:eXtreme Gradient Boosting 作者:陈天奇(华盛顿大学博士) 基础:GBDT 所属:boosting迭代型、树类算法。 适用范围:分类、回归 优点:速度快、效果好、能处理大规模数据、支持多种语言、支 持自定义损失函数等等。 缺点:发布时间短(2014),工业领域应用较少,待检验2、基础知识,GBDTxgboost

哆啦A梦的博客 7万+

【机器学习】XGBoost 原理及调参指南 整理

XGBoost XGBoost能自动利用cpu的多线程,而且适当改进了gradient boosting,加了剪枝,控制了模型的复杂程度 传统GBDT以CART作为基分类器,特指梯度提升决策树算法,而XGBoost还支持线性分类器(gblinear),这个时候XGBoost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。 传统GBDT在优化时只用到一...

CWS_chen 5097

Xgboost算法原理详解及python实现

Xgboost算法(回归树)1、算法原理2、对数据的要求(无需规范化)3、算法的优缺点4、XGB、GBDT、LR与RF5、python代码实现(待更......)导入相关包读取数据并预处理(必须处理缺失值)训练评估 1、算法原理 步骤(booststrap sampling): 目标函数:obj(t)=∑i=1nL(yi,y^i(t−1)+ftxi)+Ωf(t)+Cobj^{(t)}=\sum_{i=1}^nL(y_i,\widehat y_i^{(t-1)}+f_t^{x_i})+\Omega f(t)+

weixin_41851055的博客 2421

【原创】XGBoost分类器原理及应用实战

本文结合作者对xgboost原理的理解及使用xgboost做分类问题的经验,讲解xgboost在分类问题中的应用。内容主要包括xgboost原理简述、xgboost_classifer代码、xgboost使用心得和几个有深度的问题 XGBoost原理简述 xgboost并没有提出一种新的机器学习算法,而是基于现有的GBDT/lambdaMART等tree boosting算法在系统及算法层面(主要是系统层面)进行了改进;系统层面改进点包括:带权重的分位点分割算法(weighted quantile sket

suvedo的博客 1万+

xgboost算法_Xgboost调参小结

  XGBoost全称是eXtreme Gradient Boosting,由陈天奇所设计,和传统的梯度提升算法相比,XGBoost进行了许多改进,它能够比其他使用梯度提升的集成算法更加快速。关于xgboost的使用教程以及推导过程可以参考之前写的文章。xgboost简易入门教程常用机器学习算法的原理推导  本文主要介绍xgb算法的调参过程,xgb本质上是boosting方法,即通过在数据上逐一构...

weixin_39806288的博客 489

Xgboost调参小结

  XGBoost全称是eXtreme Gradient Boosting,由陈天奇所设计,和传统的梯度提升算法相比,XGBoost进行了许多改进,它能够比其他使用梯度提升的集成算法更加快速。关于xgboost的使用教程以及推导过程可以参考之前写的文章。 xgboost简易入门教程 常用机器学习算法的原理推导   本文主要介绍xgb算法的调参过程,xgb本质上是boosting方法,即通过在数据上逐一构建多个弱评估器,经过多次迭代逐渐累积多个弱评估器的方法。xgb中的每个分类器是cart树,因此树模型.

lc434699300的博客 1398

XGBoost python调参

1. 简介 如果你的预测模型表现得有些不尽如人意,那就用XGBoost吧。XGBoost算法现在已经成为很多数据工程师的重要武器。它是一种十分精致的算法,可以处理各种不规则的数据。 构造一个使用XGBoost的模型十分简单。但是,提高这个模型的表现就有些困难(至少我觉得十分纠结)。这个算法使用了好几个参数。所以为了提高模型的表现,参数的调整十分必要。在解决实际问题的时候,有些问题是很难回答的——你需要调整哪些参数?这些参数要调到什么值,才能达到理想的输出? 这篇文章最适合刚刚接触XGBoost的人阅读。在这

weixin_50304531的博客 3078

【算法】Xgboost原理

凡成大事,以识为主,以才为辅;凡办大事,人谋居半,天意居半

1491

一文速学-XGBoost模型算法原理以及实现+贷款违约预测模型Python项目实战

集成模型Boosting补完计划第三期了,之前我们已经详细描述了AdaBoost算法模型和GBDT原理以及实践。通过这两类算法就可以明白Boosting算法的核心思想以及基本的运行计算框架,余下几种Boosting算法都是在前者的算法之上改良得到,尤其是以GBDT算法为基础改进衍生出的三种Boosting算法:XGBoost、LightGBM、CatBoost。大家应该都对XGBoost算法模型熟悉但是对GBDT模型一无所知,看过之前GBDT的读者应该对GBDT模型有了一个很清楚的认知,对于理解XGBoos

master_hunter的博客 1万+

XGBoost算法原理与调参实战指南

实际使用中发现,平台的项目生成速度很快,特别适合快速验证不同参数组合的效果。对于需要展示的项目,一键部署功能可以直接生成可访问的演示链接,方便团队协作和成果展示。XGBoost作为GBDT的优化版本,在机器学习竞赛中表现优异。learning_rate:学习率。gamma:分裂最小损失减少量。通过预排序算法优化分裂点查找。最后优化gamma和采样参数。同时考虑一阶和二阶导数信息。保留独立测试集做最终评估。ROC曲线和AUC值。

HessoniteWolf99的博客 882

机器学习分类算法之XGBoost(集成学习算法)

目录 走进XGBoost 什么是XGBoost? XGBoost树的定义 XGBoost核心算法 正则项:树的复杂程度 XGBoost与GBDT有什么不同 XGBoost需要注意的点 XGBoost重要参数详解 调参步骤及思想 XGBoost代码案例 相关性分析 n_estimators(学习曲线) max_depth(学习曲线) 调整max_depth 和min_child_weight 调整gamma 调整subsample 和colsample_bytree 调整正则

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 11万+

XGBoost算法简介及Python实现

GB(梯度提升)算法就是用损失函数的梯度近似新一轮的残差。GBDT即采用决策树(通常为CART回归树)作为基本分类器的提升算法。GBDT算法是一种加法模型,即逐步添加树以使得目标函数(或称代价函数,即损失函数之和)值最大程度减小。此时的目标函数没有正则化项,仅仅是损失函数(通常是平方损失函数)值之和,这样容易造成过拟合,因为对于回归树一直细分下去损失函数一直减小,树的层数却越来越大。 实质上决策...

slx_share的博客 8176

三菱A800变频器矢量控制实战:从速度控制到位置控制的PLG参数设置全解析

本文深入解析了三菱A800变频器结合FR-A8AP选件板与PLG(脉冲编码器)实现高精度矢量控制的实战应用。详细阐述了从速度控制、转矩控制到位置控制三种高级模式的切换逻辑、核心参数设置及硬件接线要点,帮助工程师充分发挥A800变频器的闭环控制潜力,应对复杂工业自动化场景。

weixin_28308325的博客 327

深度:善用人工智能推动高等教育学习、教学与治理的深层变革

从学习方式的革新到教学模式的重构,再到治理体系的升级,人工智能已不再仅仅是辅助工具,而是成为重塑高等教育生态的核心驱动力。某高校的创新实践表明,引入AI生成虚拟患者后,医学生在临床沟通训练中的共情能力提升27%,印证了技术工具与人文教育的互补效应。美国卡内基梅隆大学的实践表明,经过系统培训的教师,其课程设计效率提升40%,且能精准定位83%学生的学习难点。当每个学生都掌握提示工程原理,每位教师都能驾驭AI教学工具,每所高校都建立智能治理框架时,教育将真正实现"以人为本"与"技术为用"的有机统一。

IT胶囊 1095

python xgboost调参_XGBoost从原理到调参

承接上文挂枝儿:再从GBDT到XGBoost!​zhuanlan.zhihu.com理解了原理,那么接下来就要开始学习怎么调参了,之前做模型的时候用xgboost比较简单粗暴跟着教程一顿乱fit,但最近比较完整的过了下原理之后,找了个sampledata过来想练个手却感觉完全懵逼了,这篇文章就相当于给自己之后把玩xgboost当个baseline guide吧.对了,虽然这篇文章是写调参的,但我个...

weixin_35651329的博客 744

星宸科技SSD20x/SSD21X应用层DEMO实战指南:从入门到深度定制

本文详细介绍了星宸科技SSD20x/SSD21X系列芯片的应用层DEMO开发实战,从基础环境搭建到深度定制开发。内容涵盖DEMO资源获取、核心功能实现、第三方库集成以及性能优化技巧,帮助开发者快速掌握智能显示和多媒体处理应用的开发方法。特别适合嵌入式开发者在智能家居、工业控制等场景中应用。

weixin_42524226的博客 269

XGBOOST模型简单调参(分类)

1.模型选择与评估 1.1 模型参数、超参数 了解什么是模型参数,什么是超参数是很必要的,不同类型的参数需要在不同的阶段进行调节(参数——训练集;超参数——验证集) 模型参数:模型内部的配置变量,可以通过数据估计(学习)模型参数的值 超参数:模型的外部配置变量,需要手动设置,好的超参数可以进一步提高模型的性能 模型参数的特点: 1.进行模型预测时需要模型参数; 2.可定义模型功能; 3.可使用数...

小葱拌豆腐 3619

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7435

基于ESM3微调的抗菌肽生成器:技术方案与实现

基于ESM3微调的抗菌肽生成器:技术方案与实现 摘要 本文提出了一种基于ESM3蛋白质语言模型的抗菌肽生成框架,采用两阶段训练策略:先在151万肽序列上预训练,再在1.3万抗菌肽数据上微调。模型能够生成具有合理长度分布、低重复率且高新颖性的抗菌肽序列。文章详细介绍了数据预处理流程、模型架构设计、训练策略及评估方法,为抗菌肽的理性设计提供了有效的计算工具。实验结果表明,该方法生成的抗菌肽序列在保持生物活性的同时具有较高的结构多样性。 关键词:抗菌肽设计;蛋白质语言模型;ESM3;深度学习;序列生成

huanghm88的专栏 178
上一篇: 如何选择机器学习算法
下一篇: Gradient Boosting(GBM) 调参指南
RuDing
博客等级 码龄9年 19粉丝 7原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值