XGBoost(极致梯度提升)
/ EKS-jee-boost /
XGBoost与其说是个新想法,不如说是把一个老想法精雕细琢地工程化了。它就是梯度提升——那个「组建一支互相纠错的树之队伍」的方法——只是实现得极其用心,训练快、省内存,比教科书版本更能抵抗过拟合。把它想成自制卡丁车与调校过的赛车之间的差别:发动机原理相同,实际表现却天差地别。它在2014年前后问世,成了在表格数据上一次次赢下竞赛的利器。
它的改进,大多是叠加在朴素提升之上的实用功夫。它把正则化(对过于复杂的树施加惩罚)直接揉进每棵树要优化的目标里,于是模型从一开始就被往简洁的方向推。它用更聪明的数学来决定每一次分叉,自动处理缺失值(学着该把它们往哪边送),并经过大量优化,能在多核处理器和大数据集上跑而不卡壳。结果是它既保住了提升的准头,又驯服了它的繁琐和迟缓。
它的拿手好戏是结构化的表格数据——一行行一列列的电子表格,比如交易记录、传感器读数或病历——多年过去,在那片天地里它依旧是最强的开箱即用选择之一,与LightGBM、CatBoost这些表亲并列。它不擅长的,是原始的图像、音频或自由文本;那些属于神经网络。它也承袭了提升的注意事项:要调的旋钮很多,若放任它不加管束,过拟合是实实在在的风险。强大,但绝非万灵药。
一家银行给200万笔信用卡交易打欺诈分,每笔有80个特征、还有许多空缺。XGBoost在几分钟内跨计算机的所有核心完成训练,自己学会把缺失值往哪边送,并标出风险最高的那0.1%——正是它出名的那种又快又准的表格主力活儿。
提升的准头,再加上为速度、规模和内置正则化所做的工程优化。
XGBoost是梯度提升的一种实现,而不是另一种算法——真正的概念飞跃是提升本身。在「行与列」式的数据上,它常常胜过深度学习,但换到原始的图像、声音或文本,优势就倒向了神经网络。