Python技术迷

提升算法对比:AdaBoost、CatBoost、LightGBM、XGBoost

关于提升算法怎么选,什么AdaBoost、CatBoost、LightGBM、XGBoost的区别,有没有通俗点的说法?我寻思着这事还真得聊聊——就不摆那些官方文档那套了,谁有空去啃那些一堆数学公式啊?咱说点人能听懂的哈。

最早那波:AdaBoost有一阵我刚入行没多久,那时候公司做风控模型还特别流行AdaBoost,印象深是因为那会我们组的老大天天拿“集成方法”教育我们,意思就是你一堆弱鸡模型加一块,合起来就变牛逼了。AdaBoost的精髓就是这样:每轮都关注你上轮错的那些点,谁老出错谁权重大,然后新一轮你就得把那些搞定。

我记得有次写代码调AdaBoost,sklearn用起来就特别直白,基本就是:

from sklearn.ensemble import AdaBoostClassifier
clf = AdaBoostClassifier(n_estimators=50)
clf.fit(X_train, y_train)

不过吧,AdaBoost特别吃噪声和异常值,稍微数据有点乱它就容易崩。所以后来实际用得不多了。

后来就有了XGBoostXGBoost爆火那年我印象深刻,网上好多比赛冠军用的都是它,原理其实也是提升树,不过加了一堆优化,比如正则化、分裂方式快,还有用DMatrix那个数据格式,内存省多了。我那会熬夜调参,为了分数涨0.01,整个人都魔怔了。

你用XGBoost代码一般就这样:

import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train)
params = {'max_depth': 3, 'eta': 0.1, 'objective': 'binary:logistic'}
bst = xgb.train(params, dtrain, num_boost_round=10)

XGBoost对缺失值特别友好,不用自己补,直接丢进去就行。但缺点是有时候分类变量多了得自己做编码,不然不认。

再后来LightGBM横空出世这玩意最吸引我的就是速度贼快,那会儿我们业务数据量突然飙升,XGBoost一跑就卡,改用LightGBM,几乎一半时间就训练完了。LightGBM的trick特别多,比如用直方图(histogram)算特征分裂,还有支持按叶子生长的策略(leaf-wise),导致有时精度能多榨出一丢丢。

代码差不多这样:

import lightgbm as lgb
train_data = lgb.Dataset(X_train, label=y_train)
params = {'objective': 'binary', 'metric': 'binary_logloss'}
gbm = lgb.train(params, train_data, num_boost_round=20)

但要注意哦,LightGBM对类别型特征支持得比XGBoost好些,你直接给整数也能跑,只是高基数的时候容易过拟合。

最后CatBoost来了其实我最早用CatBoost的时候还有点不适应,名字太猫了,后来发现它对类别变量简直是亲妈,数据不做one-hot,直接丢给它自己就能处理,省心多了。那会有个项目做用户行为预测,原始特征全是字符串ID,CatBoost效果最好。

代码一般这样:

from catboost import CatBoostClassifier
model = CatBoostClassifier(iterations=10, verbose=0)
model.fit(X_train, y_train, cat_features=[0,2,5])

连空值、类别啥的都不用你管,自己能搞定。就是训练慢一点,占内存大一点,模型体积也比LightGBM大,但实在省事。

真实体验对比下我自己真正在项目里用,其实就是按场景来选。

  • 数据干净,特征主要数值型,不太大,XGBoost最稳;
  • 特征多、维度高、量大、时间紧,用LightGBM;
  • 类别变量巨多,不想手动编码,直接CatBoost;
  • 如果模型很简单、样本量也不大,还真能试试AdaBoost,代码最少。

有时候老板就问一句“哪个最好用”,我心里都想说你别乱问,这玩意像鞋子,脚宽脚窄不一样。

这几个提升算法都是树模型的升级款,但更像是一家子,各有脾气,没啥银弹。日常业务里其实调参比选型更难——你以为换个算法能起飞,结果大概率就是你特征没造好,或者数据清洗没到位。

要真想省事点,不如一上来就CatBoost,啥都不用管,先撸一把baseline再说。哎,前面排队的都拿上煎饼走了,我赶紧下单,饿死个人...

-END-

我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领