XGBoost(極致梯度提升)
/ EKS-jee-boost /
XGBoost與其說是個新想法,不如說是把一個老想法精雕細琢地工程化了。它就是梯度提升——那個「組建一支互相糾錯的樹之隊伍」的方法——只是實現得極其用心,訓練快、省記憶體,比教科書版本更能抵抗過擬合。把它想成自製卡丁車與調校過的賽車之間的差別:發動機原理相同,實際表現卻天差地別。它在2014年前後問世,成了在表格資料上一次次贏下競賽的利器。
它的改進,大多是疊加在樸素提升之上的實用功夫。它把正則化(對過於複雜的樹施加懲罰)直接揉進每棵樹要優化的目標裡,於是模型從一開始就被往簡潔的方向推。它用更聰明的數學來決定每一次分叉,自動處理缺失值(學著該把它們往哪邊送),並經過大量優化,能在多核處理器和大資料集上跑而不卡殼。結果是它既保住了提升的準頭,又馴服了它的繁瑣和遲緩。
它的拿手好戲是結構化的表格資料——一行行一列列的試算表,比如交易記錄、感測器讀數或病歷——多年過去,在那片天地裡它依舊是最強的開箱即用選擇之一,與LightGBM、CatBoost這些表親並列。它不擅長的,是原始的影像、音訊或自由文本;那些屬於神經網路。它也承襲了提升的注意事項:要調的旋鈕很多,若放任它不加管束,過擬合是實實在在的風險。強大,但絕非萬靈藥。
一家銀行給200萬筆信用卡交易打詐欺分,每筆有80個特徵、還有許多空缺。XGBoost在幾分鐘內跨電腦的所有核心完成訓練,自己學會把缺失值往哪邊送,並標出風險最高的那0.1%——正是它出名的那種又快又準的表格主力活兒。
提升的準頭,再加上為速度、規模和內建正則化所做的工程優化。
XGBoost是梯度提升的一種實現,而不是另一種演算法——真正的概念飛躍是提升本身。在「行與列」式的資料上,它常常勝過深度學習,但換到原始的影像、聲音或文本,優勢就倒向了神經網路。